From 51aaa045ff56883653ff2a898613564d618e5f9c Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 05 Nov 2009 21:13:07 +0000 Subject: update change color action --- diff --git a/addons/changecolor.py b/addons/changecolor.py index 27ae284..460da32 100644 --- a/addons/changecolor.py +++ b/addons/changecolor.py @@ -34,8 +34,12 @@ class ChangeColor(Action): """ ChangeColorEvent """ + # widget address property widaddr = TUAMProperty("0") + # set timeout + timeout = 500 + def __init__(self, widaddr=None): """Constructor - Change a widget color @param widaddr: the widget for which you want to change the color (UAM) @@ -44,9 +48,8 @@ class ChangeColor(Action): if widaddr: self.widaddr = widaddr - self._old_color = None + self.init_style = None self._new_color = None - self.tmp_color = None self.wid = None @@ -62,27 +65,23 @@ class ChangeColor(Action): raise TypeError("activity argument is Mandatory") # get widget instance - self.wid = find_widget(kwargs["activity"], self.widaddr) + self.wid = find_widget(kwargs["activity"], self.widaddr, ignore_errors=False) if not self.wid: - # TODO: error - raise TypeError("widget not found") + raise NameError("widget not found") # we have to get the initial color in the sugar rc theme - current_style = self.wid.rc_get_style() - self._old_color = current_style.bg[gtk.STATE_NORMAL] + self.init_style = self.wid.rc_get_style() # define new color self._new_color = gtk.gdk.color_parse(xo_fill_color) # set change color timeout (flash) - self.timeout = 500 - self.tmp_color = self._old_color - self._handler_id = gobject.timeout_add(self.timeout, self._timeout_cb) + self._handler_id = gobject.timeout_add(ChangeColor.timeout, self._timeout_cb) def undo(self): """ - Go back to the original color + Remove timer and go back to the original color """ if self._handler_id: @@ -93,34 +92,31 @@ class ChangeColor(Action): pass # modify bg color (go back to original color) - self.wid.modify_bg(gtk.STATE_NORMAL, self._old_color) + self.wid.modify_bg(gtk.STATE_NORMAL, self.init_style.bg[gtk.STATE_NORMAL]) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self.init_style.bg[gtk.STATE_PRELIGHT]) + self.wid.modify_bg(gtk.STATE_ACTIVE, self.init_style.bg[gtk.STATE_ACTIVE]) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self.init_style.bg[gtk.STATE_INSENSITIVE]) def _timeout_cb(self): """ _timeout_cb triggers the eventfilter callback. - - It is necessary because gobject timers only stop if the callback they - trigger returns False """ - if self.tmp_color == self._old_color: - self.tmp_color = self._new_color + if self.wid.rc_get_style().bg[gtk.STATE_NORMAL] == self._new_color: + # modify bg color (go back to original color) + self.wid.modify_bg(gtk.STATE_NORMAL, self.init_style.bg[gtk.STATE_NORMAL]) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self.init_style.bg[gtk.STATE_PRELIGHT]) + self.wid.modify_bg(gtk.STATE_ACTIVE, self.init_style.bg[gtk.STATE_ACTIVE]) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self.init_style.bg[gtk.STATE_INSENSITIVE]) else: - self.tmp_color = self._old_color - - # modify bg color - self.wid.modify_bg(gtk.STATE_NORMAL, self.tmp_color) - - if self._handler_id: - try: - #remove the timer - gobject.source_remove(self._handler_id) - except: - pass - - # TODO: reset - self._handler_id = gobject.timeout_add(self.timeout, self._timeout_cb) + # modify bg color (to new color) + self.wid.modify_bg(gtk.STATE_NORMAL, self._new_color) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self._new_color) + self.wid.modify_bg(gtk.STATE_ACTIVE, self._new_color) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self._new_color) + return True + __action__ = { "name" : "ChangeColor", "display_name" : "Change widget color", diff --git a/tutorius/gtkutils.py b/tutorius/gtkutils.py index 1a9cb0f..c96a73f 100644 --- a/tutorius/gtkutils.py +++ b/tutorius/gtkutils.py @@ -33,7 +33,7 @@ def raddr_lookup(widget): return ".".join(name) -def find_widget(base, target_fqdn): +def find_widget(base, target_fqdn, ignore_errors=True): """Find a widget by digging into a parent widget's children tree @param base the parent widget @param target_fqdn fqdn-style target object name @@ -57,7 +57,9 @@ def find_widget(base, target_fqdn): try: obj = get_children(obj)[int(path.pop(0))] except: - break + if ignore_errors: + break + return None return obj -- cgit v0.9.1