[Bf-blender-cvs] [cd610269dc7] soc-2020-custom-menus: Custom Menus : add user menus group You can now create differents menus
TempoDev
noreply at git.blender.org
Sun Jul 19 23:49:50 CEST 2020
Commit: cd610269dc7b5309224a5534f6c57b7015c3ce8e
Author: TempoDev
Date: Sun Jul 19 23:49:27 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rBcd610269dc7b5309224a5534f6c57b7015c3ce8e
Custom Menus : add user menus group
You can now create differents menus
===================================================================
M release/scripts/modules/rna_user_menus_ui.py
M release/scripts/presets/keyconfig/keymap_data/blender_default.py
M release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
M release/scripts/startup/bl_operators/presets.py
M release/scripts/startup/bl_operators/userpref.py
M release/scripts/startup/bl_operators/wm.py
M release/scripts/startup/bl_ui/space_userpref.py
M source/blender/blenkernel/BKE_blender_user_menu.h
M source/blender/blenkernel/intern/blender.c
M source/blender/blenkernel/intern/blender_user_menu.c
M source/blender/blenkernel/intern/blendfile.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/editors/include/ED_screen.h
M source/blender/editors/interface/interface_context_menu.c
M source/blender/editors/screen/screen_user_menu.c
M source/blender/makesdna/DNA_userdef_types.h
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 07ad11d8335..e1868333ea5 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -27,29 +27,44 @@ from bpy.app.translations import pgettext_iface as iface_
from bpy.app.translations import contexts as i18n_contexts
-def draw_button(context, box, items):
+def _indented_layout(layout, level):
+ indentpx = 16
+ if level == 0:
+ level = 0.0001 # Tweak so that a percentage of 0 won't split by half
+ indent = level * indentpx / bpy.context.region.width
+
+ split = layout.split(factor=indent)
+ col = split.column()
+ col = split.column()
+ return col
+
+def draw_button(context, box, item):
prefs = context.preferences
um = prefs.user_menus
- name = items.item.name
+ name = item.name
+ if name == "":
+ name = " "
+ item.is_selected = item == um.active_item
col = box.column(align=True)
row = col.row(align=True)
- if items.item.type == "SEPARATOR":
+ if item.type == "SEPARATOR":
name = "___________"
- row.prop(items, "pressed", text=name, toggle=1)
- if items.item.type == "SUBMENU":
- if um.is_pie:
+ row.prop(item, "is_selected", text=name, toggle=1)
+ if item.type == "SUBMENU":
+ sm = item.get_submenu()
+ if um.active_group.is_pie:
row.operator("preferences.menuitem_add", text="", icon='ADD')
row.operator("preferences.menuitem_remove", text="", icon='REMOVE')
row.operator("preferences.menuitem_up", text="", icon='TRIA_UP')
row.operator("preferences.menuitem_down", text="", icon='TRIA_DOWN')
sub_box = col.box()
sub_box = sub_box.column(align=True)
- draw_item(context, sub_box, items.subbut)
+ draw_item(context, sub_box, sm.items_list)
-def draw_item(context, box, but_list):
- for items in but_list:
- draw_button(context, box, items)
+def draw_item(context, box, items):
+ for umi in items:
+ draw_button(context, box, umi)
def draw_item_box(context, row):
prefs = context.preferences
@@ -61,8 +76,8 @@ def draw_item_box(context, row):
has_item = um.has_item()
if not has_item:
box_col.label(text="none")
- um.buttons_refresh()
- draw_item(context, box_col, um.buttons)
+ else:
+ draw_item(context, box_col, um.get_current_menu().menu_items)
row = row.split(factor=0.9, align=True)
col = row.column(align=True)
@@ -86,16 +101,18 @@ def draw_pie(context, row):
prefs = context.preferences
um = prefs.user_menus
+ cm = um.get_current_menu()
+ if not cm:
+ return
col = row.column()
- um.buttons_refresh()
- draw_pie_item(context, col, um.buttons[0], "Left : ")
- draw_pie_item(context, col, um.buttons[1], "Right : ")
- draw_pie_item(context, col, um.buttons[2], "Down : ")
- draw_pie_item(context, col, um.buttons[3], "Up : ")
- draw_pie_item(context, col, um.buttons[4], "Upper left : ")
- draw_pie_item(context, col, um.buttons[5], "Upper right : ")
- draw_pie_item(context, col, um.buttons[6], "Lower left : ")
- draw_pie_item(context, col, um.buttons[7], "Lower right : ")
+ draw_pie_item(context, col, cm.menu_items[0], "Left : ")
+ draw_pie_item(context, col, cm.menu_items[1], "Right : ")
+ draw_pie_item(context, col, cm.menu_items[2], "Down : ")
+ draw_pie_item(context, col, cm.menu_items[3], "Up : ")
+ draw_pie_item(context, col, cm.menu_items[4], "Upper left : ")
+ draw_pie_item(context, col, cm.menu_items[5], "Upper right : ")
+ draw_pie_item(context, col, cm.menu_items[6], "Lower left : ")
+ draw_pie_item(context, col, cm.menu_items[7], "Lower right : ")
row.separator()
@@ -123,14 +140,34 @@ def draw_item_editor(context, row):
else:
col.label(text="No item selected.")
+def draw_user_menu_preference(context, layout):
+ prefs = context.preferences
+ um = prefs.user_menus
+ umg = um.active_group
+ kmi = umg.keymap
+
+ col = _indented_layout(layout, 0)
+ row = col.row()
+
+ row.prop(um, "expanded", text="", emboss=False)
+
+ row.prop(umg, "name")
+ pie_text = "List"
+ if umg.is_pie:
+ pie_text = "Pie"
+ row.prop(umg, "is_pie", text=pie_text, toggle=True)
+
+ #row.prop(kmi, )
+
+
+
def draw_user_menus(context, layout):
prefs = context.preferences
um = prefs.user_menus
- menu_name_active = None
- if not menu_name_active:
- menu_name_active = "Quick favourites"
+ if not um.active_group:
+ um.active_group = um.menus[0]
split = layout.split(factor=0.4)
@@ -138,10 +175,9 @@ def draw_user_menus(context, layout):
col = layout.column()
rowsub = row.row(align=True)
- rowsub.menu("USERPREF_MT_menu_select", text=menu_name_active)
- rowsub.operator("wm.keyconfig_preset_add", text="", icon='ADD')
- rowsub.operator("wm.keyconfig_preset_add", text="",
- icon='REMOVE').remove_active = True
+ rowsub.menu("USERPREF_MT_menu_select", text=um.active_group.name)
+ rowsub.operator("preferences.usermenus_add", text="", icon='ADD')
+ rowsub.operator("preferences.usermenus_remove", text="", icon='REMOVE')
rowsub = split.row(align=True)
rowsub.prop(um, "space_selected", text="")
@@ -149,25 +185,20 @@ def draw_user_menus(context, layout):
rowsub = split.row(align=True)
rowsub.prop(um, "context_selected", text="")
- rowsub = split.row(align=True)
- rowsub.operator("preferences.keyconfig_import", text="", icon='IMPORT')
- rowsub.operator("preferences.keyconfig_export", text="", icon='EXPORT')
+ #rowsub = split.row(align=True)
+ #rowsub.operator("preferences.keyconfig_import", text="", icon='IMPORT')
+ #rowsub.operator("preferences.keyconfig_export", text="", icon='EXPORT')
row = layout.row()
col = layout.column()
- rowsub = row.split(factor=0.4, align=True)
layout.separator()
- # TODO : set menu parameters in a submenu here
- pie_text = "List"
- if um.is_pie:
- pie_text = "Pie"
- rowsub.prop(um, "is_pie", text=pie_text, toggle=True)
+ draw_user_menu_preference(context=context, layout=row)
col = layout.column()
row = layout.row()
- if um.is_pie:
+ if um.active_group.is_pie:
draw_pie(context=context, row=row)
else:
draw_item_box(context=context, row=row)
@@ -175,13 +206,13 @@ def draw_user_menus(context, layout):
layout.separator()
- km = bpy.context.window_manager.keyconfigs.user.keymaps['Window']
- for kmi in km.keymap_items:
- if kmi.idname == "wm.call_menu":
- if um.is_pie and kmi.properties.name == "SCREEN_MT_user_menu":
- kmi.idname = "wm.call_menu_pie"
- kmi.properties.name = "PIE_MT_user_menu"
- if kmi.idname == "wm.call_menu_pie":
- if kmi.properties.name == "PIE_MT_user_menu" and not um.is_pie:
- kmi.idname = "wm.call_menu"
- kmi.properties.name = "SCREEN_MT_user_menu"
+ #km = bpy.context.window_manager.keyconfigs.user.keymaps['Window']
+ #for kmi in km.keymap_items:
+ # if kmi.idname == "wm.call_menu":
+ # if um.is_pie and kmi.properties.name == "SCREEN_MT_user_menu":
+ # kmi.idname = "wm.call_menu_pie"
+ # kmi.properties.name = "PIE_MT_user_menu"
+ # if kmi.idname == "wm.call_menu_pie":
+ # if kmi.properties.name == "PIE_MT_user_menu" and not um.is_pie:
+ # kmi.idname = "wm.call_menu"
+ # kmi.properties.name = "SCREEN_MT_user_menu"
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index dbfc9daca84..6b10457cde1 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -153,6 +153,8 @@ def op_menu(menu, kmi_args):
def op_menu_pie(menu, kmi_args):
return ("wm.call_menu_pie", kmi_args, {"properties": [("name", menu)]})
+def op_user_menu(menu, kmi_args):
+ return ("wm.call_user_menu", kmi_args, {"properties": [("index", menu)]})
def op_panel(menu, kmi_args, kmi_data=()):
return ("wm.call_panel", kmi_args, {"properties": [("name", menu), *kmi_data]})
@@ -403,7 +405,7 @@ def km_window(params):
("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "ctrl": True}, None),
# Quick menu and toolbar
- op_menu("SCREEN_MT_user_menu", {"type": 'Q', "value": 'PRESS'}),
+ op_user_menu(0, {"type": 'Q', "value": 'PRESS'}),
# Fast editor switching
*(
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index 4cb6cefc960..1fb6baa9a2d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -67,6 +67,8 @@ def op_menu(menu, kmi_args):
def op_menu_pie(menu, kmi_args):
return ("wm.call_menu_pie", kmi_args, {"properties": [("name", menu)]})
+def op_user_menu(menu, kmi_args):
+ return ("wm.call_user_menu", kmi_args, {"properties": [("index", menu)]})
def op_panel(menu, kmi_args, kmi_data=()):
return ("wm.call_panel", kmi_args, {"properties": [("name", menu), *kmi_data]})
@@ -210,7 +212,7 @@ def km_window(params):
("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "ctrl": True}, None),
# Quick menu and toolbar
- op_menu("SCREEN_MT_user_menu", {"type": 'TAB', "value": 'PRESS', "shift": True}),
+ op_user_menu(0, {"type": 'TAB', "value": 'PRESS', "shift": True}),
# NDOF settings
op_panel("USERPREF_PT_ndof_settings", {"type": 'NDOF_BUTTON_MENU', "value": 'PRESS'}),
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 6d0ac8b3fdb..357d08959fc 100644
--- a/release/scripts/startup/bl_operators/pres
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list