def __init__(self, window, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.window = window self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() # self.writeView.set_width_chars(80) self.pack_start(self.writeView, False, True, 0) self.writeView.connect("key-press-event", self.onKeyPress)
def load(self, gmwidg): self.boardview = gmwidg.board.view self.plot = ScorePlot(self.boardview) self.sw = __widget__ = Gtk.ScrolledWindow() __widget__.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) port = Gtk.Viewport() port.add(self.plot) port.set_shadow_type(Gtk.ShadowType.NONE) __widget__.add(port) __widget__.show_all() self.plot_cid = self.plot.connect("selected", self.plot_selected) self.cid = self.boardview.connect('shownChanged', self.shownChanged) self.model_cids = [ self.boardview.model.connect_after("game_changed", self.game_changed), self.boardview.model.connect_after("moves_undone", self.moves_undone), self.boardview.model.connect_after("analysis_changed", self.analysis_changed), self.boardview.model.connect_after("game_started", self.game_started), self.boardview.model.connect_after("game_terminated", self.on_game_terminated), ] def cb_config_changed(none): self.fetch_chess_conf() self.plot.redraw() self.cids_conf = [ conf.notify_add("scoreLinearScale", cb_config_changed) ] self.fetch_chess_conf() uistuff.keepDown(__widget__) return __widget__
def load(self, gmwidg): self.boardview = gmwidg.board.view self.plot = ScorePlot(self.boardview) self.sw = __widget__ = Gtk.ScrolledWindow() __widget__.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) port = Gtk.Viewport() port.add(self.plot) port.set_shadow_type(Gtk.ShadowType.NONE) __widget__.add(port) __widget__.show_all() self.plot.connect("selected", self.plot_selected) self.boardview.connect('shown_changed', self.shown_changed) glock_connect(self.boardview.model, "game_changed", self.game_changed) glock_connect(self.boardview.model, "moves_undoing", self.moves_undoing) glock_connect(self.boardview.model, "analysis_changed", self.analysis_changed) # Add the initial board glock_connect(self.boardview.model, "game_started", self.game_changed) uistuff.keepDown(__widget__) return __widget__
def __init__(self): GObject.GObject.__init__(self) # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() set_textview_color(self.readView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.set_size_request(-1, 20) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) self.pack1(BorderBox(sw, bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw, top=True), resize=True, shrink=True) # Forces are reasonable position for the panner. def callback(widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position( int(max(0.70 * allocation.height, allocation.height - 60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__ (self): GObject.GObject.__init__(self) # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() set_textview_color(self.readView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.set_size_request(-1, 20) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) self.pack1(BorderBox(sw,bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw,top=True), resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.70*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def _createPage(cls, parrentIter, tag): name = tag[-1] iter = cls.treeview.get_model().append(parrentIter, (name, )) cls.tagToIter[tag] = iter widgets = uistuff.GladeWidgets("findbar.glade") frame = widgets["frame"] frame.unparent() frame.show_all() uistuff.keepDown(widgets["scrolledwindow"]) textview = widgets["textview"] tb = textview.get_buffer() tb.create_tag(str(LOG_DEBUG), family='Monospace') tb.create_tag(str(LOG_LOG), family='Monospace', weight=pango.WEIGHT_BOLD) tb.create_tag(str(LOG_WARNING), family='Monospace', foreground="red") tb.create_tag(str(LOG_ERROR), family='Monospace', weight=pango.WEIGHT_BOLD, foreground="red") findbar = widgets["findbar"] findbar.hide() # Make searchEntry and "out of label" share height with the buttons widgets["prevButton"].connect( "size-allocate", lambda w, alloc: widgets["searchEntry"].set_size_request( -1, alloc.height) or widgets["outofLabel"].set_size_request( -1, alloc.height - 2)) # Make "out of label" more visually distinct uistuff.makeYellow(widgets["outofLabel"]) widgets["outofLabel"].hide() widgets["closeButton"].connect("clicked", lambda w: widgets["findbar"].hide()) # Connect showing/hiding of the findbar cls.window.connect("key-press-event", cls.onTextviewKeypress, widgets) widgets["findbar"].connect("key-press-event", cls.onFindbarKeypress) widgets["searchEntry"].connect("changed", cls.onSearchChanged, widgets) widgets["prevButton"].connect("clicked", lambda w: cls.searchJump(-1, widgets)) widgets["nextButton"].connect("clicked", lambda w: cls.searchJump(1, widgets)) cls.pages.append_page(frame) page = {"child": frame, "textview": textview} cls.tagToPage[tag] = page cls.pathToPage[cls.treeview.get_model().get_path(iter)] = page cls.treeview.expand_all()
def _createPage (cls, parrentIter, tag): name = tag[-1] if isinstance(name, int): name=str(name) iter = cls.treeview.get_model().append(parrentIter, (name,)) cls.tagToIter[tag] = iter widgets = uistuff.GladeWidgets("findbar.glade") frame = widgets["frame"] frame.unparent() frame.show_all() uistuff.keepDown(widgets["scrolledwindow"]) textview = widgets["textview"] tb = textview.get_buffer() tb.create_tag(str(logging.DEBUG), family='Monospace') tb.create_tag(str(logging.INFO), family='Monospace', weight=Pango.Weight.BOLD) tb.create_tag(str(logging.WARNING), family='Monospace', foreground="red") tb.create_tag(str(logging.ERROR), family='Monospace', weight=Pango.Weight.BOLD, foreground="red") findbar = widgets["findbar"] findbar.hide() # Make searchEntry and "out of label" share height with the buttons widgets["prevButton"].connect("size-allocate", lambda w, alloc: widgets["searchEntry"].set_size_request(-1, alloc.height) or widgets["outofLabel"].set_size_request(-1, alloc.height-2)) # Make "out of label" more visually distinct uistuff.makeYellow(widgets["outofLabel"]) widgets["outofLabel"].hide() widgets["closeButton"].connect("clicked", lambda w: widgets["findbar"].hide()) # Connect showing/hiding of the findbar cls.window.connect("key-press-event", cls.onTextviewKeypress, widgets) widgets["findbar"].connect("key-press-event", cls.onFindbarKeypress) widgets["searchEntry"].connect("changed", cls.onSearchChanged, widgets) widgets["prevButton"].connect("clicked", lambda w: cls.searchJump(-1, widgets)) widgets["nextButton"].connect("clicked", lambda w: cls.searchJump(1, widgets)) cls.pages.append_page(frame, None) page = {"child": frame, "textview":textview} cls.tagToPage[tag] = page cls.pathToPage[cls.treeview.get_model().get_path(iter).to_string()] = page cls.treeview.expand_all()
def __init__(self, window, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.window = window self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 liststore = Gtk.ListStore(str) for command in FICS_COMMANDS: liststore.append([command]) for command in FICS_HELP: liststore.append(["help %s" % command]) entrycompletion = Gtk.EntryCompletion() entrycompletion.set_model(liststore) entrycompletion.set_text_column(0) entrycompletion.set_minimum_key_length(2) entrycompletion.set_popup_set_width(False) self.entry = Gtk.Entry() self.entry.set_completion(entrycompletion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() sc = self.get_style_context() self.textbuffer.create_tag("text", foreground=sc.get_color( Gtk.StateFlags.NORMAL)) self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback(widget, context): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position( int(max(0.79 * allocation.height, allocation.height - 60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__ (self, connection): GObject.GObject.__init__(self) self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, context): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.79*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def load (self, gmwidg): self.boardview = gmwidg.board.view self.plot = ScorePlot(self.boardview) self.sw = __widget__ = Gtk.ScrolledWindow() __widget__.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) port = Gtk.Viewport() port.add(self.plot) port.set_shadow_type(Gtk.ShadowType.NONE) __widget__.add(port) __widget__.show_all() self.plot.connect("selected", self.plot_selected) self.boardview.connect('shownChanged', self.shownChanged) self.boardview.model.connect_after("game_changed", self.game_changed) self.boardview.model.connect_after("moves_undone", self.moves_undone) self.boardview.model.connect_after("analysis_changed", self.analysis_changed) self.boardview.model.connect_after("game_started", self.game_started) uistuff.keepDown(__widget__) return __widget__
def __init__ (self, connection): gtk.VPaned.__init__(self) self.connection = connection # Inits the read view self.readView = gtk.TextView() fontdesc = pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() self.textbuffer.create_tag("text", foreground="black") self.textbuffer.create_tag("mytext", foreground="darkblue") self.sw = sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.set_shadow_type(gtk.SHADOW_NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = gtk.WRAP_WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, event): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.79*allocation.height, allocation.height-60))) handle_id = self.connect("expose-event", callback) self.writeView.connect("key-press-event", self.onKeyPress) self.writeView.grab_focus()
def __init__ (self, gamemodel=None): GObject.GObject.__init__(self) self.gamemodel = gamemodel # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() #self.readView.set_size_request(-1, 30) set_textview_color(self.readView) sw1 = Gtk.ScrolledWindow() sw1.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw1.set_shadow_type(Gtk.ShadowType.NONE) #sw1.set_size_request(-1, 300) uistuff.keepDown(sw1) sw1.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) if isinstance(self.gamemodel, ICGameModel): self.refresh = Gtk.Image() self.refresh.set_from_pixbuf(load_icon(16, "view-refresh", "stock-refresh")) vp = Gtk.VPaned() # Inits the observers view self.obsView = Gtk.TextView() self.obsView.set_cursor_visible(False) #self.obsView.set_size_request(-1, 3) set_textview_color(self.obsView) sw0 = Gtk.ScrolledWindow() sw0.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw0.set_shadow_type(Gtk.ShadowType.NONE) sw0.set_size_request(-1, 3) uistuff.keepDown(sw0) sw0.add(self.obsView) self.obsView.set_editable(False) self.obsView.props.wrap_mode = Gtk.WrapMode.WORD self.obsView.props.pixels_below_lines = 1 self.obsView.props.pixels_above_lines = 2 self.obsView.props.left_margin = 2 vp.pack1(BorderBox(sw0, bottom=True), resize=False, shrink=False) vp.pack2(BorderBox(sw1, top=True), resize=True, shrink=False) self.pack1(BorderBox(vp, bottom=True), resize=True, shrink=True) else: self.pack1(BorderBox(sw1, bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw2 = Gtk.ScrolledWindow() sw2.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw2.set_shadow_type(Gtk.ShadowType.NONE) sw2.set_size_request(-1, 3) sw2.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw2, top=True), resize=False, shrink=False) # Forces are reasonable position for the panner. def callback (widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.70*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.connection = connection self.connection.players.connect("FICSPlayerEntered", self.on_player_entered) self.connection.players.connect("FICSPlayerExited", self.on_player_exited) # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 self.liststore = Gtk.ListStore(str, int) for command in FICS_COMMANDS: self.liststore.append([command, TYPE_COMMAND]) for command in FICS_HELP: self.liststore.append([command, TYPE_HELP]) completion = Gtk.EntryCompletion() completion.set_model(self.liststore) completion.set_text_column(0) completion.set_minimum_key_length(2) completion.set_popup_set_width(False) def match(completion, entrystr, iter, data): modelstr = completion.get_model()[iter][0].lower() modeltype = completion.get_model()[iter][1] parts = entrystr.split() if len(parts) == 1 and modeltype == TYPE_COMMAND: return modelstr.startswith(entrystr) elif len(parts) == 2: if parts[0] == "help": return modelstr.startswith( parts[1]) and modeltype == TYPE_HELP else: return parts[0] in FICS_COMMANDS and modelstr.startswith( parts[1].lower()) and modeltype == TYPE_USER completion.set_match_func(match, None) def on_match_selected(completion, treemodel, treeiter): modelstr = treemodel[treeiter][0] modeltype = treemodel[treeiter][1] entry = completion.get_entry() parts = entry.get_text().split() if len(parts) == 1 and modeltype == TYPE_COMMAND: entry.set_text(modelstr) entry.set_position(-1) return True elif len(parts) == 2: entry.set_text("%s %s" % (parts[0], modelstr)) entry.set_position(-1) return True completion.connect('match-selected', on_match_selected) self.entry = Gtk.Entry() self.entry.set_completion(completion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.connection = connection self.connection.players.connect("FICSPlayerEntered", self.on_player_entered) self.connection.players.connect("FICSPlayerExited", self.on_player_exited) # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 self.liststore = Gtk.ListStore(str, int) for command in FICS_COMMANDS: self.liststore.append([command, TYPE_COMMAND]) for command in FICS_HELP: self.liststore.append([command, TYPE_HELP]) completion = Gtk.EntryCompletion() completion.set_model(self.liststore) completion.set_text_column(0) completion.set_minimum_key_length(2) completion.set_popup_set_width(False) def match(completion, entrystr, iter, data): modelstr = completion.get_model()[iter][0].lower() modeltype = completion.get_model()[iter][1] parts = entrystr.split() if len(parts) == 1 and modeltype == TYPE_COMMAND: return modelstr.startswith(entrystr) elif len(parts) == 2: if parts[0] == "help": return modelstr.startswith(parts[1]) and modeltype == TYPE_HELP else: return parts[0] in FICS_COMMANDS and modelstr.startswith(parts[1].lower()) and modeltype == TYPE_USER completion.set_match_func(match, None) def on_match_selected(completion, treemodel, treeiter): modelstr = treemodel[treeiter][0] modeltype = treemodel[treeiter][1] entry = completion.get_entry() parts = entry.get_text().split() if len(parts) == 1 and modeltype == TYPE_COMMAND: entry.set_text(modelstr) entry.set_position(-1) return True elif len(parts) == 2: entry.set_text("%s %s" % (parts[0], modelstr)) entry.set_position(-1) return True completion.connect('match-selected', on_match_selected) self.entry = Gtk.Entry() self.entry.set_completion(completion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)