[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