Commit: b51ee540ae1782a4b7fdbdacaf6b56bb9e3e8ca6
Author: Campbell Barton
Date:   Sat Dec 6 20:51:12 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBb51ee540ae1782a4b7fdbdacaf6b56bb9e3e8ca6

Initial Python API for Widgets

Note this is only the initial Python API structure & isn't usable in its 
current state.

Work by Psy-fi & myself.

===================================================================

M       source/blender/editors/include/ED_view3d.h
M       source/blender/editors/object/object_lamp.c
M       source/blender/editors/space_node/space_node.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/makesdna/DNA_widget_types.h
M       source/blender/makesrna/intern/rna_internal.h
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/makesrna/intern/rna_wm_api.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_types.h
M       source/blender/windowmanager/intern/wm_widgets.c

===================================================================

diff --git a/source/blender/editors/include/ED_view3d.h 
b/source/blender/editors/include/ED_view3d.h
index 3db0512..47e59cc 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -64,6 +64,7 @@ struct wmOperatorType;
 struct wmWindow;
 struct wmWidget;
 struct wmWidgetGroup;
+struct wmWidgetGroupType;
 
 /* for derivedmesh drawing callbacks, for view3d_select, .... */
 typedef struct ViewContext {
@@ -370,8 +371,8 @@ void ED_view3d_operator_properties_viewmat_set(struct 
bContext *C, struct wmOper
 void ED_view3d_operator_properties_viewmat_get(struct wmOperator *op, int 
*winx, int *winy, float persmat[4][4]);
 #endif
 
-bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup *wgroup, const struct bContext 
*C);
-void WIDGETGROUP_lamp_draw(struct wmWidgetGroup *wgroup, const struct bContext 
*C);
+int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType 
*wgrouptype);
+void WIDGETGROUP_lamp_draw(const struct bContext *C, struct wmWidgetGroup 
*wgroup);
 
 /* render */
 void ED_view3d_shade_update(struct Main *bmain, struct Scene *scene, struct 
View3D *v3d, struct ScrArea *sa);
diff --git a/source/blender/editors/object/object_lamp.c 
b/source/blender/editors/object/object_lamp.c
index 4da2634..3e955d9 100644
--- a/source/blender/editors/object/object_lamp.c
+++ b/source/blender/editors/object/object_lamp.c
@@ -203,7 +203,7 @@ void LAMP_OT_lamp_position(struct wmOperatorType *ot)
        RNA_def_float_vector_xyz(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, 
"Vector", "", -FLT_MAX, FLT_MAX);
 }
 
-bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup *UNUSED(wgroup), const struct 
bContext *C)
+int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType 
*UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -214,7 +214,7 @@ bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup 
*UNUSED(wgroup), const struct bC
        return false;
 }
 
-void WIDGETGROUP_lamp_draw(struct wmWidgetGroup *wgroup, const struct bContext 
*C)
+void WIDGETGROUP_lamp_draw(const struct bContext *C, struct wmWidgetGroup 
*wgroup)
 {
        float color_lamp[4] = {0.5f, 0.5f, 1.0f, 1.0f};
        Object *ob = CTX_data_active_object(C);
diff --git a/source/blender/editors/space_node/space_node.c 
b/source/blender/editors/space_node/space_node.c
index 68f54d7..e33ebad 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -838,7 +838,7 @@ static int node_context(const bContext *C, const char 
*member, bContextDataResul
        return 0;
 }
 
-static bool WIDGETGROUP_node_transform_poll(struct wmWidgetGroup 
*UNUSED(wgroup), const struct bContext *C)
+static int WIDGETGROUP_node_transform_poll(const struct bContext *C, struct 
wmWidgetGroupType *UNUSED(wgrouptype))
 {
        SpaceNode *snode = CTX_wm_space_node(C);
 
@@ -852,7 +852,7 @@ static bool WIDGETGROUP_node_transform_poll(struct 
wmWidgetGroup *UNUSED(wgroup)
        return false;
 }
 
-static void WIDGETGROUP_node_transform_update(struct wmWidgetGroup *wgroup, 
const struct bContext *C)
+static void WIDGETGROUP_node_transform_update(const struct bContext *C, struct 
wmWidgetGroup *wgroup)
 {
        Image *ima;
        ImBuf *ibuf;
@@ -892,7 +892,7 @@ static void node_widgets(void)
        struct wmWidgetGroupType *wgroup_node_transform;
 
        wgroup_node_transform = 
WM_widgetgrouptype_new(WIDGETGROUP_node_transform_poll, 
WIDGETGROUP_node_transform_update);
-       wmaptype = WM_widgetmaptype_find(SPACE_NODE, RGN_TYPE_WINDOW, false);
+       wmaptype = WM_widgetmaptype_find(SPACE_NODE, RGN_TYPE_WINDOW, false, 
true);
 
        WM_widgetgrouptype_register(wmaptype, wgroup_node_transform);
 }
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 5b810fe..c331f7c 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -703,7 +703,7 @@ static void view3d_dropboxes(void)
 }
 
 
-static bool WIDGETGROUP_camera_poll(struct wmWidgetGroup *UNUSED(wgroup), 
const struct bContext *C)
+static int WIDGETGROUP_camera_poll(const struct bContext *C, struct 
wmWidgetGroupType *UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -714,7 +714,7 @@ static bool WIDGETGROUP_camera_poll(struct wmWidgetGroup 
*UNUSED(wgroup), const
        return false;
 }
 
-static void WIDGETGROUP_camera_draw(struct wmWidgetGroup *wgroup, const struct 
bContext *C)
+static void WIDGETGROUP_camera_draw(const struct bContext *C, struct 
wmWidgetGroup *wgroup)
 {
        float color_camera[4] = {1.0f, 0.3f, 0.0f, 1.0f};
        Object *ob = CTX_data_active_object(C);
@@ -738,7 +738,7 @@ static void WIDGETGROUP_camera_draw(struct wmWidgetGroup 
*wgroup, const struct b
 }
 
 
-static bool WIDGETGROUP_shapekey_poll(struct wmWidgetGroup *UNUSED(wgroup), 
const struct bContext *C)
+static int WIDGETGROUP_shapekey_poll(const struct bContext *C, struct 
wmWidgetGroupType *UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -757,7 +757,7 @@ static bool WIDGETGROUP_shapekey_poll(struct wmWidgetGroup 
*UNUSED(wgroup), cons
        return false;
 }
 
-static void WIDGETGROUP_shapekey_draw(struct wmWidgetGroup *wgroup, const 
struct bContext *C)
+static void WIDGETGROUP_shapekey_draw(const struct bContext *C, struct 
wmWidgetGroup *wgroup)
 {
        float color_shape[4] = {1.0f, 0.3f, 0.0f, 1.0f};
        Object *ob = CTX_data_active_object(C);
@@ -780,7 +780,7 @@ static void WIDGETGROUP_shapekey_draw(struct wmWidgetGroup 
*wgroup, const struct
 
 static void view3d_widgets(void)
 {
-       struct wmWidgetMapType *wmaptype = WM_widgetmaptype_find(SPACE_VIEW3D, 
RGN_TYPE_WINDOW, true);
+       struct wmWidgetMapType *wmaptype = WM_widgetmaptype_find(SPACE_VIEW3D, 
RGN_TYPE_WINDOW, true, true);
        wmWidgetGroupType *wgroup_light,*wgroup_camera, *wgroup_shapekey;
        // struct wmWidgetGroupType *wgroup_manipulator;
 
diff --git a/source/blender/makesdna/DNA_widget_types.h 
b/source/blender/makesdna/DNA_widget_types.h
index 828c9e6..b133616 100644
--- a/source/blender/makesdna/DNA_widget_types.h
+++ b/source/blender/makesdna/DNA_widget_types.h
@@ -43,4 +43,17 @@ typedef struct wmRectTransformWidget {
        float pad;
 } wmRectTransformWidget;
 
-#endif
\ No newline at end of file
+struct wmWidgetGroup {
+       struct wmWidgetGroup *next, *prev;
+
+       struct wmWidgetGroupType *type;
+       ListBase widgets;
+
+       void *py_instance;            /* python stores the class instance here 
*/
+       struct ReportList *reports;   /* errors and warnings storage */
+
+       int flag;
+       int pad;
+};
+
+#endif
diff --git a/source/blender/makesrna/intern/rna_internal.h 
b/source/blender/makesrna/intern/rna_internal.h
index 051e727..2b6b60d 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -264,6 +264,7 @@ void RNA_api_image(struct StructRNA *srna);
 void RNA_api_lattice(struct StructRNA *srna);
 void RNA_api_operator(struct StructRNA *srna);
 void RNA_api_macro(struct StructRNA *srna);
+void RNA_api_widgetgroup(struct StructRNA *srna);
 void RNA_api_keyconfig(struct StructRNA *srna);
 void RNA_api_keyconfigs(struct StructRNA *srna);
 void RNA_api_keyingset(struct StructRNA *srna);
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index 6a6a2ea..0128630 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -518,6 +518,26 @@ static PointerRNA rna_Operator_properties_get(PointerRNA 
*ptr)
        return rna_pointer_inherit_refine(ptr, op->type->srna, op->properties);
 }
 
+static void rna_WidgetGroup_name_get(PointerRNA *ptr, char *value)
+{
+       wmWidgetGroup *wgroup = ptr->data;
+       strcpy(value, "Dummy_XXX" /*wgroup->type->name*/);
+       (void)wgroup;
+}
+
+static int rna_WidgetGroup_name_length(PointerRNA *ptr)
+{
+       wmWidgetGroup *wgroup = ptr->data;
+       return strlen("Dummy_XXX" /*wgroup->type->name*/);
+       (void)wgroup;
+}
+
+static int rna_WidgetGroup_has_reports_get(PointerRNA *ptr)
+{
+       wmWidgetGroup *wgroup = ptr->data;
+       return (wgroup->reports && wgroup->reports->list.first);
+}
+
 static PointerRNA rna_OperatorMacro_properties_get(PointerRNA *ptr)
 {
        wmOperatorTypeMacro *otmacro = (wmOperatorTypeMacro *)ptr->data;
@@ -1360,6 +1380,175 @@ static void rna_Operator_bl_description_set(PointerRNA 
*ptr, const char *value)
                assert(!"setting the bl_description on a non-builtin operator");
 }
 
+#ifdef WITH_PYTHON
+static void rna_WidgetGroup_unregister(struct Main *bmain, StructRNA *type)
+{
+       //const char *idname;
+       wmWidgetGroupType *wgrouptype = RNA_struct_blender_type_get(type);
+       //wmWindowManager *wm;
+       //wmWidgetMapType *wmap = NULL;
+
+       if (!wgrouptype)
+               return;
+
+       WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
+
+       //RNA_struct_free_extension(type, &wgrouptype->ext);
+
+       WM_widgetgrouptype_free(bmain, wgrouptype);
+       //WM_operatortype_remove_ptr(ot);
+       //WM_widgetgrouptype_unregister(wmap, wgrouptype);
+
+       /* not to be confused with the RNA_struct_free that 
WM_operatortype_remove calls, they are 2 different srna's */
+       RNA_struct_free(&BLENDER_RNA, type);
+}
+
+static int widgetgroup_poll(const bContext *C, wmWidgetGroupType *wgrouptype)
+{
+
+       extern FunctionRNA rna_WidgetGroup_poll_func;
+
+       PointerRNA ptr;
+       ParameterList list;
+       FunctionRNA *func;
+       void *ret;
+       int visible;
+
+       RNA_pointer_create(NULL, wgrouptype->ext.srna, NULL, &ptr); /* dummy */
+       func = &rna_WidgetGroup_poll_func; /* RNA_struct_find_function(&ptr, 
"poll"); */
+
+       RNA_parameter_list_create(&list, &ptr, func);
+       RNA_parameter_set_lookup(&list, "context", &C);
+       wgrouptype->ext.call((bContext *)C, &ptr, func, &list);
+
+       RNA_parameter_get_lookup(&list, "visible", &ret);
+       visible = *(int *)ret;
+
+       RNA_parameter_list_free(&list);
+
+       return visible;
+}
+
+static void widgetgroup_draw(const bContext *C, wmWidgetGroup *wgroup)
+{
+       extern FunctionRNA rna_WidgetGroup_draw_func;
+
+       PointerRNA wgroup_ptr;
+       ParameterList list;
+       FunctionRNA *func;
+
+       RNA_pointer_create(NULL, wgroup->type->ext.srna, wgroup, &wgroup_ptr);
+       func = &rna_WidgetGroup_draw_func; /* 
RNA_struct_find_function(&wgroupr, "draw"); */
+
+       RNA_parameter_list_create(&list, &wgroup_ptr, func);
+       RNA_parameter_set_lookup(&list, "context", &C);
+       wgroup->type->ext.call((bC

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to