support for registering operators using the same internal rna api as panels, menus...
[blender-staging.git] / source / blender / makesrna / intern / rna_wm_api.c
index 2fbcd2f4ae32fb8d6371cfcdfffcca94c43a741b..dcaff1a7c07a9965a619c1f10e0501c766bf0dc6 100644 (file)
@@ -113,7 +113,12 @@ static wmKeyMapItem *rna_KeyMap_add_modal_item(wmKeyMap *km, bContext *C, Report
        return WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, propvalue);
 }
 
-static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char *idname, int type, int any, int value, int shift, int ctrl, int alt, int oskey, int keymodifier)
+static void rna_keymap_restore_item_to_default(wmKeyMap *km, bContext *C, wmKeyMapItem *kmi)
+{
+       WM_keymap_restore_item_to_default(C, km, kmi);
+}
+
+static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char *idname, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
 {
 //     wmWindowManager *wm = CTX_wm_manager(C);
        int modifier= 0;
@@ -134,6 +139,11 @@ static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char
        return WM_keymap_add_item(km, idname, type, value, modifier, keymodifier);
 }
 
+static void rna_Operator_report(wmOperator *op, int type, char *msg)
+{
+       BKE_report(op->reports, type, msg);
+}
+
 #else
 
 void RNA_api_wm(StructRNA *srna)
@@ -177,6 +187,50 @@ void RNA_api_wm(StructRNA *srna)
        parm= RNA_def_int(func, "height", 20, 0, INT_MAX, "", "Height of the popup.", 0, INT_MAX);
 }
 
+void RNA_api_operator(StructRNA *srna)
+{
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       /* utility, not for registering */
+       func= RNA_def_function(srna, "report", "rna_Operator_report");
+       parm= RNA_def_enum(func, "type", wm_report_items, 0, "Type", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED|PROP_ENUM_FLAG);
+       parm= RNA_def_string(func, "message", "", 0, "Report Message", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+
+
+       /* Registration */
+
+       /* poll */
+       func= RNA_def_function(srna, "poll", NULL);
+       RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
+       RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
+       RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
+       RNA_def_pointer(func, "context", "Context", "", "");
+
+       /* exec */
+       func= RNA_def_function(srna, "execute", NULL);
+       RNA_def_function_ui_description(func, "Execute the operator.");
+       RNA_def_function_flag(func, FUNC_REGISTER);
+       RNA_def_pointer(func, "context", "Context", "", "");
+
+       parm= RNA_def_enum(func, "result", operator_return_items, 0, "result", ""); // better name?
+       RNA_def_property_flag(parm, PROP_ENUM_FLAG);
+       RNA_def_function_return(func, parm);
+
+       /* invoke */
+       func= RNA_def_function(srna, "invoke", NULL);
+       RNA_def_function_ui_description(func, "Invoke the operator.");
+       RNA_def_function_flag(func, FUNC_REGISTER);
+       RNA_def_pointer(func, "context", "Context", "", "");
+       RNA_def_pointer(func, "event", "Event", "", "");
+
+       parm= RNA_def_enum(func, "result", operator_return_items, 0, "result", ""); // better name?
+       RNA_def_property_flag(parm, PROP_ENUM_FLAG);
+       RNA_def_function_return(func, parm);
+}
+
 void RNA_api_keyconfig(StructRNA *srna)
 {
        FunctionRNA *func;
@@ -259,7 +313,23 @@ void RNA_api_keymap(StructRNA *srna)
        RNA_def_function_return(func, parm);
 
        func= RNA_def_function(srna, "restore_to_default", "WM_keymap_restore_to_default");
+
+       func= RNA_def_function(srna, "restore_item_to_default", "rna_keymap_restore_item_to_default");
+       RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+       parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
+void RNA_api_keymapitem(StructRNA *srna)
+{
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       func= RNA_def_function(srna, "compare", "WM_keymap_item_compare");
+       parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm= RNA_def_boolean(func, "result", 0, "Comparison result", "");
+       RNA_def_function_return(func, parm);
+}
 #endif