From 9664d3cad1978cf68df864c03474af6d2e3ebe0b Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Wed, 12 Feb 2014 20:32:56 +0000 Subject: Reorganize source_editor relation with rhe activity Now emit events, and don't have references to the activityy. This patch solves the issueof the symbols tree update when the editor tab is changed. --- diff --git a/develop-activity/develop_app.py b/develop-activity/develop_app.py index c09e0e5..4e951b1 100644 --- a/develop-activity/develop_app.py +++ b/develop-activity/develop_app.py @@ -100,7 +100,9 @@ class DevelopActivity(activity.Activity): logging.info(repr(handle.get_dict())) # Source buffer - self.editor = sourceview_editor.GtkSourceview2Editor(self) + self.editor = sourceview_editor.GtkSourceview2Editor() + self.editor.connect('tab-changed', self.__editor_tab_changed_cb) + self.editor.connect('changed', self.__editor_changed_cb) toolbarbox = ToolbarBox() activity_button = ActivityToolbarButton(self) @@ -135,7 +137,7 @@ class DevelopActivity(activity.Activity): show_symbols_btn.set_active(False) show_symbols_btn.set_tooltip(_('Show file symbols')) toolbarbox.toolbar.insert(show_symbols_btn, -1) - show_symbols_btn.connect('clicked', self.explore_code) + show_symbols_btn.connect('clicked', self._explore_code) show_log_btn = RadioToolButton() show_log_btn.props.icon_name = 'logs' @@ -203,7 +205,7 @@ class DevelopActivity(activity.Activity): self.editor.symbol_selected_cb) scrolled = Gtk.ScrolledWindow() scrolled.add(self._symbolstree) - scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.treenotebook.add_page(_('Symbols Tree'), scrolled) hbox.pack1(sidebar, resize=True, shrink=False) @@ -226,10 +228,11 @@ class DevelopActivity(activity.Activity): def _change_treenotebook_page(self, button, page): self.treenotebook.set_current_page(page) - def explore_code(self, btn, switch_page=True): + def _explore_code(self, btn, switch_page=True): from ninja import introspection text = self.editor.get_text() path = self.editor.get_file_path() + logging.error('Analyzing %s', path) symbols = introspection.obtain_symbols(text, filename=path) self._symbolstree.load_symbols(symbols) if switch_page: @@ -599,14 +602,22 @@ class DevelopActivity(activity.Activity): self.save_unchanged = False self.dirty = dirty - def update_sidebar_to_page(self, page): + def __editor_tab_changed_cb(self, editor, new_full_path): if self.numb: #avoid infinite recursion return - if isinstance(page, sourceview_editor.GtkSourceview2Page): - self.numb = True - self.activity_tree_view.select_by_file_path(page.full_path) - self.numb = False + self.numb = True + self.activity_tree_view.select_by_file_path(new_full_path) + logging.error('new tab %s', new_full_path) + self.numb = False + + # TODO: change by a constant + if self.treenotebook.get_current_page() == 1: # symbols + GObject.idle_add(self._explore_code, None) + + def __editor_changed_cb(self, editor): + logging.error('Editor text changed') + self.set_dirty(True) def __create_empty_file_cb(self, button): alert = Alert() diff --git a/develop-activity/sourceview_editor.py b/develop-activity/sourceview_editor.py index dbb3dc6..c237c01 100644 --- a/develop-activity/sourceview_editor.py +++ b/develop-activity/sourceview_editor.py @@ -35,12 +35,12 @@ class S_WHERE: class GtkSourceview2Editor(Gtk.Notebook): __gsignals__ = { - 'changed': (GObject.SignalFlags.RUN_FIRST, None, []) + 'changed': (GObject.SignalFlags.RUN_FIRST, None, []), + 'tab-changed': (GObject.SignalFlags.RUN_FIRST, None, [str]) } - def __init__(self, activity): + def __init__(self): GObject.GObject.__init__(self) - self.activity = activity self.set_size_request(Gdk.Screen.width(), -1) self.connect('page-removed', self._page_removed_cb) self.connect('switch-page', self._switch_page_cb) @@ -53,8 +53,7 @@ class GtkSourceview2Editor(Gtk.Notebook): # the welcome page do not have a page property def _switch_page_cb(self, __notebook, page_gptr, page_num): - self.activity.update_sidebar_to_page(self._get_page(page_num)) - #self.activity.explore_code(None, switch_page=False) + self.emit('tab-changed', self._get_page(page_num).full_path) def set_to_page_like(self, full_path): for n in range(self.get_n_pages()): @@ -75,7 +74,7 @@ class GtkSourceview2Editor(Gtk.Notebook): scrollwnd.add(page) scrollwnd.page = page label = filename - page.text_buffer.connect('changed', self._changed_cb) + page.text_buffer.connect('changed', self.__text_changed_cb) tablabel = TabLabel(scrollwnd, label) tablabel.connect( @@ -85,7 +84,7 @@ class GtkSourceview2Editor(Gtk.Notebook): self.append_page(scrollwnd, tablabel) - self._changed_cb(page.text_buffer) + self.__text_changed_cb(page.text_buffer) self.show_all() self.set_current_page(-1) @@ -104,11 +103,9 @@ class GtkSourceview2Editor(Gtk.Notebook): self.show_all() self.set_current_page(-1) - def _changed_cb(self, buffer): + def __text_changed_cb(self, buffer): if not buffer.can_undo(): buffer.set_modified(False) - elif not self.activity.dirty: - self.activity.set_dirty(True) self.emit('changed') def _get_page(self, order=-1): @@ -307,7 +304,8 @@ class GtkSourceview2Page(GtkSource.View): def save(self): if self.text_buffer.can_undo(): # only save if there's something to buff = self.text_buffer - text = buff.get_text(buff.get_start_iter(), buff.get_end_iter()) + text = buff.get_text(buff.get_start_iter(), buff.get_end_iter(), + False) _file = file(self.full_path, 'w') try: _file.write(text) diff --git a/develop-activity/symbols_tree.py b/develop-activity/symbols_tree.py index db630e6..022f45a 100644 --- a/develop-activity/symbols_tree.py +++ b/develop-activity/symbols_tree.py @@ -64,11 +64,12 @@ class SymbolsTree(Gtk.TreeView): def _symbol_selected_cb(self, widget): selection = self.get_selection() - model, _iter = selection.get_selected() - line = model.get_value(_iter, 2) - if line is 0: - return - self.emit('symbol-selected', line) + model, iter = selection.get_selected() + if iter is not None: + line = model.get_value(iter, 2) + if line is 0: + return + self.emit('symbol-selected', line) def load_symbols(self, data): self._model.clear() -- cgit v0.9.1