diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-02-07 17:26:39 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-02-07 17:26:39 (GMT) |
commit | 7e324af1797a21576a54be290198721d405f744a (patch) | |
tree | b10e7d7127d1547087488730c10462beeb427216 /sugar/graphics/button.py | |
parent | 5d57b261eeb4f9cb70722bc4d6f95c1b1bd89d61 (diff) |
Added toolbar and button controls.
Diffstat (limited to 'sugar/graphics/button.py')
-rw-r--r-- | sugar/graphics/button.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/sugar/graphics/button.py b/sugar/graphics/button.py new file mode 100644 index 0000000..c226995 --- /dev/null +++ b/sugar/graphics/button.py @@ -0,0 +1,69 @@ +import gobject +import hippo + +from canvasicon import CanvasIcon +from iconcolor import IconColor +from grid import Grid +from sugar import profile + +class Button(hippo.CanvasBox): + __gtype_name__ = 'Button' + + __gproperties__ = { + 'icon-name': (str, None, None, None, + gobject.PARAM_READWRITE), + 'active': (bool, None, None, True, + gobject.PARAM_READWRITE) + } + + def __init__(self, icon_name): + hippo.CanvasBox.__init__(self) + + self._active = True + self._normal_color = IconColor('white') + self._prelight_color = profile.get_color() + self._inactive_color = IconColor('#808080,#424242') + + grid = Grid() + self.props.box_width = grid.dimension(1) + self.props.box_height = grid.dimension(1) + + self._icon = CanvasIcon(icon_name=icon_name, cache=True, + color=self._normal_color) + self.append(self._icon, hippo.PACK_EXPAND) + self._connect_signals(self._icon) + + def do_set_property(self, pspec, value): + if pspec.name == 'icon-name': + self._icon.props.icon_name = value + elif pspec.name == 'active': + self._active = value + if self._active: + self._icon.props.color = self._normal_color + else: + self._icon.props.color = self._inactive_color + else: + hippo.CanvasBox.do_set_property(self, pspec, value) + + def do_get_property(self, pspec): + if pspec.name == 'icon-name': + return self._icon.get_property('icon-name') + elif pspec.name == 'active': + return self._active + else: + return hippo.CanvasBox.get_property(self, pspec) + + def _connect_signals(self, item): + item.connect('button-release-event', self._button_release_event_cb) + # TODO: Prelighting is disabled by now. Need to figure how we want it to behave. + #item.connect('motion-notify-event', self._motion_notify_event_cb) + + def _button_release_event_cb(self, widget, event): + if self._active: + self.emit_activated() + + def _motion_notify_event_cb(self, widget, event): + if self._active and event.detail == hippo.MOTION_DETAIL_ENTER: + self._icon.props.color = self._prelight_color + elif self._active and event.detail == hippo.MOTION_DETAIL_LEAVE: + self._icon.props.color = self._normal_color |