class PluginWindow(object): plugin = None gedit_window = None plugin_window = None template = None text_entry = None hit_list = None list_model = gtk.ListStore(str, str) buffer_manager = None accel_group = gtk.AccelGroup() def __init__(self, plugin, gedit_window): self.plugin = plugin self.gedit_window = gedit_window self.buffer_manager = BuffersManager(self.gedit_window) self.init_hotkeys() self.init_glade() def cleanup(self): self.remove_hotkeys() def init_hotkeys(self): self.accel_group.connect_group(HOTKEY[0], HOTKEY[1], 0, lambda _1, _2, _3, _4: self.on_cxb_action()) self.gedit_window.add_accel_group(self.accel_group) def remove_hotkeys(self): self.gedit_window.remove_accel_group(self.accel_group) def init_glade(self): self.template = gtk.glade.XML(GLADE_TEMPLATE_FILE) # setup window self.plugin_window = self.template.get_widget("CXBWindow") self.plugin_window.connect("key-release-event", self.on_window_key) self.plugin_window.set_transient_for(self.gedit_window) #setup entry field self.text_entry = self.template.get_widget("entry_name") self.text_entry.connect("key-release-event", self.on_pattern_entry) #setup list field self.hit_list = self.template.get_widget("hit_list") self.hit_list.connect("select-cursor-row", self.on_select_from_list) self.hit_list.connect("button_press_event", self.on_list_mouse) self.hit_list.set_model(self.list_model) column = gtk.TreeViewColumn("Name" , gtk.CellRendererText(), text=0) column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) column2 = gtk.TreeViewColumn("File", gtk.CellRendererText(), text=1) column2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) self.hit_list.append_column(column) self.hit_list.append_column(column2) self.hit_list.get_selection().set_mode(gtk.SELECTION_BROWSE) def on_window_key(self, widget, event): if event.keyval == gtk.keysyms.Escape: self.plugin_window.hide() def fill_in_results(self): def make_row(document): return [self.buffer_manager.format_name(doc.get_uri_for_display()), self.buffer_manager.format_uri(doc.get_uri())] pattern = self.text_entry.get_text() documents = self.buffer_manager.find_matching_buffers(pattern) self.list_model.clear() for doc in documents: self.list_model.append(make_row(doc)) # select first result by default self.hit_list.get_selection().select_path((0,)) def on_pattern_entry(self, widget, event): if event.keyval == gtk.keysyms.Return: self.switch_to_buffer(event) return self.fill_in_results() #mouse event on list def on_list_mouse(self, widget, event): if event.type == gtk.gdk._2BUTTON_PRESS: self.switch_to_buffer(event) #key selects from list (passthrough 3 args) def on_select_from_list(self, widget, event): self.switch_to_buffer(event) def switch_to_buffer(self, event): _list_store, rows = self.hit_list.get_selection().get_selected_rows() if rows: doc_idx = rows[0][0] self.text_entry.set_text('') self.plugin_window.hide() self.buffer_manager.switch_to_buffer_by_index(doc_idx) def on_cxb_action(self): self.plugin_window.set_title("Switch to a buffer...") self.fill_in_results() self.plugin_window.show() self.text_entry.select_region(0, -1) self.text_entry.grab_focus()