[Sugar-devel] [PATCH] Add-view-source-for-sugar-toolkit

Simon Schampijer simon at schampijer.de
Tue Aug 23 12:29:15 EDT 2011


On 08/22/2011 05:04 PM, Walter Bender wrote:
> On Mon, Aug 22, 2011 at 10:17 AM, Simon Schampijer<simon at schampijer.de>  wrote:
>> On 08/19/2011 06:50 PM, Walter Bender wrote:
>>>
>>> From: Walter Bender<walter.bender at gmail.com>
>>>
>>> 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.
>>>
>>> ---
>>>
>>> Note: This is a modified version of an earlier patch that updates the
>>> title
>>> displayed in the View Source toolbar when switching between the activity
>>> source
>>> and the sugar-toolkit source. This patch also selects activity/activity.py
>>> to
>>> display in the viewer by default when looking at the sugar-toolkit source.
>>>
>>> Note: In this version of the patch, the TreeView is seeded with env.py.
>>> This
>>> patch also includes from cosmetic changes from erikos. It has been rebased
>>> to
>>> the latest version of sugar (2011-08-19)
>>
>> Hi Walter,
>>
>> thanks for the updated patch, applies cleanly now!
>>
>> A few smaller comments:
>>
>> I have attached a few screenshots [1] to illustrate a inconsistency I see
>> with the title. While the title for the activity bundle and instance bundle
>> says something like: "View source: 'Browse Activity'" the view source title
>> for the toolkit is: "View Sugar toolkit source". Should we change the latter
>> to: "View source: 'Sugar toolkit'"?
>>
>> For a follow up patch: when we display the instance (the activity document,
>> in the case of Browse the html page loaded) we should adjust the title as
>> well accordingly. Probably: "View source: 'Activity document'".
>>
>> Regards,
>>    Simon
>>
>> [1] http://dev.laptop.org/~erikos/view_source/
>>
>>>   src/jarabe/view/viewsource.py |  127
>>> +++++++++++++++++++++++++++++++---------
>>>   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
>>
>> If not a clear todo I would remove this comment.
>>
>>> +        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)
>>
>> I guess here is what I have been requested above, an alert title for the
>> document.
>>
>>>
>>>   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:
>>
>>
>
> Good catch. I agree we should make the title phrasing consistent along
> the lines you suggest: View Source: Sugar toolkit

I pushed your patch and added the following change:

diff --git a/src/jarabe/view/viewsource.py b/src/jarabe/view/viewsource.py
index 63a6977..1edf061 100644
--- a/src/jarabe/view/viewsource.py
+++ b/src/jarabe/view/viewsource.py
@@ -370,7 +370,7 @@ class Toolbar(gtk.Toolbar):
              self._add_separator()

          self.activity_title_text = _('View source: %r') % title
-        self.sugar_toolkit_title_text = _('View Sugar toolkit source')
+        self.sugar_toolkit_title_text = _('View source: %r') % 'Sugar 
Toolkit'
          self.label = gtk.Label()
          self.label.set_markup('<b>%s</b>' % self.activity_title_text)
          self.label.set_alignment(0, 0.5)

We even keep the changes for translators low like that.

Regards,
    Simon


More information about the Sugar-devel mailing list