def __init__(self, debug=False): ### Command box ### cmdlabel = gtk.Label('cmd >') cmdlabel.set_padding(5, 0) self.cmdbox = gtk.combo_box_entry_new_text() self.cmdbox.set_active(0) self.cmdbox.set_focus_on_click(False) self.cmdbox.connect('changed', self.on_item_selected) completion = gtk.EntryCompletion() completion.set_model(self.cmdbox.get_model()) completion.set_text_column(0) self.entry = self.cmdbox.get_child() self.entry.set_completion(completion) self.entry.connect('activate', self.on_entry_activate) self.entry.connect('key-press-event', self.on_key_pressed) self.entry.connect('populate-popup', self.on_populate_popup) self.cmdbutton = gtk.Button(stock=gtk.STOCK_EXECUTE) self.cmdbutton.connect('clicked', self.on_cmdbutton_clicked) hbox = gtk.HBox(spacing=3) hbox.pack_start(cmdlabel, fill=False, expand=False) hbox.pack_start(self.cmdbox) hbox.pack_start(self.cmdbutton, fill=False, expand=False) ### Output plane ### outputplane = GtkOutputPlane(hide_button=False) outputplane.set_editable(False) scrolledwin = gtk.ScrolledWindow() scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolledwin.add(outputplane) ### Status bar ### self.statusbar = gtk.Statusbar() id_ = self.statusbar.get_context_id('ready') self.statusbar.push(id_, 'Ready.') ### Main window ### vbox = gtk.VBox(spacing=3) vbox.set_border_width(3) vbox.pack_start(hbox, fill=True, expand=False) vbox.pack_start(scrolledwin) vbox.pack_start(self.statusbar, fill=True, expand=False) accelgroup = gtk.AccelGroup() accelgroup.connect_group(ord('d'), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE, self.quit) self.mainwin = gtk.Window() self.mainwin.set_title('GTK Shell') self.mainwin.add(vbox) self.mainwin.set_default_size(650, 500) self.mainwin.add_accel_group(accelgroup) self.mainwin.connect('destroy', self.quit) self.mainwin.show_all() ### Setup the log system ### if debug: level = logging.DEBUG logging.basicConfig(level=level) else: level = logging.INFO self.logger = logging.getLogger() formatter = logging.Formatter('%(levelname)s: %(message)s') handler = GtkLoggingHandler(outputplane) handler.setLevel(level) handler.setFormatter(formatter) self.logger.addHandler(handler) formatter = logging.Formatter('%(message)s') handler = GtkDialogLoggingHandler(parent=self.mainwin, dialog=None) handler.setLevel(logging.WARNING) handler.setFormatter(formatter) self.logger.addHandler(handler) self.logger.setLevel(level) ### Setup high level components and initialize the parent classes ### handler = GtkOutputHandler(self.logger, self.statusbar) self.tool = exectools.ToolDescriptor('', stdout_handler=handler) self.controller = GtkToolController(logger=self.logger) self.controller.connect('finished', self.on_finished) ### Final setup ### self._state = 'ready' # or maybe __state self.logger.debug('gtkshell session started at %s.' % time.asctime()) self.load_history()