Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2014-02-12 20:32:56 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2014-02-12 20:32:56 (GMT)
commit9664d3cad1978cf68df864c03474af6d2e3ebe0b (patch)
tree14935d2d60de8ede8bf206cfe4c21bb34f76099f
parente42cda312998dfa908a6f97db0dfcf96f70fb36b (diff)
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.
-rw-r--r--develop-activity/develop_app.py29
-rw-r--r--develop-activity/sourceview_editor.py20
-rw-r--r--develop-activity/symbols_tree.py11
3 files changed, 35 insertions, 25 deletions
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()