[Bf-blender-cvs] [aff22a4b399] custom-manipulators: RNA/Py API for runtime add/remove

Campbell Barton noreply at git.blender.org
Tue Jun 13 18:35:18 CEST 2017


Commit: aff22a4b399a9a71bf6b5aedc5bb673c0a759f4f
Author: Campbell Barton
Date:   Wed Jun 14 02:37:02 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBaff22a4b399a9a71bf6b5aedc5bb673c0a759f4f

RNA/Py API for runtime add/remove

WindowManager.manipulator_group_type_add/remove

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

M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/makesrna/intern/rna_wm_manipulator.c
M	source/blender/windowmanager/manipulators/WM_manipulator_api.h
M	source/blender/windowmanager/manipulators/WM_manipulator_types.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
M	source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index d54a62dc7a1..4b06cbe6b33 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -604,10 +604,10 @@ static void IMAGE_WGT_manipulator2d(wmManipulatorGroupType *wgt)
 
 static void image_widgets(void)
 {
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
 	        &(const struct wmManipulatorMapType_Params){SPACE_IMAGE, RGN_TYPE_WINDOW});
 
-	WM_manipulatorgrouptype_append_and_link(wmaptype, IMAGE_WGT_manipulator2d);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, IMAGE_WGT_manipulator2d);
 }
 
 /************************** main region ***************************/
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 6a8a425f0d1..2f1e6d38d3d 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -859,9 +859,9 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
 static void node_widgets(void)
 {
 	/* create the widgetmap for the area here */
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
 	        &(const struct wmManipulatorMapType_Params){SPACE_NODE, RGN_TYPE_WINDOW});
-	WM_manipulatorgrouptype_append_and_link(wmaptype, NODE_WGT_backdrop_transform);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, NODE_WGT_backdrop_transform);
 }
 
 static void node_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID *new_id)
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 002be9174ad..b96265c36ab 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -731,15 +731,15 @@ static void view3d_dropboxes(void)
 
 static void view3d_widgets(void)
 {
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(
+	wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
 	        &(const struct wmManipulatorMapType_Params){SPACE_VIEW3D, RGN_TYPE_WINDOW});
 
-	WM_manipulatorgrouptype_append_and_link(wmaptype, TRANSFORM_WGT_manipulator);
-	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_lamp);
-	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_force_field);
-	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_camera);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, TRANSFORM_WGT_manipulator);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_lamp);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_force_field);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_camera);
 
-	WM_manipulatorgrouptype_append_and_link(wmaptype, VIEW3D_WGT_armature_facemaps);
+	WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_armature_facemaps);
 }
 
 
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index 9711de36ba3..565194e5712 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -71,6 +71,8 @@ EnumPropertyItem rna_enum_window_cursor_items[] = {
 #include "UI_interface.h"
 #include "BKE_context.h"
 
+#include "WM_types.h"
+
 static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C)
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
@@ -115,6 +117,37 @@ static void rna_event_timer_remove(struct wmWindowManager *wm, wmTimer *timer)
 	WM_event_remove_timer(wm, timer->win, timer);
 }
 
+
+static wmManipulatorGroupType *wm_manipulatorgrouptype_find_for_add_remove(ReportList *reports, const char *idname)
+{
+	wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, true);
+	if (wgt == NULL) {
+		BKE_reportf(reports, RPT_ERROR, "Manipulator group type '%s' not found!", idname);
+		return NULL;
+	}
+	if (wgt->flag & WM_MANIPULATORGROUPTYPE_PERSISTENT) {
+		BKE_reportf(reports, RPT_ERROR, "Manipulator group '%s' has 'PERSISTENT' option set!", idname);
+		return NULL;
+	}
+	return wgt;
+}
+
+static void rna_manipulator_group_type_add(ReportList *reports, const char *idname)
+{
+	wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_find_for_add_remove(reports, idname);
+	if (wgt != NULL) {
+		WM_manipulator_group_add(wgt);
+	}
+}
+
+static void rna_manipulator_group_type_remove(Main *bmain, ReportList *reports, const char *idname)
+{
+	wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_find_for_add_remove(reports, idname);
+	if (wgt != NULL) {
+		WM_manipulator_group_remove(bmain, wgt);
+	}
+}
+
 /* placeholder data for final implementation of a true progressbar */
 static struct wmStaticProgress {
 	float min;
@@ -426,14 +459,17 @@ void RNA_api_wm(StructRNA *srna)
 	parm = RNA_def_pointer(func, "timer", "Timer", "", "");
 	RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
 
-/*
 	func = RNA_def_function(srna, "manipulator_group_type_add", "rna_manipulator_group_type_add");
-	RNA_def_function_ui_description(func, "XXX");
-	RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
-	parm = RNA_def_pointer(func, "operator", "Operator", "", "Operator to call");
+	RNA_def_function_ui_description(func, "Activate an existing widget group (when the persistent option isn't set)");
+	RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_REPORTS);
+	parm = RNA_def_string(func, "identifier", NULL, 0, "", "Manipulator group type name");
+	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+	func = RNA_def_function(srna, "manipulator_group_type_remove", "rna_manipulator_group_type_remove");
+	RNA_def_function_ui_description(func, "De-activate a widget group (when the persistent option isn't set)");
+	RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+	parm = RNA_def_string(func, "identifier", NULL, 0, "", "Manipulator group type name");
 	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
-	RNA_def_function_return(func, RNA_def_boolean(func, "handle", 1, "", "Whether adding the handler was successful"));
-*/
 
 	/* Progress bar interface */
 	func = RNA_def_function(srna, "progress_begin", "rna_progress_begin");
diff --git a/source/blender/makesrna/intern/rna_wm_manipulator.c b/source/blender/makesrna/intern/rna_wm_manipulator.c
index 8e8375d2eeb..db4cedcf733 100644
--- a/source/blender/makesrna/intern/rna_wm_manipulator.c
+++ b/source/blender/makesrna/intern/rna_wm_manipulator.c
@@ -584,8 +584,8 @@ static StructRNA *rna_ManipulatorGroup_register(
 		.regionid = dummywgt.mmap_params.regionid,
 	};
 
-	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(&wmap_params);
-	if (wmaptype == NULL) {
+	wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wmap_params);
+	if (mmap_type == NULL) {
 		BKE_reportf(reports, RPT_ERROR, "Area type does not support manipulators");
 		return NULL;
 	}
@@ -594,7 +594,7 @@ static StructRNA *rna_ManipulatorGroup_register(
 	{
 		wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(dummywgt.idname, true);
 		if (wgt && wgt->ext.srna) {
-			WM_manipulatormaptype_group_unlink(NULL, bmain, wgt);
+			WM_manipulatormaptype_group_unlink(NULL, bmain, mmap_type, wgt);
 			WM_manipulatorgrouptype_remove_ptr(wgt);
 
 			WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
@@ -624,9 +624,7 @@ static StructRNA *rna_ManipulatorGroup_register(
 	        BPY_RNA_manipulatorgroup_wrapper, (void *)&dummywgt);
 
 	if (wgt->flag & WM_MANIPULATORGROUPTYPE_PERSISTENT) {
-		WM_manipulatormaptype_group_link_ptr(wmaptype, wgt);
-
-		WM_manipulatorconfig_update_tag_init(wmaptype, wgt);
+		WM_manipulator_group_add_ex(wgt, mmap_type);
 
 		/* update while blender is running */
 		WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
@@ -646,7 +644,7 @@ static void rna_ManipulatorGroup_unregister(struct Main *bmain, StructRNA *type)
 
 	RNA_struct_free_extension(type, &wgt->ext);
 
-	WM_manipulatormaptype_group_unlink(NULL, bmain, wgt);
+	WM_manipulator_group_remove(bmain, wgt);
 
 	RNA_struct_free(&BLENDER_RNA, type);
 }
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
index 5eb40b82a6c..69c7c645fd3 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
@@ -158,8 +158,25 @@ struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_link_ptr(
 void WM_manipulatormaptype_group_init_runtime(
         const struct Main *bmain, struct wmManipulatorMapType *mmap_type,
         struct wmManipulatorGroupType *wgt);
-void WM_manipulatormaptype_group_free(struct wmManipulatorGroupTypeRef *wgt);
 void WM_manipulatormaptype_group_unlink(
-        struct bContext *C, struct Main *bmain, const struct wmManipulatorGroupType *wgt);
+        struct bContext *C, struct Main *bmain, struct wmManipulatorMapType *mmap_type,
+        const struct wmManipulatorGroupType *wgt);
+
+void WM_manipulatormaptype_group_free(struct wmManipulatorGroupTypeRef *wgt);
+
+/* -------------------------------------------------------------------- */
+/* Manipulator Add/Remove (High level API) */
+
+void WM_manipulator_group_add_ex(
+        struct wmManipulatorGroupType *wgt,
+        struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_add(
+        struct wmManipulatorGroupType *wgt);
+
+void WM_manipulator_group_remove_ex(
+        struct Main *bmain, struct wmManipulatorGroupType *wgt,
+        struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_remove(
+        struct Main *bmain, struct wmManipulatorGroupType *wgt);
 
 #endif  /* __WM_MANIPULATOR_API_H__ */
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
index 6b4f645dc31..ee17219fd5c 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_types.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
@@ -124,8 +124,8 @@ ty

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list