Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2013-05-14 20:38:10 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2013-05-14 21:42:47 (GMT)
commita23d25957949a0403807f4eb10e481de7211de0e (patch)
treebd34e475931e5a75e5a92eaef31627afe5c5eeea
parent85cd9ab565fe37c981221a40f3756d8ceda85bfe (diff)
Change buttons used to select aligment by a single RadioMenuButton
This is one of the changes needed to reorganize the toolbar to use Write with screen rotated. Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--toolbar.py29
-rw-r--r--widgets.py34
2 files changed, 50 insertions, 13 deletions
diff --git a/toolbar.py b/toolbar.py
index 7f69bf7..93a2432 100644
--- a/toolbar.py
+++ b/toolbar.py
@@ -32,6 +32,7 @@ from sugar3.graphics.toolbutton import ToolButton
from sugar3.graphics.toolcombobox import ToolComboBox
from sugar3.graphics.colorbutton import ColorToolButton
from sugar3.graphics.toggletoolbutton import ToggleToolButton
+from sugar3.graphics.radiopalette import RadioMenuButton
from sugar3.graphics import iconentry
from sugar3.graphics import style
from sugar3.activity.widgets import CopyButton
@@ -40,6 +41,7 @@ from sugar3.activity.widgets import UndoButton
from sugar3.activity.widgets import RedoButton
from widgets import AbiButton
+from widgets import AbiMenuItem
from widgets import FontSizeCombo
from fontcombobox import FontComboBox
from gridcreate import GridCreateWidget
@@ -552,27 +554,28 @@ class ParagraphToolbar(Gtk.Toolbar):
self.insert(Gtk.SeparatorToolItem(), -1)
- def append_align(icon_name, tooltip, do_abi_cb, style_name):
- button = AbiButton(abi, style_name, do_abi_cb)
- button.props.icon_name = icon_name
- button.props.group = group
- button.props.tooltip = tooltip
- self.insert(button, -1)
- return button
+ def append_align(icon_name, tooltip, do_abi_cb, style_name, button):
+ menu_item = AbiMenuItem(abi, style_name, do_abi_cb, icon_name,
+ tooltip, button)
+ button.props.palette.menu.append(menu_item)
+ menu_item.show()
- group = None
+ self._aligment_btn = RadioMenuButton(icon_name='format-justify-left')
+ self._aligment_btn.props.tooltip = _('Choose aligment')
- group = append_align('format-justify-left', _('Left justify'),
- abi.align_left, 'left-align')
+ append_align('format-justify-left', _('Left justify'),
+ abi.align_left, 'left-align', self._aligment_btn)
append_align('format-justify-center', _('Center justify'),
- abi.align_center, 'center-align')
+ abi.align_center, 'center-align', self._aligment_btn)
append_align('format-justify-right', _('Right justify'),
- abi.align_right, 'right-align')
+ abi.align_right, 'right-align', self._aligment_btn)
append_align('format-justify-fill', _('Fill justify'),
- abi.align_justify, 'justify-align')
+ abi.align_justify, 'justify-align', self._aligment_btn)
+
+ self.insert(self._aligment_btn, -1)
self.show_all()
diff --git a/widgets.py b/widgets.py
index 38d062b..987b11d 100644
--- a/widgets.py
+++ b/widgets.py
@@ -168,6 +168,40 @@ class AbiButton(RadioToolButton):
self.handler_unblock(self._toggled_handler)
+class AbiMenuItem(MenuItem):
+
+ def __init__(self, abi, abi_signal, do_abi_cb, icon_name, label,
+ button, on_abi_cb=None):
+ self._icon_name = icon_name
+ self._button = button
+ MenuItem.__init__(self, icon_name=icon_name, text_label=label)
+
+ self._abi_handler = abi.connect(abi_signal, self.__abi_cb,
+ abi_signal, on_abi_cb)
+ self.connect('activate', self.__activated_cb,
+ abi, do_abi_cb)
+
+ def __activated_cb(self, button, abi, do_abi_cb):
+ if self._button.get_icon_name() == self._icon_name:
+ return
+
+ abi.handler_block(self._abi_handler)
+ try:
+ logging.debug('Do abi %s' % do_abi_cb)
+ do_abi_cb()
+ self._button.set_icon_name(self._icon_name)
+ finally:
+ abi.handler_unblock(self._abi_handler)
+
+ def __abi_cb(self, abi, prop, abi_signal, on_abi_cb):
+ if (on_abi_cb is None and not prop) or \
+ (on_abi_cb is not None and not on_abi_cb(abi, prop)):
+ return
+
+ logging.debug('On abi %s prop=%r' % (abi_signal, prop))
+ self._button.set_icon_name(self._icon_name)
+
+
class ExportButtonFactory():
_EXPORT_FORMATS = [{'mime_type': 'application/rtf',