Пример #1
0
class consoleWnd:
    windowname = 'window1'
    textWndName = 'consoleTextWnd'
    builder = gtk.Builder()
    '''
    This class manages console windows, it will kill applications for every console window.
    '''
        
    def __init__(self, parent):
        gladefile = "consoleWnd.glade"
        fullPath = fileTools.findFileInProduct(gladefile)
        # Loads the UI from GtkBuilder XML file  
        self.builder.add_from_file(fullPath)  
               
        # Lets extract a reference to window object to use later  
        self.window = self.builder.get_object(self.windowname)  

        self.parent = parent
        #self.minimized = False
        window = self.window
        window.set_resizable(True)
        window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_UTILITY)
        #window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)
        #window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)

        #window.connect("destroy", self.on_quit_clicked)
        #window.connect('window-state-event', self.new_window_state)
        window.set_title("Python console log window")
        window.set_border_width(1)
        dic = {
            "destory_cb":self.on_quit_clicked,
            "minimize_clicked_cb":self.min,
            'topmost_toggled_cb':self.topMost
        }  
        self.builder.connect_signals (dic)  
        self.textview = self.builder.get_object(self.textWndName)
        self.topMostFlag = True
        self.topMost(None)
        
        self.console_output_collector = ConsoleOutputCollector()
        #window.show()
        self.isMinimized = True
        self.window.hide()
    def on_quit_clicked(self, widget):
        self.close_app()
        
    def close_app(self):
        try:
            #Remove menu item in parent (taskbar menu)
            self.parent.consoleClose(self)
        except:
            pass
        try:
            self.console_output_collector.kill_console_process_tree()
        except:
            pass
    def updateViewCallback(self, data):
        #print 'callback called'
        #self.data = data
        #print "updateView:", data
        gobject.idle_add(self.updateView, data)
        import time
        time.sleep(0.1)

    def updateView(self, data):
        buf = self.textview.get_buffer()
        buf.insert(buf.get_end_iter(), data)
        #self.data = ''

        
    def topMost(self, widget):
        self.topMostFlag = not self.topMostFlag
        self.window.set_keep_above(self.topMostFlag)

    def min(self, data):
        self.isMinimized = True
        self.window.hide()
        
    def startAppWithParam(self, progAndParam = ['D:\\code\\python\\developing\\ufs\\webserver-cgi.py']):
        cwd = os.path.dirname(progAndParam[0])
        #self.startApp(cwd, progAndParm)
        self.console_output_collector.runConsoleApp(self, cwd, progAndParam)
        self.window.set_title(' '.join(progAndParam))
        self.progAndParam = progAndParam