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-01-03 17:48:46 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-01-03 17:48:46 (GMT)
commitedd8ac822d949107f4ca96a93add96084b1acf7f (patch)
tree204009687eecc8dcae1faf4f7018051fb8a16978
parent130fae162dbb839f91033becc71be7a33bb7c1f0 (diff)
syncing with V30 before making GTK-3 release
-rw-r--r--AbacusActivity.py244
-rw-r--r--toolbar_utils.py93
2 files changed, 175 insertions, 162 deletions
diff --git a/AbacusActivity.py b/AbacusActivity.py
index ef1bc8c..c7b0283 100644
--- a/AbacusActivity.py
+++ b/AbacusActivity.py
@@ -22,98 +22,18 @@ try: # 0.86+ toolbar widgets
except ImportError:
HAS_TOOLBARBOX = False
if HAS_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.toolbutton import ToolButton
-from sugar3.graphics.radiotoolbutton import RadioToolButton
-from sugar3.graphics.menuitem import MenuItem
-from sugar3.graphics.icon import Icon
-from sugar3.datastore import datastore
from gettext import gettext as _
-import locale
import logging
_logger = logging.getLogger('abacus-activity')
-from abacus_window import Abacus, Custom, Suanpan, Soroban, Schety, Nepohualtzintzin, Binary, Hex, Decimal, Fractions, Caacupe, Cuisenaire
-
-
-def _button_factory(icon_name, toolbar, callback, cb_arg=None, tooltip=None,
- accelerator=None):
- '''Factory for making toolbar buttons'''
- button = ToolButton(icon_name)
- if tooltip is not None:
- button.set_tooltip(tooltip)
- button.props.sensitive = True
- if accelerator is not None:
- button.props.accelerator = accelerator
- if cb_arg is None:
- button.connect('clicked', callback)
- else:
- button.connect('clicked', 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
-
-
-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_named_icon(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
-
-
-def _label_factory(label_text, toolbar):
- ''' Factory for adding a label to a toolbar '''
- label = Gtk.Label(label=label_text)
- label.set_line_wrap(True)
- label.show()
- toolitem = Gtk.ToolItem()
- toolitem.add(label)
- toolbar.insert(toolitem, -1)
- toolitem.show()
- return label
-
-
-def _spin_factory(default, min, max, callback, toolbar):
- spin_adj = Gtk.Adjustment(default, min, max, 1, 32, 0)
- spin = Gtk.SpinButton()
- spin.set_adjustment(spin_adj)
- spin_id = spin.connect('value-changed', callback)
- spin.set_numeric(True)
- spin.show()
- toolitem = Gtk.ToolItem()
- toolitem.add(spin)
- toolbar.insert(toolitem, -1)
- toolitem.show()
- return spin
-
-
-def _separator_factory(toolbar, expand=False, visible=True):
- ''' add a separator to a toolbar '''
- separator = Gtk.SeparatorToolItem()
- separator.props.draw = visible
- separator.set_expand(expand)
- toolbar.insert(separator, -1)
- separator.show()
+from abacus_window import Abacus
+from toolbar_utils import separator_factory, radio_factory, label_factory, \
+ button_factory, spin_factory
class AbacusActivity(activity.Activity):
@@ -160,12 +80,12 @@ class AbacusActivity(activity.Activity):
toolbox.toolbar.insert(custom_toolbar_button, -1)
custom_toolbar_button.show()
- _separator_factory(toolbox.toolbar, False, True)
+ separator_factory(toolbox.toolbar, False, True)
- _button_factory('edit-delete', toolbox.toolbar,
- self._reset_cb, tooltip=_('Reset'))
+ button_factory('edit-delete', toolbox.toolbar,
+ self._reset_cb, tooltip=_('Reset'))
- _separator_factory(toolbox.toolbar, True, False)
+ separator_factory(toolbox.toolbar, True, False)
stop_button = StopButton(self)
stop_button.props.accelerator = _('<Ctrl>Q')
@@ -184,10 +104,10 @@ class AbacusActivity(activity.Activity):
toolbox.add_toolbar(_('Custom'), custom_toolbar)
toolbox.add_toolbar(_('Edit'), edit_toolbar)
- _button_factory('edit-delete', edit_toolbar,
- self._reset_cb, tooltip=_('Reset'))
+ button_factory('edit-delete', edit_toolbar,
+ self._reset_cb, tooltip=_('Reset'))
- _separator_factory(edit_toolbar, False, True)
+ separator_factory(edit_toolbar, False, True)
toolbox.set_current_toolbar(1)
@@ -198,110 +118,110 @@ class AbacusActivity(activity.Activity):
toolbox.props.visible = False
# TRANS: simple decimal abacus
- self.decimal = _radio_factory('decimal', abacus_toolbar,
- self._radio_cb, cb_arg='decimal',
- tooltip=_('Decimal'),
- group=None)
+ self.decimal = radio_factory('decimal', abacus_toolbar,
+ self._radio_cb, cb_arg='decimal',
+ tooltip=_('Decimal'),
+ group=None)
# TRANS: http://en.wikipedia.org/wiki/Soroban (Japanese abacus)
- self.japanese = _radio_factory('soroban', abacus_toolbar,
- self._radio_cb, cb_arg='japanese',
- tooltip=_('Soroban'),
- group=self.decimal)
+ self.japanese = radio_factory('soroban', abacus_toolbar,
+ self._radio_cb, cb_arg='japanese',
+ tooltip=_('Soroban'),
+ group=self.decimal)
# TRANS: http://en.wikipedia.org/wiki/Suanpan (Chinese abacus)
- self.chinese = _radio_factory('suanpan', abacus_toolbar,
- self._radio_cb, cb_arg='chinese',
- tooltip=_('Suanpan'),
- group=self.decimal)
+ self.chinese = radio_factory('suanpan', abacus_toolbar,
+ self._radio_cb, cb_arg='chinese',
+ tooltip=_('Suanpan'),
+ group=self.decimal)
- _separator_factory(abacus_toolbar)
+ separator_factory(abacus_toolbar)
# TRANS: http://en.wikipedia.org/wiki/Abacus#Native_American_abaci
- self.mayan = _radio_factory('nepohualtzintzin', abacus_toolbar,
- self._radio_cb, cb_arg='mayan',
- tooltip=_('Nepohualtzintzin'),
- group=self.decimal)
+ self.mayan = radio_factory('nepohualtzintzin', abacus_toolbar,
+ self._radio_cb, cb_arg='mayan',
+ tooltip=_('Nepohualtzintzin'),
+ group=self.decimal)
# TRANS: hexidecimal abacus
- self.hex = _radio_factory('hexadecimal', abacus_toolbar,
- self._radio_cb, cb_arg='hex',
- tooltip=_('Hexadecimal'),
- group=self.decimal)
+ self.hex = radio_factory('hexadecimal', abacus_toolbar,
+ self._radio_cb, cb_arg='hex',
+ tooltip=_('Hexadecimal'),
+ group=self.decimal)
# TRANS: binary abacus
- self.binary = _radio_factory('binary', abacus_toolbar,
- self._radio_cb, cb_arg='binary',
- tooltip=_('Binary'),
- group=self.decimal)
+ self.binary = radio_factory('binary', abacus_toolbar,
+ self._radio_cb, cb_arg='binary',
+ tooltip=_('Binary'),
+ group=self.decimal)
- _separator_factory(abacus_toolbar)
+ separator_factory(abacus_toolbar)
# TRANS: http://en.wikipedia.org/wiki/Abacus#Russian_abacus
- self.russian = _radio_factory('schety', abacus_toolbar,
- self._radio_cb, cb_arg='russian',
- tooltip=_('Schety'),
- group=self.decimal)
+ self.russian = radio_factory('schety', abacus_toolbar,
+ self._radio_cb, cb_arg='russian',
+ tooltip=_('Schety'),
+ group=self.decimal)
# TRANS: abacus for adding fractions
- self.fraction = _radio_factory('fraction', abacus_toolbar,
- self._radio_cb, cb_arg='fraction',
- tooltip=_('Fraction'),
- group=self.decimal)
+ self.fraction = radio_factory('fraction', abacus_toolbar,
+ self._radio_cb, cb_arg='fraction',
+ tooltip=_('Fraction'),
+ group=self.decimal)
# TRANS: Abacus invented by teachers in Caacupé, Paraguay
- self.caacupe = _radio_factory('caacupe', abacus_toolbar,
- self._radio_cb, cb_arg='caacupe',
- tooltip=_('Caacupé'),
- group=self.decimal)
+ self.caacupe = radio_factory('caacupe', abacus_toolbar,
+ self._radio_cb, cb_arg='caacupe',
+ tooltip=_('Caacupé'),
+ group=self.decimal)
- _separator_factory(abacus_toolbar)
+ separator_factory(abacus_toolbar)
# TRANS: Cuisenaire Rods
- self.cuisenaire = _radio_factory('cuisenaire', abacus_toolbar,
- self._radio_cb,
- cb_arg='cuisenaire',
- tooltip=_('Rods'), group=self.decimal)
+ self.cuisenaire = radio_factory('cuisenaire', abacus_toolbar,
+ self._radio_cb,
+ cb_arg='cuisenaire',
+ tooltip=_('Rods'), group=self.decimal)
- _separator_factory(abacus_toolbar)
+ separator_factory(abacus_toolbar)
- self.custom = _radio_factory('custom', abacus_toolbar,
- self._radio_cb,
- cb_arg='custom',
- tooltip=_('Custom'), group=self.decimal)
+ self.custom = radio_factory('custom', abacus_toolbar,
+ self._radio_cb,
+ cb_arg='custom',
+ tooltip=_('Custom'), group=self.decimal)
# TRANS: Number of rods on the abacus
- self._rods_label = _label_factory(_('Rods:') + ' ', custom_toolbar)
- self._rods_spin = _spin_factory(15, 1, 20, self._rods_spin_cb,
- custom_toolbar)
- # TRANS: Number of beads in the top section of the abacus
- self._top_label = _label_factory(_('Top:') + ' ', custom_toolbar)
- self._top_spin = _spin_factory(2, 0, 4, self._top_spin_cb,
+ self._rods_label = label_factory(_('Rods:') + ' ', custom_toolbar)
+ self._rods_spin = spin_factory(15, 1, 20, self._rods_spin_cb,
custom_toolbar)
+ # TRANS: Number of beads in the top section of the abacus
+ self._top_label = label_factory(_('Top:') + ' ', custom_toolbar)
+ self._top_spin = spin_factory(2, 0, 4, self._top_spin_cb,
+ custom_toolbar)
# TRANS: Number of beads in the bottom section of the abacus
- self._bottom_label = _label_factory(_('Bottom:') + ' ',
- custom_toolbar)
- self._bottom_spin = _spin_factory(5, 1, 20, self._bottom_spin_cb,
- custom_toolbar)
- # TRANS: Scale factor between bottom and top beads
- self._value_label = _label_factory(_('Factor:') + ' ', custom_toolbar)
- self._value_spin = _spin_factory(5, 1, 20, self._value_spin_cb,
+ self._bottom_label = label_factory(_('Bottom:') + ' ',
+ custom_toolbar)
+ self._bottom_spin = spin_factory(5, 1, 20, self._bottom_spin_cb,
custom_toolbar)
- # TRANS: Scale factor between rods
- self._base_label = _label_factory(_('Base:') + ' ', custom_toolbar)
- self._base_spin = _spin_factory(10, 1, 24, self._base_spin_cb,
+ # TRANS: Scale factor between bottom and top beads
+ self._value_label = label_factory(_('Factor:') + ' ', custom_toolbar)
+ self._value_spin = spin_factory(5, 1, 20, self._value_spin_cb,
custom_toolbar)
+ # TRANS: Scale factor between rods
+ self._base_label = label_factory(_('Base:') + ' ', custom_toolbar)
+ self._base_spin = spin_factory(10, 1, 24, self._base_spin_cb,
+ custom_toolbar)
- _separator_factory(custom_toolbar, False, False)
+ separator_factory(custom_toolbar, False, False)
- self.custom_maker = _button_factory('new-abacus', custom_toolbar,
- self._custom_cb,
- tooltip=_('Custom'))
+ self.custom_maker = button_factory('new-abacus', custom_toolbar,
+ self._custom_cb,
+ tooltip=_('Custom'))
- copy = _button_factory('edit-copy', edit_toolbar, self._copy_cb,
- tooltip=_('Copy'), accelerator='<Ctrl>c')
- paste = _button_factory('edit-paste', edit_toolbar, self._paste_cb,
- tooltip=_('Paste'), accelerator='<Ctrl>v')
+ button_factory('edit-copy', edit_toolbar, self._copy_cb,
+ tooltip=_('Copy'), accelerator='<Ctrl>c')
+ button_factory('edit-paste', edit_toolbar, self._paste_cb,
+ tooltip=_('Paste'), accelerator='<Ctrl>v')
self.toolbox.show()
diff --git a/toolbar_utils.py b/toolbar_utils.py
new file mode 100644
index 0000000..9824117
--- /dev/null
+++ b/toolbar_utils.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2011, Walter Bender
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# You should have received a copy of the GNU General Public License
+# along with this library; if not, write to the Free Software
+# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA
+
+
+from gi.repository import Gtk
+
+from sugar3.graphics.toolbutton import ToolButton
+from sugar3.graphics.radiotoolbutton import RadioToolButton
+
+
+def button_factory(icon_name, toolbar, callback, cb_arg=None, tooltip=None,
+ accelerator=None):
+ ''' Factory for making toolbar buttons '''
+ button = ToolButton(icon_name)
+ if tooltip is not None:
+ button.set_tooltip(tooltip)
+ button.props.sensitive = True
+ if accelerator is not None:
+ button.props.accelerator = accelerator
+ if cb_arg is None:
+ button.connect('clicked', callback)
+ else:
+ button.connect('clicked', 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
+
+
+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_named_icon(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
+
+
+def label_factory(label_text, toolbar):
+ ''' Factory for adding a label to a toolbar '''
+ label = Gtk.Label(label=label_text)
+ label.set_line_wrap(True)
+ label.show()
+ toolitem = Gtk.ToolItem()
+ toolitem.add(label)
+ toolbar.insert(toolitem, -1)
+ toolitem.show()
+ return label
+
+
+def spin_factory(default, min_value, max_value, callback, toolbar):
+ ''' Factory for making toolbar value spinners '''
+ spin_adj = Gtk.Adjustment(default, min_value, max_value, 1, 32, 0)
+ spin = Gtk.SpinButton()
+ spin.set_adjustment(spin_adj)
+ spin.connect('value-changed', callback)
+ spin.set_numeric(True)
+ spin.show()
+ toolitem = Gtk.ToolItem()
+ toolitem.add(spin)
+ toolbar.insert(toolitem, -1)
+ toolitem.show()
+ return spin
+
+
+def separator_factory(toolbar, expand=False, visible=True):
+ ''' Add a separator to a toolbar '''
+ separator = Gtk.SeparatorToolItem()
+ separator.props.draw = visible
+ separator.set_expand(expand)
+ toolbar.insert(separator, -1)
+ separator.show()