example operator that uses a timer.
authorCampbell Barton <ideasman42@gmail.com>
Mon, 28 Mar 2011 13:53:53 +0000 (13:53 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 28 Mar 2011 13:53:53 +0000 (13:53 +0000)
release/scripts/templates/operator_modal_timer.py [new file with mode: 0644]

diff --git a/release/scripts/templates/operator_modal_timer.py b/release/scripts/templates/operator_modal_timer.py
new file mode 100644 (file)
index 0000000..d8c218f
--- /dev/null
@@ -0,0 +1,46 @@
+import bpy
+from bpy.props import IntProperty, FloatProperty
+
+
+class ModalTimerOperator(bpy.types.Operator):
+    '''Operator which runs its self from a timer.'''
+    bl_idname = "wm.modal_timer_operator"
+    bl_label = "Modal Timer Operator"
+
+    _timer = None
+
+    def modal(self, context, event):
+        if event.type == 'ESC':
+            return self.cancel()
+
+        if event.type == 'TIMER':
+            # change theme color, silly!
+            color = context.user_preferences.themes[0].view_3d.back
+            color.s = 1.0
+            color.h += 0.01
+
+        return {'PASS_THROUGH'}
+
+    def execute(self, context):
+        context.window_manager.modal_handler_add(self)
+        self._timer = context.window_manager.event_timer_add(0.1, context.window)
+        return {'RUNNING_MODAL'}
+
+    def cancel(self, context):
+        context.window_manager.event_timer_remove(self._timer)
+        return {'CANCELLED'}
+
+
+def register():
+    bpy.utils.register_class(ModalTimerOperator)
+
+
+def unregister():
+    bpy.utils.unregister_class(ModalTimerOperator)
+
+
+if __name__ == "__main__":
+    register()
+
+    # test call
+    bpy.ops.wm.modal_timer_operator()