[Bf-blender-cvs] [717dfa198c2] soc-2020-custom-menus: Custom Menu: link space and context choices to the menus selector

TempoDev noreply at git.blender.org
Sat Jun 6 20:58:03 CEST 2020


Commit: 717dfa198c259cd07e633c09b9c0ae283a08366f
Author: TempoDev
Date:   Sat Jun 6 20:57:32 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB717dfa198c259cd07e633c09b9c0ae283a08366f

Custom Menu: link space and context choices to the menus selector

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

M	release/scripts/modules/rna_custom_menu_ui.py
M	release/scripts/startup/bl_operators/presets.py
M	release/scripts/startup/bl_operators/userpref.py
M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/intern/context.c
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 c085b67ef0f..e6ef7d9312d 100644
--- a/release/scripts/modules/rna_custom_menu_ui.py
+++ b/release/scripts/modules/rna_custom_menu_ui.py
@@ -138,8 +138,8 @@ def draw_kmi(display_keymaps, kc, km, kmi, layout, level):
                 draw_km(display_keymaps, kc, kmm, None, layout, level + 1)
                 layout.context_pointer_set("keymap", km)
 
-def draw_shortcut(context, layout):
-    display_keymaps = keyconfig_merge(kc_user, kc_user)
+#def draw_shortcut(context, layout):
+    #display_keymaps = keyconfig_merge(kc_user, kc_user)
 
 def draw_custom_menu(context, layout):
     from bl_keymap_utils.io import keyconfig_merge
@@ -149,14 +149,13 @@ def draw_custom_menu(context, layout):
     kc_active = wm.keyconfigs.active
     spref = context.space_data
 
+    prefs = context.preferences
+    cm = prefs.custom_menu
+
     menu_name_active = None
     if not menu_name_active:
         menu_name_active = "Quick favourites"
 
-    space_name_active = None
-    if not space_name_active:
-        space_name_active = "3D View"
-
     spacesub_name_active = None
     if not spacesub_name_active:
         spacesub_name_active = "Edit Mode (Mesh)"
@@ -168,18 +167,19 @@ def draw_custom_menu(context, layout):
     split = layout.split(factor=0.4)
 
     row = split.row()
+    col = layout.column()
 
     rowsub = row.row(align=True)
-    rowsub.menu("USERPREF_MT_keyconfigs", text=menu_name_active)
+    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 = split.row(align=True)
-    rowsub.menu("USERPREF_MT_keyconfigs", text=space_name_active)
+    rowsub.prop(cm, "cm_space_selected", text="")
 
 
     rowsub = split.row(align=True)
-    rowsub.menu("USERPREF_MT_keyconfigs", text=spacesub_name_active)
+    rowsub.prop(cm, "cm_context_selected", text="")
 
     rowsub = split.row(align=True)
     rowsub.operator("preferences.keyconfig_import", text="", icon='IMPORT')
@@ -195,7 +195,7 @@ def draw_custom_menu(context, layout):
     rowsub.menu("USERPREF_MT_keyconfigs", text=type_name_active)
     rowsub = row.row(align=True)
     rowsub.label(text="Shortcut :")
-    draw_shortcut(context, layout)
+    #draw_shortcut(context, layout)
 
     row = layout.row()
     col = layout.column()
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index c83d0b9f4d8..58ef8e6d91c 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -600,6 +600,27 @@ class AddPresetOperator(AddPresetBase, Operator):
         prefix, suffix = operator.split("_OT_", 1)
         return os.path.join("operator", "%s.%s" % (prefix.lower(), suffix))
 
+class AddPresetCustomMenu(AddPresetBase, Operator):
+    """Add or remove a custom menu"""
+    bl_idname = "wm.custom_menu_preset_add"
+    bl_label = "Add Custom Menu Preset"
+    preset_menu = "USERPREF_MT_menu_select"
+    preset_subdir = "custom_menu_editor"
+
+    def add(self, _context, filepath):
+        bpy.ops.preferences.keyconfig_export(filepath=filepath)
+        bpy.utils.keyconfig_set(filepath)
+
+    def pre_cb(self, context):
+        keyconfigs = bpy.context.window_manager.keyconfigs
+        if self.remove_active:
+            preset_menu_class = getattr(bpy.types, self.preset_menu)
+            preset_menu_class.bl_label = keyconfigs.active.name
+
+    def post_cb(self, context):
+        keyconfigs = bpy.context.window_manager.keyconfigs
+        if self.remove_active:
+            keyconfigs.remove(keyconfigs.active)
 
 class WM_MT_operator_presets(Menu):
     bl_label = "Operator Presets"
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index 2e14df1920f..4743dc68712 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -1138,6 +1138,20 @@ class PREFERENCES_OT_studiolight_show(Operator):
         bpy.ops.screen.userpref_show('INVOKE_DEFAULT')
         return {'FINISHED'}
 
+class PREFERENCES_OT_custommenu_select(Operator):
+    bl_idname = "preferences.custommenu_select"
+    bl_label = "select custom menu to edit"
+
+    filepath: StringProperty(
+        subtype='FILE_PATH',
+    )
+
+    def execute(self, _context):
+        if bpy.utils.keyconfig_set(self.filepath, report=self.report):
+            return {'FINISHED'}
+        else:
+            return {'CANCELLED'}
+
 
 classes = (
     PREFERENCES_OT_addon_disable,
@@ -1164,4 +1178,5 @@ classes = (
     PREFERENCES_OT_studiolight_uninstall,
     PREFERENCES_OT_studiolight_copy_settings,
     PREFERENCES_OT_studiolight_show,
+    PREFERENCES_OT_custommenu_select,
 )
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 808f806a10f..4feba212c58 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1646,7 +1646,7 @@ class KeymapPanel:
 class USERPREF_MT_keyconfigs(Menu):
     bl_label = "KeyPresets"
     preset_subdir = "keyconfig"
-    preset_operator = "preferences.keyconfig_activate"
+    preset_operator = "preferences.custommenu_select"
 
     def draw(self, context):
         Menu.draw_preset(self, context)
@@ -1676,6 +1676,30 @@ class CustomMenuPanel:
     bl_region_type = 'WINDOW'
     bl_context = "custom_menu"
 
+class USERPREF_MT_menu_select(Menu):
+    bl_label = "Menu select"
+    preset_subdir = "custom_menu_editor"
+    preset_operator = "preferences.custommenu_select"
+
+    def draw(self, context):
+        Menu.draw_preset(self, context)
+
+class USERPREF_MT_menu_space_select(Menu):
+    bl_label = "Menu select"
+    preset_subdir = "custom_menu_editor"
+    preset_operator = "preferences.custommenu_select"
+
+    def draw(self, context):
+        Menu.draw_preset(self, context)
+
+class USERPREF_MT_menu_space_select(Menu):
+    bl_label = "Menu select"
+    preset_subdir = "custom_menu_editor"
+    preset_operator = "preferences.custommenu_select"
+
+    def draw(self, context):
+        Menu.draw_preset(self, context)
+
 class USERPREF_PT_custom_menu(CustomMenuPanel, Panel):
     bl_label = "custom_menu"
     bl_options = {'HIDE_HEADER'}
@@ -2238,6 +2262,7 @@ classes = (
     USERPREF_PT_navigation_fly_walk_gravity,
 
     USERPREF_PT_keymap,
+    USERPREF_MT_menu_select,
     USERPREF_PT_custom_menu,
     USERPREF_PT_addons,
 
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 70ca29d5795..1f44cb3e146 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -256,6 +256,7 @@ struct ViewLayer *CTX_data_view_layer(const bContext *C);
 struct RenderEngineType *CTX_data_engine_type(const bContext *C);
 struct ToolSettings *CTX_data_tool_settings(const bContext *C);
 
+const char **CTX_data_list_mode_string(void);
 const char *CTX_data_mode_string(const bContext *C);
 enum eContextObjectMode CTX_data_mode_enum_ex(const struct Object *obedit,
                                               const struct Object *ob,
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 8de12139306..f68166bca1c 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -1156,6 +1156,11 @@ const char *CTX_data_mode_string(const bContext *C)
   return data_mode_strings[CTX_data_mode_enum(C)];
 }
 
+const char **CTX_data_list_mode_string(void)
+{
+  return data_mode_strings;
+}
+
 void CTX_data_scene_set(bContext *C, Scene *scene)
 {
   C->data.scene = scene;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index d7dfea2105e..b95cf4c0da6 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -880,6 +880,10 @@ typedef struct UserDef {
 
   struct WalkNavigation walk_navigation;
 
+  /** custom menu **/
+  int cmspaceselect;
+  int cmcontextselect;
+
   /** The UI for the user preferences. */
   UserDef_SpaceData space_data;
   UserDef_FileSpaceData file_space_data;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index fca59b842e2..2897923acad 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -779,6 +779,73 @@ static const EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C
   return item;
 }
 
+static const EnumPropertyItem *rna_userdef_spacetypes_itemf(bContext *UNUSED(C),
+                                                              PointerRNA *UNUSED(ptr),
+                                                              PropertyRNA *UNUSED(prop),
+                                                              bool *r_free)
+{
+  int totitem = 0;
+  EnumPropertyItem *item = NULL;
+
+  int i;
+
+  const ListBase *spacetypes = BKE_spacetypes_list();
+  SpaceType *st = NULL;
+
+  for (i = 0, st = spacetypes->first; st; st = st->next, i++) {
+    EnumPropertyItem new_item = {i, st->name, 0, st->name, st->name};
+    RNA_enum_item_add(&item, &totitem, &new_item);
+  }
+
+#  ifndef NDEBUG
+  if (i == 0) {
+    EnumPropertyItem new_item = {i, "NO_SPACETYPE", 0, "No spacetype available", ""};
+    RNA_enum_item_add(&item, &totitem, &new_item);
+  }
+#  endif
+
+  /* may be unused */
+  UNUSED_VARS(audio_device_items);
+
+  RNA_enum_item_end(&item, &totitem);
+  *r_free = true;
+
+  return item;
+}
+
+static const EnumPropertyItem *rna_userdef_contexts_itemf(bContext *UNUSED(C),
+                                                              PointerRNA *UNUSED(ptr),
+                                                              PropertyRNA *UNUSED(prop),
+                                                              bool *r_free)
+{
+  int totitem = 0;
+  EnumPropertyItem *item = NULL;
+
+  i

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list