diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-01 09:52:11 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-01 09:52:11 (GMT) |
commit | ef40555ed3c69b35f78596f206896b947e653301 (patch) | |
tree | b088149d42b0b23a49301bca90bca1aa97ce404d /sugar/graphics/toolbutton.py | |
parent | d959426744cd19fb5f7eb9ec2c9e41d91b2d5652 (diff) |
Add support for accelerators to buttons.
Diffstat (limited to 'sugar/graphics/toolbutton.py')
-rw-r--r-- | sugar/graphics/toolbutton.py | 77 |
1 files changed, 66 insertions, 11 deletions
diff --git a/sugar/graphics/toolbutton.py b/sugar/graphics/toolbutton.py index 26acc83..08bc1f3 100644 --- a/sugar/graphics/toolbutton.py +++ b/sugar/graphics/toolbutton.py @@ -1,4 +1,5 @@ # Copyright (C) 2007, Red Hat, Inc. +# Copyright (C) 2008, One Laptop Per Child # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -15,22 +16,81 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. +import logging + import gtk import gobject -import time from sugar.graphics.icon import Icon from sugar.graphics.palette import Palette, ToolInvoker +def _add_accelerator(tool_button): + if not tool_button.props.accelerator or not tool_button.get_toplevel() or \ + not tool_button.child: + return + + # TODO: should we remove the accelerator from the prev top level? + + accel_group = tool_button.get_toplevel().get_data('sugar-accel-group') + if not accel_group: + logging.warning('No gtk.AccelGroup in the top level window.') + return + + keyval, mask = gtk.accelerator_parse(tool_button.props.accelerator) + # the accelerator needs to be set at the child, so the gtk.AccelLabel + # in the palette can pick it up. + tool_button.child.add_accelerator('clicked', accel_group, keyval, mask, + gtk.ACCEL_LOCKED | gtk.ACCEL_VISIBLE) + +def _hierarchy_changed_cb(tool_button, previous_toplevel): + _add_accelerator(tool_button) + +def setup_accelerator(tool_button): + _add_accelerator(tool_button) + tool_button.connect('hierarchy-changed', _hierarchy_changed_cb) + class ToolButton(gtk.ToolButton): __gtype_name__ = "SugarToolButton" - def __init__(self, icon_name=None): - gtk.ToolButton.__init__(self) + def __init__(self, icon_name=None, **kwargs): + self._accelerator = None + self._tooltip = None self._palette = None + + gobject.GObject.__init__(self, **kwargs) + if icon_name: self.set_icon(icon_name) - self.connect('clicked', self._button_clicked_cb) + + self.connect('clicked', self.__button_clicked_cb) + + def set_tooltip(self, tooltip): + """ Set a simple palette with just a single label. + """ + if self.palette is None or self._tooltip is None: + self.palette = Palette(tooltip) + elif self.palette is not None: + self.palette.set_primary_text(tooltip) + + self._tooltip = tooltip + + # Set label, shows up when toolbar overflows + gtk.ToolButton.set_label(self, tooltip) + + def get_tooltip(self): + return self._tooltip + + tooltip = gobject.property(type=str, setter=set_tooltip, getter=get_tooltip) + + def set_accelerator(self, accelerator): + self._accelerator = accelerator + setup_accelerator(self) + + def get_accelerator(self): + return self._accelerator + + accelerator = gobject.property(type=str, setter=set_accelerator, + getter=get_accelerator) def set_icon(self, icon_name): icon = Icon(icon_name=icon_name) @@ -46,11 +106,7 @@ class ToolButton(gtk.ToolButton): self._palette = palette self._palette.props.invoker = ToolInvoker(self) - def set_tooltip(self, text): - self.set_palette(Palette(text)) - - # Set label, shows up when toolbar overflows - self.set_label(text) + palette = gobject.property(type=object, setter=set_palette, getter=get_palette) def do_expose_event(self, event): if self._palette and self._palette.is_up(): @@ -67,8 +123,7 @@ class ToolButton(gtk.ToolButton): gtk.ToolButton.do_expose_event(self, event) - def _button_clicked_cb(self, widget): + def __button_clicked_cb(self, widget): if self._palette: self._palette.popdown(True) - palette = property(get_palette, set_palette) |