RNA functions for adding timer (needed for demo mode, also useful for python modal...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 28 Mar 2011 04:55:24 +0000 (04:55 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 28 Mar 2011 04:55:24 +0000 (04:55 +0000)
 - timer = WindowManager.event_timer_add(time_step, window=None)
 - WindowManager.event_timer_remove(timer)

Still TODO, is a way for python to check the timer identity.

source/blender/makesrna/RNA_access.h
source/blender/makesrna/intern/rna_wm.c
source/blender/makesrna/intern/rna_wm_api.c

index e67728def11a9b466f3002f7821205970b393a23..2816a8717c104699e728e79cfdec653f3eb64090 100644 (file)
@@ -532,6 +532,7 @@ extern StructRNA RNA_ThemeView3D;
 extern StructRNA RNA_ThemeWidgetColors;
 extern StructRNA RNA_ThemeWidgetStateColors;
 extern StructRNA RNA_TimelineMarker;
+extern StructRNA RNA_Timer;
 extern StructRNA RNA_ToolSettings;
 extern StructRNA RNA_TouchSensor;
 extern StructRNA RNA_TrackToConstraint;
index ea26663df4425355ba71a1a57008203cec2d0f89..df029c9d871580c95d16e1af0fbe1a6611c37418 100644 (file)
@@ -1418,6 +1418,36 @@ static void rna_def_event(BlenderRNA *brna)
        RNA_define_verify_sdna(1); // not in sdna
 }
 
+static void rna_def_timer(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       srna= RNA_def_struct(brna, "Timer", NULL);
+       RNA_def_struct_ui_text(srna, "Timer", "Window event timer");
+       RNA_def_struct_sdna(srna, "wmTimer");
+
+       RNA_define_verify_sdna(0); // not in sdna
+
+       /* could wrap more, for now this is enough */
+       prop= RNA_def_property(srna, "time_step", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "timestep");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Time Step", "");
+
+       prop= RNA_def_property(srna, "time_delta", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "delta");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Delta", "Time since last step in seconds");
+
+       prop= RNA_def_property(srna, "time_duration", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "duration");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Delta", "Time since last step in seconds");
+
+       RNA_define_verify_sdna(1); // not in sdna
+}
+
 static void rna_def_window(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -1801,6 +1831,7 @@ void RNA_def_wm(BlenderRNA *brna)
        rna_def_macro_operator(brna);
        rna_def_operator_type_macro(brna);
        rna_def_event(brna);
+       rna_def_timer(brna);
        rna_def_window(brna);
        rna_def_windowmanager(brna);
        rna_def_keyconfig(brna);
index 4891d8b107850a54722d19437805afacbd35a451..ab2775b7184d79e72f8dbaccf4f7de3be06a84c7 100644 (file)
@@ -73,6 +73,17 @@ static int rna_event_modal_handler_add(struct bContext *C, struct wmOperator *op
        return WM_event_add_modal_handler(C, operator) != NULL;
 }
 
+/* XXX, need a way for python to know event types, 0x0110 is hard coded */
+struct wmTimer *rna_event_timer_add(struct wmWindowManager *wm, float time_step, wmWindow *win)
+{
+       return WM_event_add_timer(wm, win, 0x0110, time_step);
+}
+
+void rna_event_timer_remove(struct wmWindowManager *wm, wmTimer *timer)
+{
+       return WM_event_remove_timer(wm, timer->win, timer);
+}
+
 #else
 
 #define WM_GEN_INVOKE_EVENT (1<<0)
@@ -118,6 +129,22 @@ void RNA_api_wm(StructRNA *srna)
        RNA_def_property_flag(parm, PROP_REQUIRED);
        RNA_def_function_return(func, RNA_def_boolean(func, "handle", 1, "", ""));
 
+
+       func= RNA_def_function(srna, "event_timer_add", "rna_event_timer_add");
+       parm= RNA_def_property(func, "time_step", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       RNA_def_property_range(parm, 0.0, FLT_MAX);
+       RNA_def_property_ui_text(parm, "Time Step", "Interval in seconds between timer events");
+       parm= RNA_def_pointer(func, "window", "Window", "", "Window to attach the timer to or None.");
+       parm= RNA_def_pointer(func, "result", "Timer", "", "");
+       RNA_def_function_return(func, parm);
+
+
+       func= RNA_def_function(srna, "event_timer_remove", "rna_event_timer_remove");
+       parm= RNA_def_pointer(func, "timer", "Timer", "", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+
        /* invoke functions, for use with python */
        func= RNA_def_function(srna, "invoke_props_popup", "WM_operator_props_popup");
        RNA_def_function_ui_description(func, "Operator popup invoke.");