Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/anim.py
diff options
context:
space:
mode:
authorJoe Lee <joe@jotaro.com>2009-11-26 03:22:20 (GMT)
committer Joe Lee <joe@jotaro.com>2009-11-26 20:23:45 (GMT)
commit5fbfc499e8a55e5f8f9f3a05718fb251924e8b54 (patch)
tree524426291fee29dda3c54ba4127ff1937a9eb23a /anim.py
parentc0cb7f02ca66f81a1199705af25ac6c49e50bd3c (diff)
Separated Anim class, added undo delays.
Diffstat (limited to 'anim.py')
-rw-r--r--anim.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/anim.py b/anim.py
new file mode 100644
index 0000000..13a5cd2
--- /dev/null
+++ b/anim.py
@@ -0,0 +1,38 @@
+import gobject
+
+# Animation timer interval (in msec)
+_TIMER_INTERVAL = 20
+
+class Anim(object):
+ """Manages an animation."""
+ def __init__(self, update_func, end_anim_func):
+ """update_func is a function returns True if the animation should
+ continue, False otherwise. end_anim_func is a function that takes a
+ boolean indicating whether the animation was stopped prematurely."""
+ self._update_func = update_func
+ self._end_anim_func = end_anim_func
+ self._animating = False
+
+ def start(self):
+ self._animating = True
+ self._update_func()
+ gobject.timeout_add(_TIMER_INTERVAL, self._timer)
+
+ def stop(self):
+ if self._animating:
+ self._end_anim(anim_stopped=True)
+
+ def _timer(self):
+ if not self._animating:
+ return False
+ if self._update_func():
+ return True
+ self._end_anim(anim_stopped=False)
+ return False
+
+ def _end_anim(self, anim_stopped):
+ self._animating = False
+ self._end_anim_func(anim_stopped=anim_stopped)
+
+
+