[Sugar-devel] [PATCH 1/2] Revert to original layout (<=v35) for Sugar <=0.84

Anish Mangal anishmangal2002 at gmail.com
Mon Nov 1 07:46:18 EDT 2010


I've test-driven this on 0.84-xo1 (os301) and 0.90-jhbuild and it
seems to work on both.
The same also applies to "[PATCH 2/2] Pippy: add edit toolbar".	

On Mon, Nov 1, 2010 at 5:06 PM, Anish Mangal <anish at sugarlabs.org> wrote:
> From: anishmangal2002 <anishmangal2002 at gmail.com>
>
> Signed-off-by: Anish Mangal <anish at sugarlabs.org>
> ---
>  pippy_app.py |  263 ++++++++++++++++++++++++++++++++++++++++++----------------
>  1 files changed, 190 insertions(+), 73 deletions(-)
>
> diff --git a/pippy_app.py b/pippy_app.py
> index fc8aaaa..ed8ee24 100644
> --- a/pippy_app.py
> +++ b/pippy_app.py
> @@ -34,8 +34,24 @@ from activity import ViewSourceActivity, TARGET_TYPE_TEXT
>  from sugar.activity.activity import ActivityToolbox, \
>      get_bundle_path, get_bundle_name
>  from sugar.graphics import style
> +
>  from sugar.graphics.toolbutton import ToolButton
>
> +_ORIGINAL_PIPPY_LAYOUT = False
> +
> +try:
> +    # >= 0.86 toolbars
> +    from sugar.graphics.toolbarbox import ToolbarButton, ToolbarBox
> +    from sugar.activity.widgets import _create_activity_icon
> +    from sugar.activity.widgets import ActivityButton, ActivityToolbar
> +    from sugar.activity.widgets import TitleEntry
> +    from sugar.activity.widgets import StopButton
> +    from sugar.activity.widgets import ShareButton
> +    from sugar.activity.widgets import KeepButton
> +except ImportError:
> +    # <= 0.84 toolbars
> +    _ORIGINAL_PIPPY_LAYOUT = True
> +
>  import groupthink.sugar_tools
>  import groupthink.gtk_tools
>
> @@ -51,6 +67,20 @@ SIZE_Y = gtk.gdk.screen_height()
>
>  groupthink_mimetype = 'pickle/groupthink-pippy'
>
> +if _ORIGINAL_PIPPY_LAYOUT == False:
> +    # modded ActivityToolbarButton which has its toolbar object public
> +    class ActivityToolbarButton(ToolbarButton):
> +
> +        def __init__(self, activity, **kwargs):
> +            self.toolbar = ActivityToolbar(activity, orientation_left=True)
> +            self.toolbar.stop.hide()
> +
> +            ToolbarButton.__init__(self, page=self.toolbar, **kwargs)
> +
> +            icon = _create_activity_icon(activity.metadata)
> +            self.set_icon_widget(icon)
> +            icon.show()
> +
>  class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
>     """Pippy Activity as specified in activity.info"""
>     def early_setup(self):
> @@ -61,79 +91,159 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
>     def initialize_display(self):
>         self._logger = logging.getLogger('pippy-activity')
>
> -        # Top toolbar with share and close buttons:
> -        toolbox = ActivityToolbox(self)
> -        activity_toolbar = toolbox.get_activity_toolbar()
> -        # add 'make bundle' entry to 'keep' palette.
> -        palette = toolbox.get_activity_toolbar().keep.get_palette()
> -        # XXX: should clear out old palette entries?
> -        from sugar.graphics.menuitem import MenuItem
> -        from sugar.graphics.icon import Icon
> -        menu_item = MenuItem(_('As Pippy Document'))
> -        menu_item.set_image(Icon(file=('%s/activity/activity-icon.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> -        menu_item.connect('activate', self.keepbutton_cb)
> -        palette.menu.append(menu_item)
> -        menu_item.show()
> -        menu_item = MenuItem(_('As Activity Bundle'))
> -        menu_item.set_image(Icon(file=('%s/activity/activity-default.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> -        menu_item.connect('activate', self.makebutton_cb)
> -        palette.menu.append(menu_item)
> -        menu_item.show()
> -
> -        # The "go" button
> -        goicon_bw = gtk.Image()
> -        goicon_bw.set_from_file("%s/icons/run_bw.svg" % os.getcwd())
> -        goicon_color = gtk.Image()
> -        goicon_color.set_from_file("%s/icons/run_color.svg" % os.getcwd())
> -        gobutton = ToolButton(label=_("_Run!"))
> -        gobutton.props.accelerator = _('<alt>r')
> -        gobutton.set_icon_widget(goicon_bw)
> -        gobutton.set_tooltip("Run")
> -        gobutton.connect('clicked', self.flash_cb, dict({'bw':goicon_bw,
> -            'color':goicon_color}))
> -        gobutton.connect('clicked', self.gobutton_cb)
> -        activity_toolbar.insert(gobutton, 2)
> -
> -        # The "stop" button
> -        stopicon_bw = gtk.Image()
> -        stopicon_bw.set_from_file("%s/icons/stopit_bw.svg" % os.getcwd())
> -        stopicon_color = gtk.Image()
> -        stopicon_color.set_from_file("%s/icons/stopit_color.svg" % os.getcwd())
> -        stopbutton = ToolButton(label=_("_Stop"))
> -        stopbutton.props.accelerator = _('<alt>s')
> -        stopbutton.set_icon_widget(stopicon_bw)
> -        stopbutton.connect('clicked', self.flash_cb, dict({'bw':stopicon_bw,
> -            'color':stopicon_color}))
> -        stopbutton.connect('clicked', self.stopbutton_cb)
> -        stopbutton.set_tooltip("Stop Running")
> -        activity_toolbar.insert(stopbutton, 3)
> -
> -        # The "clear" button
> -        clearicon_bw = gtk.Image()
> -        clearicon_bw.set_from_file("%s/icons/eraser_bw.svg" % os.getcwd())
> -        clearicon_color = gtk.Image()
> -        clearicon_color.set_from_file("%s/icons/eraser_color.svg" % os.getcwd())
> -        clearbutton = ToolButton(label=_("_Clear"))
> -        clearbutton.props.accelerator = _('<alt>c')
> -        clearbutton.set_icon_widget(clearicon_bw)
> -        clearbutton.connect('clicked', self.clearbutton_cb)
> -        clearbutton.connect('clicked', self.flash_cb, dict({'bw':clearicon_bw,
> -            'color':clearicon_color}))
> -        clearbutton.set_tooltip("Clear")
> -        activity_toolbar.insert(clearbutton, 4)
> -
> -        # A vertical toolbar separator
> -        separator = gtk.SeparatorToolItem()
> -        separator.set_draw(True)
> -        activity_toolbar.insert(separator, 5)
> -        activity_toolbar.show_all()
> -
> -        self.set_toolbox(toolbox)
> -        toolbox.show()
> +        # A homogeneous table used for packing buttons so that they
> +        # resize without any pains
> +        self._table = gtk.Table()
> +        self._table.set_homogeneous(True)
> +
> +        if not _ORIGINAL_PIPPY_LAYOUT:
> +            # >= 0.86 toolbars
> +            toolbar_box = ToolbarBox()
> +            activity_button = ActivityToolbarButton(self)
> +            toolbar_box.toolbar.insert(activity_button, 0)
> +
> +            separator = gtk.SeparatorToolItem()
> +            toolbar_box.toolbar.insert(separator, -1)
> +
> +            # The "go" button
> +            goicon_bw = gtk.Image()
> +            goicon_bw.set_from_file("%s/icons/run_bw.svg" % os.getcwd())
> +            goicon_color = gtk.Image()
> +            goicon_color.set_from_file("%s/icons/run_color.svg" % os.getcwd())
> +            gobutton = ToolButton(label=_("_Run!"))
> +            gobutton.props.accelerator = _('<alt>r')
> +            gobutton.set_icon_widget(goicon_bw)
> +            gobutton.set_tooltip("Run")
> +            gobutton.connect('clicked', self.flash_cb, dict({'bw':goicon_bw,
> +                'color':goicon_color}))
> +            gobutton.connect('clicked', self.gobutton_cb)
> +            toolbar_box.toolbar.insert(gobutton, -1)
> +            gobutton.show()
> +
> +            # The "stop" button
> +            stopicon_bw = gtk.Image()
> +            stopicon_bw.set_from_file("%s/icons/stopit_bw.svg" % os.getcwd())
> +            stopicon_color = gtk.Image()
> +            stopicon_color.set_from_file("%s/icons/stopit_color.svg" % os.getcwd())
> +            stopbutton = ToolButton(label=_("_Stop"))
> +            stopbutton.props.accelerator = _('<alt>s')
> +            stopbutton.set_icon_widget(stopicon_bw)
> +            stopbutton.connect('clicked', self.flash_cb, dict({'bw':stopicon_bw,
> +                'color':stopicon_color}))
> +            stopbutton.connect('clicked', self.stopbutton_cb)
> +            stopbutton.set_tooltip("Stop Running")
> +            toolbar_box.toolbar.insert(stopbutton, -1)
> +            stopbutton.show()
> +
> +            # The "clear" button
> +            clearicon_bw = gtk.Image()
> +            clearicon_bw.set_from_file("%s/icons/eraser_bw.svg" % os.getcwd())
> +            clearicon_color = gtk.Image()
> +            clearicon_color.set_from_file("%s/icons/eraser_color.svg" % os.getcwd())
> +            clearbutton = ToolButton(label=_("_Clear"))
> +            clearbutton.props.accelerator = _('<alt>c')
> +            clearbutton.set_icon_widget(clearicon_bw)
> +            clearbutton.connect('clicked', self.flash_cb, dict({'bw':clearicon_bw,
> +                'color':clearicon_color}))
> +            clearbutton.connect('clicked', self.clearbutton_cb)
> +            clearbutton.set_tooltip("Clear")
> +            toolbar_box.toolbar.insert(clearbutton, -1)
> +            clearbutton.show()
> +
> +            # add 'make bundle' entry to 'keep' palette.
> +            palette = activity_button.toolbar.keep.get_palette()
> +            # XXX: should clear out old palette entries?
> +            from sugar.graphics.menuitem import MenuItem
> +            from sugar.graphics.icon import Icon
> +            menu_item = MenuItem(_('As Pippy Document'))
> +            menu_item.set_image(Icon(file=('%s/activity/activity-icon.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> +            menu_item.connect('activate', self.keepbutton_cb)
> +            palette.menu.append(menu_item)
> +            menu_item.show()
> +            menu_item = MenuItem(_('As Activity Bundle'))
> +            menu_item.set_image(Icon(file=('%s/activity/activity-default.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> +            menu_item.connect('activate', self.makebutton_cb)
> +            palette.menu.append(menu_item)
> +            menu_item.show()
> +
> +            separator = gtk.SeparatorToolItem()
> +            separator.props.draw = False
> +            separator.set_expand(True)
> +            toolbar_box.toolbar.insert(separator, -1)
> +
> +            stop = StopButton(self)
> +            toolbar_box.toolbar.insert(stop, -1)
> +            self.set_toolbox(toolbar_box)
> +            toolbar_box.show()
> +
> +        else:
> +            # <= 0.84 toolbars
> +            # Top toolbar with share and close buttons:
> +            toolbox = ActivityToolbox(self)
> +            # add 'make bundle' entry to 'keep' palette.
> +            palette = toolbox.get_activity_toolbar().keep.get_palette()
> +            # XXX: should clear out old palette entries?
> +            from sugar.graphics.menuitem import MenuItem
> +            from sugar.graphics.icon import Icon
> +            menu_item = MenuItem(_('As Pippy Document'))
> +            menu_item.set_image(Icon(file=('%s/activity/activity-icon.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> +            menu_item.connect('activate', self.keepbutton_cb)
> +            palette.menu.append(menu_item)
> +            menu_item.show()
> +            menu_item = MenuItem(_('As Activity Bundle'))
> +            menu_item.set_image(Icon(file=('%s/activity/activity-default.svg' % get_bundle_path()), icon_size=gtk.ICON_SIZE_MENU))
> +            menu_item.connect('activate', self.makebutton_cb)
> +            palette.menu.append(menu_item)
> +            menu_item.show()
> +
> +            # The "go" button
> +            goicon_bw = gtk.Image()
> +            goicon_bw.set_from_file("%s/icons/run_bw.svg" % os.getcwd())
> +            goicon_color = gtk.Image()
> +            goicon_color.set_from_file("%s/icons/run_color.svg" % os.getcwd())
> +            gobutton = gtk.Button(label=_("_Run!"))
> +            gobutton.set_image(goicon_bw)
> +            gobutton.connect('clicked', self.flash_cb, dict({'bw':goicon_bw,
> +                'color':goicon_color}))
> +            gobutton.connect('clicked', self.gobutton_cb)
> +            self._table.attach(gobutton, 0, 2, 0, 1)
> +
> +            # The "clear" button
> +            clearicon_bw = gtk.Image()
> +            clearicon_bw.set_from_file("%s/icons/eraser_bw.svg" % os.getcwd())
> +            clearicon_color = gtk.Image()
> +            clearicon_color.set_from_file("%s/icons/eraser_color.svg" % os.getcwd())
> +            clearbutton = gtk.Button(label=_("_Clear!"))
> +            clearbutton.set_image(clearicon_bw)
> +            clearbutton.connect('clicked', self.flash_cb, dict({'bw':clearicon_bw,
> +                'color':clearicon_color}))
> +            clearbutton.connect('clicked', self.clearbutton_cb)
> +            self._table.attach(clearbutton, 2, 3, 0, 1)
> +
> +            # The "stop" button
> +            stopicon_bw = gtk.Image()
> +            stopicon_bw.set_from_file("%s/icons/stopit_bw.svg" % os.getcwd())
> +            stopicon_color = gtk.Image()
> +            stopicon_color.set_from_file("%s/icons/stopit_color.svg" % os.getcwd())
> +            stopbutton = gtk.Button(label=_("_Stop!"))
> +            stopbutton.set_image(stopicon_bw)
> +            stopbutton.connect('clicked', self.flash_cb, dict({'bw':stopicon_bw,
> +                'color':stopicon_color}))
> +            stopbutton.connect('clicked', self.stopbutton_cb)
> +            self._table.attach(stopbutton, 3, 4, 0, 1)
> +
> +            self.set_toolbox(toolbox)
> +            toolbox.show()
> +            activity_toolbar = toolbox.get_activity_toolbar()
> +            activity_toolbar.share.props.visible = False
>
>         # Main layout.
>         self.hpane = gtk.HPaned()
>         self.vpane = gtk.VPaned()
> +        # Vbox for vertically placing the gtksourceview and old pippy
> +        # layout buttons (if needed)
> +        self._vbox = gtk.VBox()
> +        self._vbox.set_size_request(0, int(SIZE_Y * 0.5))
>
>         # The sidebar.
>         self.sidebar = gtk.VBox()
> @@ -191,7 +301,6 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
>
>         # The GTK source view window
>         self.text_view = gtksourceview2.View(text_buffer)
> -        self.text_view.set_size_request(0, int(SIZE_Y * 0.5))
>         self.text_view.set_editable(True)
>         self.text_view.set_cursor_visible(True)
>         self.text_view.set_show_line_numbers(True)
> @@ -211,7 +320,9 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
>         codesw.set_policy(gtk.POLICY_AUTOMATIC,
>                       gtk.POLICY_AUTOMATIC)
>         codesw.add(self.text_view)
> -        self.vpane.add1(codesw)
> +        self._vbox.pack_start(codesw)
> +        self._vbox.pack_start(self._table, expand=False, fill=False)
> +        self.vpane.add1(self._vbox)
>
>         # An hbox to hold the vte window and its scrollbar.
>         outbox = gtk.HBox()
> @@ -263,12 +374,18 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity):
>         self.text_view.grab_focus()
>
>     def timer_cb(self, button, icons):
> -        button.set_icon_widget(icons['bw'])
> +        if not _ORIGINAL_PIPPY_LAYOUT:
> +            button.set_icon_widget(icons['bw'])
> +        else:
> +            button.set_image(icons['bw'])
>         button.show_all()
>         return False
>
>     def flash_cb(self, button, icons):
> -        button.set_icon_widget(icons['color'])
> +        if not _ORIGINAL_PIPPY_LAYOUT:
> +            button.set_icon_widget(icons['color'])
> +        else:
> +            button.set_image(icons['color'])
>         button.show_all()
>         gobject.timeout_add(400, self.timer_cb, button, icons)
>
> --
> 1.7.2.3
>
>



-- 
Anish Mangal
anish at sugarlabs.org


More information about the Sugar-devel mailing list