Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-08-19 16:50:18 (GMT)
committer Simon Schampijer <simon@schampijer.de>2011-08-23 16:25:32 (GMT)
commitc1a66b64232258e4b9db282717af994d8fb5d894 (patch)
treed8d064565263c09b0f7ba2e8bc649ed37eca18f8
parent8127aeb1fbde2abd271282b82f5e0598a352068e (diff)
Add view source for sugar toolkit
As per feedback from the design team, I have added a radio button to view the source of the sugar-toolkit to the standard view source toolbar. Signed-off-by: Walter Bender <walter.bender@gmail.com> Acked-by: Simon Schampijer <simon@laptop.org>
-rw-r--r--src/jarabe/view/viewsource.py127
1 files changed, 98 insertions, 29 deletions
diff --git a/src/jarabe/view/viewsource.py b/src/jarabe/view/viewsource.py
index 648e740..63a6977 100644
--- a/src/jarabe/view/viewsource.py
+++ b/src/jarabe/view/viewsource.py
@@ -17,6 +17,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
+import sys
import logging
from gettext import gettext as _
@@ -90,8 +91,15 @@ def setup_view_source(activity):
_logger.debug('Activity without bundle_path nor document_path')
return
+ sugar_toolkit_path = None
+ for path in sys.path:
+ if path.endswith('site-packages'):
+ if os.path.exists(os.path.join(path, 'sugar')):
+ sugar_toolkit_path = os.path.join(path, 'sugar')
+ break
+
view_source = ViewSource(window_xid, bundle_path, document_path,
- activity.get_title())
+ sugar_toolkit_path, activity.get_title())
map_activity_to_window[window_xid] = view_source
view_source.show()
@@ -99,10 +107,12 @@ def setup_view_source(activity):
class ViewSource(gtk.Window):
__gtype_name__ = 'SugarViewSource'
- def __init__(self, window_xid, bundle_path, document_path, title):
+ def __init__(self, window_xid, bundle_path, document_path,
+ sugar_toolkit_path, title):
gtk.Window.__init__(self)
- logging.debug('ViewSource paths: %r %r', bundle_path, document_path)
+ _logger.debug('ViewSource paths: %r %r %r', bundle_path,
+ document_path, sugar_toolkit_path)
self.set_decorated(False)
self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
@@ -113,6 +123,7 @@ class ViewSource(gtk.Window):
self.set_size_request(width, height)
self._parent_window_xid = window_xid
+ self._sugar_toolkit_path = sugar_toolkit_path
self.connect('realize', self.__realize_cb)
self.connect('destroy', self.__destroy_cb, document_path)
@@ -122,7 +133,8 @@ class ViewSource(gtk.Window):
self.add(vbox)
vbox.show()
- toolbar = Toolbar(title, bundle_path, document_path)
+ toolbar = Toolbar(title, bundle_path, document_path,
+ sugar_toolkit_path)
vbox.pack_start(toolbar, expand=False)
toolbar.connect('stop-clicked', self.__stop_clicked_cb)
toolbar.connect('source-selected', self.__source_selected_cb)
@@ -132,26 +144,44 @@ class ViewSource(gtk.Window):
vbox.pack_start(pane)
pane.show()
- self._selected_file = None
+ self._selected_bundle_file = None
+ self._selected_sugar_file = None
file_name = ''
activity_bundle = ActivityBundle(bundle_path)
command = activity_bundle.get_command()
if len(command.split(' ')) > 1:
- name = command.split(' ')[1].split('.')[0]
- file_name = name + '.py'
+ name = command.split(' ')[1].split('.')[-1]
+ tmppath = command.split(' ')[1].replace('.', '/')
+ file_name = tmppath[0:-(len(name) + 1)] + '.py'
path = os.path.join(activity_bundle.get_path(), file_name)
- self._selected_file = path
+ self._selected_bundle_file = path
+
+ # Split the tree pane into two vertical panes, one of which
+ # will be hidden
+ tree_panes = gtk.VPaned()
+ tree_panes.show()
+
+ self._bundle_source_viewer = FileViewer(bundle_path, file_name)
+ self._bundle_source_viewer.connect('file-selected',
+ self.__file_selected_cb)
+ tree_panes.add1(self._bundle_source_viewer)
+ self._bundle_source_viewer.show()
- self._file_viewer = FileViewer(bundle_path, file_name)
- self._file_viewer.connect('file-selected', self.__file_selected_cb)
- pane.add1(self._file_viewer)
- self._file_viewer.show()
+ file_name = 'env.py'
+ self._selected_sugar_file = os.path.join(sugar_toolkit_path, file_name)
+ self._sugar_source_viewer = FileViewer(sugar_toolkit_path, file_name)
+ self._sugar_source_viewer.connect('file-selected',
+ self.__file_selected_cb)
+ tree_panes.add2(self._sugar_source_viewer)
+ self._sugar_source_viewer.hide()
+
+ pane.add1(tree_panes)
self._source_display = SourceDisplay()
pane.add2(self._source_display)
self._source_display.show()
- self._source_display.file_path = self._selected_file
+ self._source_display.file_path = self._selected_bundle_file
if document_path is not None:
self._select_source(document_path)
@@ -178,12 +208,23 @@ class ViewSource(gtk.Window):
def _select_source(self, path):
if os.path.isfile(path):
+ _logger.debug('_select_source called with file: %r', path)
self._source_display.file_path = path
- self._file_viewer.hide()
+ self._bundle_source_viewer.hide()
+ self._sugar_source_viewer.hide()
+ elif path == self._sugar_toolkit_path:
+ _logger.debug('_select_source called with sugar toolkit path: %r',
+ path)
+ self._sugar_source_viewer.set_path(path)
+ self._source_display.file_path = self._selected_sugar_file
+ self._sugar_source_viewer.show()
+ self._bundle_source_viewer.hide()
else:
- self._file_viewer.set_path(path)
- self._source_display.file_path = self._selected_file
- self._file_viewer.show()
+ _logger.debug('_select_source called with path: %r', path)
+ self._bundle_source_viewer.set_path(path)
+ self._source_display.file_path = self._selected_bundle_file
+ self._bundle_source_viewer.show()
+ self._sugar_source_viewer.hide()
def __destroy_cb(self, window, document_path):
del map_activity_to_window[self._parent_window_xid]
@@ -198,7 +239,10 @@ class ViewSource(gtk.Window):
def __file_selected_cb(self, file_viewer, file_path):
if file_path is not None and os.path.isfile(file_path):
self._source_display.file_path = file_path
- self._selected_file = file_path
+ if file_viewer == self._bundle_source_viewer:
+ self._selected_bundle_file = file_path
+ else:
+ self._selected_sugar_file = file_path
else:
self._source_display.file_path = None
@@ -269,10 +313,12 @@ class Toolbar(gtk.Toolbar):
([str])),
}
- def __init__(self, title, bundle_path, document_path):
+ def __init__(self, title, bundle_path, document_path, sugar_toolkit_path):
gtk.Toolbar.__init__(self)
document_button = None
+ self.bundle_path = bundle_path
+ self.sugar_toolkit_path = sugar_toolkit_path
self._add_separator()
@@ -304,11 +350,31 @@ class Toolbar(gtk.Toolbar):
activity_button.show()
self._add_separator()
- text = _('View source: %r') % title
- label = gtk.Label()
- label.set_markup('<b>%s</b>' % text)
- label.set_alignment(0, 0.5)
- self._add_widget(label)
+ if sugar_toolkit_path is not None:
+ sugar_button = RadioToolButton()
+ icon = Icon(icon_name='computer-xo',
+ icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR,
+ fill_color=style.COLOR_TRANSPARENT.get_svg(),
+ stroke_color=style.COLOR_WHITE.get_svg())
+ sugar_button.set_icon_widget(icon)
+ icon.show()
+ if document_button is not None:
+ sugar_button.props.group = document_button
+ else:
+ sugar_button.props.group = activity_button
+ sugar_button.props.tooltip = _('Sugar Toolkit Source')
+ sugar_button.connect('toggled', self.__button_toggled_cb,
+ sugar_toolkit_path)
+ self.insert(sugar_button, -1)
+ sugar_button.show()
+ self._add_separator()
+
+ self.activity_title_text = _('View source: %r') % title
+ self.sugar_toolkit_title_text = _('View Sugar toolkit source')
+ self.label = gtk.Label()
+ self.label.set_markup('<b>%s</b>' % self.activity_title_text)
+ self.label.set_alignment(0, 0.5)
+ self._add_widget(self.label)
self._add_separator(True)
@@ -344,6 +410,10 @@ class Toolbar(gtk.Toolbar):
def __button_toggled_cb(self, button, path):
if button.props.active:
self.emit('source-selected', path)
+ if path == self.sugar_toolkit_path:
+ self.label.set_markup('<b>%s</b>' % self.sugar_toolkit_title_text)
+ else: # Use activity title for either bundle path or document path
+ self.label.set_markup('<b>%s</b>' % self.activity_title_text)
class FileViewer(gtk.ScrolledWindow):
@@ -386,22 +456,23 @@ class FileViewer(gtk.ScrolledWindow):
self.emit('file-selected', None)
if self._path == path:
return
+
self._path = path
self._tree_view.set_model(gtk.TreeStore(str, str))
+ self._model = self._tree_view.get_model()
self._add_dir_to_model(path)
def _add_dir_to_model(self, dir_path, parent=None):
- model = self._tree_view.get_model()
for f in os.listdir(dir_path):
if f.endswith(_EXCLUDE_EXTENSIONS) or f in _EXCLUDE_NAMES:
continue
full_path = os.path.join(dir_path, f)
if os.path.isdir(full_path):
- new_iter = model.append(parent, [f, full_path])
+ new_iter = self._model.append(parent, [f, full_path])
self._add_dir_to_model(full_path, new_iter)
else:
- current_iter = model.append(parent, [f, full_path])
+ current_iter = self._model.append(parent, [f, full_path])
if f == self._initial_filename:
selection = self._tree_view.get_selection()
selection.select_iter(current_iter)
@@ -441,8 +512,6 @@ class SourceDisplay(gtk.ScrolledWindow):
self._file_path = None
def _set_file_path(self, file_path):
- if file_path == self._file_path:
- return
self._file_path = file_path
if self._file_path is None: