Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordave <drykod@gmail.com>2009-11-05 21:13:07 (GMT)
committer dave <drykod@gmail.com>2009-11-05 21:13:07 (GMT)
commit51aaa045ff56883653ff2a898613564d618e5f9c (patch)
tree73a606d9196bc497413f4fe9712264fdb8add5d8
parent9ed09e3dc78a7e8cc5b24b793413f8af77eeb74a (diff)
update change color actionHEADmaster
-rw-r--r--addons/changecolor.py58
-rw-r--r--tutorius/gtkutils.py6
2 files changed, 31 insertions, 33 deletions
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