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>2012-10-08 22:41:58 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-10-08 22:41:58 (GMT)
commit3c0e3091ac82324b4194992667183a6e52dc04b0 (patch)
tree73af111d02654c241be53209a459ece2fc55a7a7
parentaf2c16abba9af8f849dcaae33e63cdc97f353715 (diff)
eliminate 0.84 toolbars and refactor radio button code
-rw-r--r--RulerActivity.py273
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