def __init__(self, window): self._window = window self._project_path = "" self._plugin_menu = TmGotoFileMenuHelper(self) # Iniialize gtk window self.builder = gtk.Builder() self.builder.add_from_file(os.path.join(os.path.dirname(__file__), "gotofile.glade")) self.builder.connect_signals(self) self._window_goto_file = self.builder.get_object("windowGotoFile") self._window_goto_file.set_transient_for(self._window) self._window_goto_file.hide() self._entry_search = self.builder.get_object("entrySearch") self._treeview_results = self.builder.get_object("treeviewResults") self._liststore_results = self.builder.get_object("liststoreResults") self._project_files = TmGotoFileFilesHelper(self, self._liststore_results)
class TmGotoFileWindowHelper(object): """ Window Helper Create the menu and Gtk accelerator Show the gtk.Window when accelerator <Alt>T used. Fill in gtk.Treeview with current project content and filter on filename when typing into the gtk.Entry entrySearch """ def __init__(self, window): self._window = window self._project_path = "" self._plugin_menu = TmGotoFileMenuHelper(self) # Iniialize gtk window self.builder = gtk.Builder() self.builder.add_from_file(os.path.join(os.path.dirname(__file__), "gotofile.glade")) self.builder.connect_signals(self) self._window_goto_file = self.builder.get_object("windowGotoFile") self._window_goto_file.set_transient_for(self._window) self._window_goto_file.hide() self._entry_search = self.builder.get_object("entrySearch") self._treeview_results = self.builder.get_object("treeviewResults") self._liststore_results = self.builder.get_object("liststoreResults") self._project_files = TmGotoFileFilesHelper(self, self._liststore_results) def get_window(self): return self._window def get_project_path(self): return self._project_path def set_project_path(self, path): self._project_path = path project_path = property(get_project_path, set_project_path) def get_project_files(self): return self._project_files def set_project_files(self, instance): self._project_files = instance project_files = property(get_project_files, set_project_files) def deactivate(self): self._window = None self._plugin_menu.remove() self._plugin_menu = None self.project_files = None def update_project_files_list(self): if self.project_files.never_updated: self.project_files.root_path = self.project_path self.project_files.populate() self._select_first_row() if self.project_files.row_count() > 0: self.project_files.never_updated = False self._plugin_menu.insert() else: print "[TmGotoFilePlugin] %d row%s is not enough to insert the menu!" % \ (self.project_files.row_count(), "s" if self.project_files.row_count() > 0 else "") def _open_file(self, uri): already_open = False for doc in self._window.get_documents(): if doc.get_uri() == uri: self._window.set_active_tab(gedit.tab_get_from_document(doc)) already_open = True break if not already_open: self._window.create_tab_from_uri(uri, None, 0, False, True) def _select_first_row(self): if self.project_files.row_count() > 0: iter = self._liststore_results.get_iter_first() if iter != None: selection = self._treeview_results.get_selection() if selection: selection.select_iter(iter) def _hide_and_reset(self): self._window_goto_file.hide() self._entry_search.set_text("") self._select_first_row() #--------------------------------------------------------------------------- # Gtk Callback methods #--------------------------------------------------------------------------- def show_gotofile_window(self, window): """ Callback method when <Alt>T accelerator used """ self._window_goto_file.show() self._entry_search.grab_focus() def on_entrySearch_icon_press(self, widget, icon, event): if icon == gtk.ENTRY_ICON_SECONDARY: widget.set_text("") def on_entrySearch_key_release_event(self, widget, event): if event.keyval == gtk.keysyms.Return: self.on_treeviewResults_row_activated(None, None, None) return def on_treeviewResults_row_activated(self, widget, path, view_column): model, iter = self._treeview_results.get_selection().get_selected() if iter: self._open_file(model.get_value(iter, 1)) self._hide_and_reset() def on_entrySearch_changed(self, editable): self.project_files.filter_with(editable.get_text()) self._select_first_row() def on_windowGotoFile_key_release_event(self, widget, event): if event.keyval == gtk.keysyms.Escape: self._hide_and_reset()