[Bf-blender-cvs] [3229939eae9] soc-2020-custom-menus: Custom Menu: fix display error, operator editor
TempoDev
noreply at git.blender.org
Sun Jun 14 23:36:51 CEST 2020
Commit: 3229939eae95b4b9d0c885d33ed5af29598360e4
Author: TempoDev
Date: Sun Jun 14 23:36:27 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB3229939eae95b4b9d0c885d33ed5af29598360e4
Custom Menu: fix display error, operator editor
===================================================================
M release/scripts/modules/rna_custom_menu_ui.py
M source/blender/makesdna/DNA_userdef_types.h
M source/blender/makesrna/intern/rna_userdef.c
===================================================================
diff --git a/release/scripts/modules/rna_custom_menu_ui.py b/release/scripts/modules/rna_custom_menu_ui.py
index 8814e7cdfb0..2c227c40eed 100644
--- a/release/scripts/modules/rna_custom_menu_ui.py
+++ b/release/scripts/modules/rna_custom_menu_ui.py
@@ -156,15 +156,15 @@ def draw_item_box(context, row):
# box_col.label(text=active)
# item_index = item_index + 1
# active = cm.item_name_get(context=cm.cm_context_selected, index=item_index, spacetype=cm.cm_space_selected)
- box_col.prop(cm, "cm_item_selected", text="", expand=True)
+ box_col.prop(cm, "cm_item_selected", expand=True)
row = row.split(factor=0.9, align=True)
col = row.column(align=True)
col.operator("preferences.menuitem_add", text="", icon='ADD')
col.operator("preferences.menuitem_remove", text="", icon='REMOVE')
- col.operator("wm.keyconfig_preset_add", text="", icon='TRIA_UP')
- col.operator("wm.keyconfig_preset_add", text="", icon='TRIA_DOWN').remove_active = True
+ #col.operator("preferences.item_up", text="", icon='TRIA_UP')
+ #col.operator("preferences.item_down", text="", icon='TRIA_DOWN')
row.separator()
def draw_item_editor(context, row):
@@ -178,7 +178,10 @@ def draw_item_editor(context, row):
col.label(text="No item in this list.")
col.label(text="Add one or choose another list to get started")
elif (cm.item_selected() >= 0):
+ col.prop(cm, "cm_item_type")
col.prop(cm, "cm_item_name")
+ if (cm.item_type() == "OPERATOR"):
+ col.prop(cm, "cm_item_operator")
else :
col.label(text="No item selected.")
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index cb8ecc68ed4..1733186d0b5 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -881,10 +881,12 @@ typedef struct UserDef {
struct WalkNavigation walk_navigation;
/** custom menu **/
- int cmspaceselect;
+ short cmspaceselect;
short cmcontextselect;
short cmitemselect;
+ short cmitemtype;
char cmitemname[64];
+ char cmitemop[64];
/** The UI for the user preferences. */
UserDef_SpaceData space_data;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index fb268578bb7..e994e56b2da 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1280,6 +1280,32 @@ static int rna_UserDef_usermenu_item_selected(UserDef *userdef)
return userdef->cmitemselect - 1;
}
+static const char *rna_UserDef_usermenu_item_type(UserDef *userdef)
+{
+ int i = 0;
+ const char **contexts_list = CTX_data_list_mode_string();
+
+ if (userdef->cmspaceselect > 0 && userdef->cmcontextselect >= 0) {
+ bUserMenu *bum = BKE_blender_user_menu_find(&userdef->user_menus, userdef->cmspaceselect, contexts_list[userdef->cmcontextselect]);
+ if (!bum) return "";
+
+ ListBase *lb = &bum->items;
+ i = 0;
+ for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
+ if (i == userdef->cmitemselect - 1) {
+ switch (umi->type) {
+ case USER_MENU_TYPE_OPERATOR : return "OPERATOR";
+ case USER_MENU_TYPE_SEP : return "SEPARATOR";
+ case USER_MENU_TYPE_MENU : return "MENU";
+ case USER_MENU_TYPE_PROP : return "PROPERTY";
+ return "";
+ }
+ }
+ }
+ }
+ return "";
+}
+
/* usermenu item name */
static void rna_UserDef_usermenu_name_get(PointerRNA *ptr, char *value)
{
@@ -1300,6 +1326,7 @@ static void rna_UserDef_usermenu_name_get(PointerRNA *ptr, char *value)
}
}
}
+ BLI_strncpy(value, "", FILE_MAX);
}
static void rna_UserDef_usermenu_name_set(PointerRNA *ptr, char *value)
@@ -1344,6 +1371,100 @@ static int rna_UserDef_usermenu_item_length(PointerRNA *ptr)
return 0;
}
+/* usermenu item op */
+static void rna_UserDef_usermenu_op_get(PointerRNA *ptr, char *value)
+{
+ int i = 0;
+ UserDef *userdef = (UserDef *)ptr->data;
+ const char **contexts_list = CTX_data_list_mode_string();
+
+ if (userdef->cmspaceselect > 0 && userdef->cmcontextselect >= 0) {
+ bUserMenu *bum = BKE_blender_user_menu_find(&userdef->user_menus, userdef->cmspaceselect, contexts_list[userdef->cmcontextselect]);
+ if (!bum) return;
+
+ ListBase *lb = &bum->items;
+ i = 0;
+ for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
+ if (i == userdef->cmitemselect - 1) {
+ if (umi->type != USER_MENU_TYPE_OPERATOR) return;
+ bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi;
+ BLI_strncpy(value, umi_op->op_idname, FILE_MAX);
+ return;
+ }
+ }
+ }
+ BLI_strncpy(value, "", FILE_MAX);
+}
+
+static void rna_UserDef_usermenu_op_set(PointerRNA *ptr, char *value)
+{
+ UserDef *userdef = (UserDef *)ptr->data;
+ const char **contexts_list = CTX_data_list_mode_string();
+
+ if (userdef->cmspaceselect > 0 && userdef->cmcontextselect >= 0) {
+ bUserMenu *bum = BKE_blender_user_menu_find(&userdef->user_menus,
+ userdef->cmspaceselect,
+ contexts_list[userdef->cmcontextselect]);
+ if (!bum) return;
+
+ ListBase *lb = &bum->items;
+ int i = 0;
+ for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
+ if (i == userdef->cmitemselect - 1) {
+ if (umi->type != USER_MENU_TYPE_OPERATOR) return;
+
+ bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi;
+ wmOperatorType *origin_ot = WM_operatortype_find(umi_op->op_idname, true);
+ wmOperatorType *ot = WM_operatortype_find(value, false);
+ //if (umi_op->prop) {
+ // IDP_print(umi_op->prop);
+ // printf("%s\n", umi_op->prop->name);
+ //}
+ if (origin_ot == ot) return;
+ if (ot != NULL) {
+ struct PointerRNA *opptr = MEM_callocN(sizeof(PointerRNA), "uiButOpPtr");
+ WM_operator_properties_create_ptr(opptr, ot);
+ WM_operator_properties_default(opptr, false);
+
+ IDProperty *properties = opptr->data;
+ //if (properties) {
+ // printf("%s\n", properties->name);
+ // IDP_print(properties);
+
+ //}
+
+ //IDProperty *prop = ot->prop ? IDP_CopyProperty(ot->prop) : NULL;
+ umi_op->prop = opptr->data;
+
+ BLI_strncpy(umi_op->op_idname, value, FILE_MAX);
+ }
+ return;
+ }
+ }
+ }
+}
+
+static int rna_UserDef_usermenu_op_length(PointerRNA *ptr)
+{
+ int i = 0;
+ UserDef *userdef = (UserDef *)ptr->data;
+ const char **contexts_list = CTX_data_list_mode_string();
+
+ if (userdef->cmspaceselect > 0 && userdef->cmcontextselect >= 0) {
+ bUserMenu *bum = BKE_blender_user_menu_find(&userdef->user_menus, userdef->cmspaceselect, contexts_list[userdef->cmcontextselect]);
+ if (!bum) return 0;
+
+ ListBase *lb = &bum->items;
+ i = 0;
+ for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
+ if (i == userdef->cmitemselect - 1) {
+ return strlen(umi->ui_name);
+ }
+ }
+ }
+ return 0;
+}
+
#else
# define USERDEF_TAG_DIRTY_PROPERTY_UPDATE_ENABLE \
@@ -6234,17 +6355,17 @@ static void rna_def_userdef_custom_menu(BlenderRNA *brna)
prop, "rna_UserDef_usermenu_name_get", "rna_UserDef_usermenu_item_length", "rna_UserDef_usermenu_name_set");
RNA_def_property_ui_text(prop, "Name", "The name to display");
- //prop = RNA_def_property(srna, "cm_item_operator", PROP_STRING, PROP_NONE);
- //RNA_def_property_string_sdna(prop, NULL, "cmitemop");
- //RNA_def_property_string_funcs(
- // prop, "rna_UserDef_usermenu_name_get", "rna_UserDef_usermenu_item_length", "rna_UserDef_usermenu_name_set");
- //RNA_def_property_ui_text(prop, "operator", "The operator to display");
+ prop = RNA_def_property(srna, "cm_item_operator", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "cmitemop");
+ RNA_def_property_string_funcs(
+ prop, "rna_UserDef_usermenu_op_get", "rna_UserDef_usermenu_op_length", "rna_UserDef_usermenu_op_set");
+ RNA_def_property_ui_text(prop, "operator", "The operator to display");
- //prop = RNA_def_property(srna, "cm_item_type", PROP_ENUM, PROP_NONE);
- //RNA_def_property_enum_sdna(prop, NULL, "cmitemtype");
- //RNA_def_property_enum_items(prop, custom_menu_type_items);
- //RNA_def_property_ui_text(
- // prop, "type", "the type of item");
+ prop = RNA_def_property(srna, "cm_item_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "cmitemtype");
+ RNA_def_property_enum_items(prop, custom_menu_type_items);
+ RNA_def_property_ui_text(
+ prop, "type", "the type of item");
//functions
func = RNA_def_function(srna, "item_selected", "rna_UserDef_usermenu_item_selected");
@@ -6256,6 +6377,16 @@ static void rna_def_userdef_custom_menu(BlenderRNA *brna)
"the item id", 0, 1000);
RNA_def_function_return(func, parm);
+ func = RNA_def_function(srna, "item_type", "rna_UserDef_usermenu_item_type");
+ RNA_def_function_ui_description(func, "get item type");
+ parm = RNA_def_string(func,
+ "type",
+ NULL,
+ 0,
+ "type",
+ "type of the item");
+ RNA_def_function_return(func, parm);
+
func = RNA_def_function(srna, "item_name_get", "rna_UserDef_usermenu_item_name_get");
RNA_def_function_ui_description(func, "Refresh custom menu editor");
parm = RNA_def_string(func,
@@ -6319,6 +6450,44 @@ static void rna_def_userdef_custom_menu(BlenderRNA *brna)
parm = RNA_def_int(func, "index", 0, 0, 100, "Index", "index of the item in list", 0, 100);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ func = RNA_def_function(srna, "item_up", "rna_UserDef_usermenu_item_remove");
+ RNA_def_function_ui_description(func, "add an item to a menu");
+ parm = RNA_def_string(func,
+ "spacetype",
+ NULL,
+ 0,
+ "SpaceType",
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list