diff options
author | Walter Bender <walter.bender@gmail.com> | 2012-10-08 22:41:58 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2012-10-08 22:41:58 (GMT) |
commit | 3c0e3091ac82324b4194992667183a6e52dc04b0 (patch) | |
tree | 73af111d02654c241be53209a459ece2fc55a7a7 | |
parent | af2c16abba9af8f849dcaae33e63cdc97f353715 (diff) |
eliminate 0.84 toolbars and refactor radio button code
-rw-r--r-- | RulerActivity.py | 273 |
1 files changed, 85 insertions, 188 deletions
diff --git a/RulerActivity.py b/RulerActivity.py index b97b98f..f57d72e 100644 --- a/RulerActivity.py +++ b/RulerActivity.py @@ -27,29 +27,18 @@ import os.path import sugar3 from sugar3.activity import activity - -try: # 0.86+ toolbar widgets - from sugar3.graphics.toolbarbox import ToolbarBox - HAS_TOOLARBOX = True -except ImportError: - HAS_TOOLARBOX = False - -if HAS_TOOLARBOX: - from sugar3.bundle.activitybundle import ActivityBundle - from sugar3.activity.widgets import ActivityToolbarButton - from sugar3.activity.widgets import StopButton - from sugar3.graphics.toolbarbox import ToolbarButton - +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.bundle.activitybundle import ActivityBundle +from sugar3.activity.widgets import ActivityToolbarButton +from sugar3.activity.widgets import StopButton +from sugar3.graphics.toolbarbox import ToolbarButton from sugar3.graphics.radiotoolbutton import RadioToolButton from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.menuitem import MenuItem from sugar3.graphics.icon import Icon from sugar3.datastore import datastore -try: - from sugar3.graphics import style - GRID_CELL_SIZE = style.GRID_CELL_SIZE -except ImportError: - GRID_CELL_SIZE = 0 +from sugar3.graphics import style +GRID_CELL_SIZE = style.GRID_CELL_SIZE import logging _logger = logging.getLogger("ruler-activity") @@ -146,84 +135,67 @@ class RulerActivity(activity.Activity): # self.max_participants = 1 - if HAS_TOOLARBOX: - # Use 0.86 toolbar design - toolbar_box = ToolbarBox() - - # Buttons added to the Activity toolbar - activity_button = ActivityToolbarButton(self) - toolbar_box.toolbar.insert(activity_button, 0) - activity_button.show() - - self.rulers = MyButton(self, 'ruler', - icon_name='ruler', - callback=self._rulers_cb, - tooltip=_('Ruler')) - toolbar_box.toolbar.insert(self.rulers, -1) - - self.grids = MyButton(self, 'grids', - icon_name='grid-a', - callback=self._grids_cb, - tooltip=_('Grid'), - group=self.rulers) - toolbar_box.toolbar.insert(self.grids, -1) - - self.angles = MyButton(self, 'angles', - icon_name='angles-90', - callback=self._angles_cb, - tooltip=_('Angles'), - group=self.rulers) - toolbar_box.toolbar.insert(self.angles, -1) - - self.checker = MyButton(self, 'checker', - icon_name='checker', - callback=self._checker_cb, - tooltip=_('Checker'), - group=self.rulers) - toolbar_box.toolbar.insert(self.checker, -1) - - if not self.known_dpi: - print self.known_dpi - separator = Gtk.SeparatorToolItem() - separator.show() - toolbar_box.toolbar.insert(separator, -1) - dpi = self._canvas.get_dpi() - self._dpi_spin_adj = Gtk.Adjustment(dpi, 72, 200, 2, 32, 0) - self._dpi_spin = Gtk.SpinButton(self._dpi_spin_adj, 0, 0) - self._dpi_spin_id = self._dpi_spin.connect('value-changed', - self._dpi_spin_cb) - self._dpi_spin.set_numeric(True) - self._dpi_spin.show() - self.tool_item_dpi = Gtk.ToolItem() - self.tool_item_dpi.add(self._dpi_spin) - toolbar_box.toolbar.insert(self.tool_item_dpi, -1) - self.tool_item_dpi.show() + toolbar_box = ToolbarBox() - separator = Gtk.SeparatorToolItem() - separator.props.draw = False - separator.set_expand(True) - separator.show() - toolbar_box.toolbar.insert(separator, -1) + # Buttons added to the Activity toolbar + activity_button = ActivityToolbarButton(self) + toolbar_box.toolbar.insert(activity_button, 0) + activity_button.show() - # The ever-present Stop Button - stop_button = StopButton(self) - stop_button.props.accelerator = '<Ctrl>Q' - toolbar_box.toolbar.insert(stop_button, -1) - stop_button.show() + self.rulers = radio_factory('ruler', + toolbar_box.toolbar, + self._rulers_cb, + tooltip=_('Ruler'), + group=None) - self.set_toolbar_box(toolbar_box) - toolbar_box.show() + self.grids = radio_factory('grid-a', + toolbar_box.toolbar, + self._grids_cb, + tooltip=_('Grid'), + group=self.rulers) - else: - # Use pre-0.86 toolbar design - toolbox = activity.ActivityToolbox(self) - self.set_toolbox(toolbox) + self.angles = radio_factory('angles-90', + toolbar_box.toolbar, + self._angles_cb, + tooltip=_('Angles'), + group=self.rulers) - self.projectToolbar = ProjectToolbar(self) - toolbox.add_toolbar(_('Rulers'), self.projectToolbar) + self.angles = radio_factory('checker', + toolbar_box.toolbar, + self._checker_cb, + tooltip=_('Checker'), + group=self.rulers) - toolbox.show() - toolbox.set_current_toolbar(1) + if not self.known_dpi: + separator = Gtk.SeparatorToolItem() + separator.show() + toolbar_box.toolbar.insert(separator, -1) + dpi = self._canvas.get_dpi() + self._dpi_spin_adj = Gtk.Adjustment(dpi, 72, 200, 2, 32, 0) + self._dpi_spin = Gtk.SpinButton(self._dpi_spin_adj, 0, 0) + self._dpi_spin_id = self._dpi_spin.connect('value-changed', + self._dpi_spin_cb) + self._dpi_spin.set_numeric(True) + self._dpi_spin.show() + self.tool_item_dpi = Gtk.ToolItem() + self.tool_item_dpi.add(self._dpi_spin) + toolbar_box.toolbar.insert(self.tool_item_dpi, -1) + self.tool_item_dpi.show() + + separator = Gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + # The ever-present Stop Button + stop_button = StopButton(self) + stop_button.props.accelerator = '<Ctrl>Q' + toolbar_box.toolbar.insert(stop_button, -1) + stop_button.show() + + self.set_toolbar_box(toolbar_box) + toolbar_box.show() self.show_all() @@ -232,13 +204,11 @@ class RulerActivity(activity.Activity): if 'ruler' in self.metadata and \ self.metadata['ruler'] in self.button_dict: _logger.debug('restoring %s', self.metadata['ruler']) - if HAS_TOOLARBOX: - self.button_dict[self.metadata['ruler']].set_active(True) + self.button_dict[self.metadata['ruler']].set_active(True) self.callback_dict[self.metadata['ruler']] else: self._rulers_cb() - if HAS_TOOLARBOX: - self.rulers.set_active(True) + self.rulers.set_active(True) # # Button callbacks @@ -256,12 +226,12 @@ class RulerActivity(activity.Activity): if self._grids_mode == "cm": self._current = self._gcm if hasattr(self, 'grids'): - self.grids.set_icon("grid-c") + self.grids.set_icon_name("grid-c") self._grids_mode = "mm" else: self._current = self._gmm if hasattr(self, 'grids'): - self.grids.set_icon("grid-a") + self.grids.set_icon_name("grid-a") self._grids_mode = "cm" self._canvas.add_a_ruler(self._current) _logger.debug('selecting grids') @@ -273,12 +243,12 @@ class RulerActivity(activity.Activity): if self._angles_mode == "90": self._current = self._a90 if hasattr(self, 'angles'): - self.angles.set_icon("angles-360") + self.angles.set_icon_name("angles-360") self._angles_mode = "360" else: self._current = self._a360 if hasattr(self, 'angles'): - self.angles.set_icon("angles-90") + self.angles.set_icon_name("angles-90") self._angles_mode = "90" self._canvas.add_a_ruler(self._current) _logger.debug('selecting angles') @@ -305,93 +275,20 @@ class RulerActivity(activity.Activity): self.metadata['dpi'] = str(dpi) -class ProjectToolbar(Gtk.Toolbar): - ''' Project toolbar for pre-0.86 toolbars ''' - - def __init__(self, pc): - - Gtk.Toolbar.__init__(self) - - self.activity = pc - - # Ruler - self.activity.rulers = ToolButton("ruler") - self.activity.rulers.set_tooltip(_('Ruler')) - self.activity.rulers.props.sensitive = True - self.activity.rulers.connect('clicked', self.activity._rulers_cb) - self.insert(self.activity.rulers, -1) - self.activity.rulers.show() - - # Grid - self.activity.grids = ToolButton("grid-a") - self.activity.grids.set_tooltip(_('Grid')) - self.activity.grids.props.sensitive = True - self.activity.grids.connect('clicked', self.activity._grids_cb) - self.insert(self.activity.grids, -1) - self.activity.grids.show() - - # Angles - self.activity.angles = ToolButton("angles-90") - self.activity.angles.set_tooltip(_('Angles')) - self.activity.angles.props.sensitive = True - self.activity.angles.connect('clicked', self.activity._angles_cb) - self.insert(self.activity.angles, -1) - self.activity.angles.show() - - # Checker - self.activity.checker = ToolButton("checker") - self.activity.checker.set_tooltip(_('Checker')) - self.activity.checker.props.sensitive = True - self.activity.checker.connect('clicked', self.activity._checker_cb) - self.insert(self.activity.checker, -1) - self.activity.checker.show() - - if not self.activity.known_dpi: - separator = Gtk.SeparatorToolItem() - separator.set_draw(True) - self.insert(separator, -1) - separator.show() - - dpi = self.activity._canvas.get_dpi() - self.activity._dpi_spin_adj = Gtk.Adjustment( - dpi, 72, 200, 2, 32, 0) - self.activity._dpi_spin = \ - Gtk.SpinButton(self.activity._dpi_spin_adj, 0, 0) - self.activity._dpi_spin_id = self.activity._dpi_spin.connect( - 'value-changed', self.activity._dpi_spin_cb) - self.activity._dpi_spin.set_numeric(True) - self.activity._dpi_spin.show() - self.activity.tool_item_dpi = Gtk.ToolItem() - self.activity.tool_item_dpi.add(self.activity._dpi_spin) - self.insert(self.activity.tool_item_dpi, -1) - self.activity.tool_item_dpi.show() - - -class MyButton(RadioToolButton): - - def __init__(self, parent, name, icon_name='', callback=None, - tooltip=None, group=None): - RadioToolButton.__init__(self) - - if icon_name == '': - icon_name = 'computer-xo' - icon = Icon(icon_name=icon_name, - icon_size=style.GRID_CELL_SIZE) - self.set_icon_widget(icon) - icon.show() - if tooltip is not None: - self.set_tooltip(tooltip) - self.props.sensitive = True - self.connect('clicked', callback) - # FIXME: Argument 1 does not allow None as a value - #self.set_group(group) - self.show() - - parent.button_dict[name] = self - parent.callback_dict[name] = callback - - def set_icon(self, name): - icon = Icon(icon_name=name, - icon_size=style.GRID_CELL_SIZE) - self.set_icon_widget(icon) - icon.show() +def radio_factory(icon_name, toolbar, callback, cb_arg=None, + tooltip=None, group=None): + ''' Add a radio button to a toolbar ''' + button = RadioToolButton(group=group) + button.set_icon_name(icon_name) + if tooltip is not None: + button.set_tooltip(tooltip) + if cb_arg is None: + button.connect('clicked', callback) + else: + button.connect('clicked', callback, cb_arg) + if hasattr(toolbar, 'insert'): # the main toolbar + toolbar.insert(button, -1) + else: # or a secondary toolbar + toolbar.props.page.insert(button, -1) + button.show() + return button |