[Bf-blender-cvs] [d225ddec4a8] soc-2020-custom-menus: Custom Menus : Remove auto keybinding
TempoDev
noreply at git.blender.org
Fri Jul 31 22:29:43 CEST 2020
Commit: d225ddec4a8d4522885d329f4197e5e742800c93
Author: TempoDev
Date: Fri Jul 31 22:29:31 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rBd225ddec4a8d4522885d329f4197e5e742800c93
Custom Menus : Remove auto keybinding
===================================================================
M release/scripts/modules/rna_user_menus_ui.py
M source/blender/editors/interface/interface_templates.c
M source/blender/makesrna/intern/rna_userdef.c
===================================================================
diff --git a/release/scripts/modules/rna_user_menus_ui.py b/release/scripts/modules/rna_user_menus_ui.py
index 1c94e1ea934..879169d9ff1 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -37,7 +37,7 @@ def _indented_layout(layout, level):
col = split.column()
return col
-def get_keymap(context, index):
+def get_keymap(context, index, ensure):
prefs = context.preferences
um = prefs.user_menus
@@ -49,11 +49,12 @@ def get_keymap(context, index):
if kmi.idname == "wm.call_user_menu":
if kmi.properties.index == index:
return kmi
- km = context.window_manager.keyconfigs.user.keymaps['Window']
- kmi = km.keymap_items.new("wm.call_user_menu",'NONE', 'ANY', shift=False, ctrl=False, alt=False)
- kmi.properties.index = index
- kmi.active = True
- return kmi
+ if ensure:
+ km = context.window_manager.keyconfigs.user.keymaps['Window']
+ kmi = km.keymap_items.new("wm.call_user_menu",'NONE', 'ANY', shift=False, ctrl=False, alt=False)
+ kmi.properties.index = index
+ kmi.active = True
+ return kmi
def draw_button(context, box, item, index):
prefs = context.preferences
@@ -155,23 +156,49 @@ def draw_item_editor(context, row):
else:
col.label(text="No item selected.")
-def draw_user_menu_preference_expanded(context, layout, kmi):
+def draw_user_menu_preference_expanded(context, layout, kmi, map_type):
prefs = context.preferences
um = prefs.user_menus
- umg = um.active_group
-
- layout.prop(kmi, "idname", text="")
- layout.prop(kmi.properties, "index", text="")
+ box = layout.box()
+ sub = box.row()
+
+ if kmi:
+ if map_type not in {'TEXTINPUT', 'TIMER'}:
+ sub = box.column()
+ subrow = sub.row(align=True)
+
+ if map_type == 'KEYBOARD':
+ subrow.prop(kmi, "type", text="", event=True)
+ subrow.prop(kmi, "value", text="")
+ subrow_repeat = subrow.row(align=True)
+ subrow_repeat.active = kmi.value in {'ANY', 'PRESS'}
+ subrow_repeat.prop(kmi, "repeat", text="Repeat")
+ elif map_type in {'MOUSE', 'NDOF'}:
+ subrow.prop(kmi, "type", text="")
+ subrow.prop(kmi, "value", text="")
+
+ subrow = sub.row()
+ subrow.scale_x = 0.75
+ subrow.prop(kmi, "any", toggle=True)
+ subrow.prop(kmi, "shift", toggle=True)
+ subrow.prop(kmi, "ctrl", toggle=True)
+ subrow.prop(kmi, "alt", toggle=True)
+ subrow.prop(kmi, "oskey", text="Cmd", toggle=True)
+ subrow.prop(kmi, "key_modifier", text="", event=True)
+ else:
+ sub.label(text="No key set")
def draw_user_menu_preference(context, layout):
prefs = context.preferences
um = prefs.user_menus
umg = um.active_group
- kmi = get_keymap(context, -1)
+ kmi = get_keymap(context, -1, False)
+ map_type = None
col = _indented_layout(layout, 0)
- row = col.row()
+ box = col.box()
+ row = box.row()
row.prop(um, "expanded", text="", emboss=False)
@@ -182,27 +209,26 @@ def draw_user_menu_preference(context, layout):
if umg.is_pie:
pie_text = "Pie"
row.prop(umg, "is_pie", text=pie_text, toggle=True)
-
- row.prop(kmi, "map_type", text="")
- map_type = kmi.map_type
- if map_type == 'KEYBOARD':
- row.prop(kmi, "type", text="", full_event=True)
- elif map_type == 'MOUSE':
- row.prop(kmi, "type", text="", full_event=True)
- elif map_type == 'NDOF':
- row.prop(kmi, "type", text="", full_event=True)
- elif map_type == 'TWEAK':
- subrow = row.row()
- subrow.prop(kmi, "type", text="")
- subrow.prop(kmi, "value", text="")
- elif map_type == 'TIMER':
- row.prop(kmi, "type", text="")
- else:
- row.label()
+ if kmi:
+ row.prop(kmi, "map_type", text="")
+ map_type = kmi.map_type
+ if map_type == 'KEYBOARD':
+ row.prop(kmi, "type", text="", full_event=True)
+ elif map_type == 'MOUSE':
+ row.prop(kmi, "type", text="", full_event=True)
+ elif map_type == 'NDOF':
+ row.prop(kmi, "type", text="", full_event=True)
+ elif map_type == 'TWEAK':
+ subrow = row.row()
+ subrow.prop(kmi, "type", text="")
+ subrow.prop(kmi, "value", text="")
+ elif map_type == 'TIMER':
+ row.prop(kmi, "type", text="")
+ else:
+ row.label()
if um.expanded:
- box = col.box()
- draw_user_menu_preference_expanded(context=context, layout=box, kmi=kmi)
+ draw_user_menu_preference_expanded(context=context, layout=box, kmi=kmi, map_type=map_type)
def menu_id(context, umg):
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index babeb64870b..95071d11b8a 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -7462,7 +7462,7 @@ static void template_user_menu_item_properties(uiLayout *layout,
but->rnaprop = prop;
UI_block_emboss_set(block, UI_EMBOSS);
}
- if (i >= 6)
+ if (i > 5)
break;
i++;
}
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 3d413548a9d..48d69e19e8e 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1488,15 +1488,25 @@ static void rna_UserDef_usermenus_pie_set(PointerRNA *ptr, int value)
static void rna_UserDef_usermenus_item_op_set(PointerRNA *ptr, const char *value)
{
bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)ptr->data;
+ char idname_bl[OP_MAX_TYPENAME];
wmOperatorType *origin_ot = WM_operatortype_find(umi_op->op_idname, true);
wmOperatorType *ot = WM_operatortype_find(value, false);
if (origin_ot == ot || ot == NULL)
return;
- BLI_strncpy(umi_op->op_idname, value, FILE_MAX);
+ WM_operator_bl_idname(idname_bl, value);
+ WM_operator_py_idname(umi_op->op_idname, value);
+
+ if (LIKELY(umi_op->ptr)) {
+ WM_operator_properties_free(umi_op->ptr);
+ MEM_freeN(umi_op->ptr);
+
+ umi_op->ptr = NULL;
+ }
umi_op->prop = NULL;
- WM_operator_properties_alloc(&(umi_op->ptr), &(umi_op->prop), umi_op->op_idname);
+
+ WM_operator_properties_alloc(&(umi_op->ptr), &(umi_op->prop), idname_bl);
WM_operator_properties_sanitize(umi_op->ptr, 1);
}
More information about the Bf-blender-cvs
mailing list