[Bf-blender-cvs] [2ae9183f4bb] soc-2020-custom-menus: Custom Menus : fix pie menu buttons

TempoDev noreply at git.blender.org
Thu Jul 30 03:22:23 CEST 2020


Commit: 2ae9183f4bb109748bdff9a62df426ef568a2adb
Author: TempoDev
Date:   Thu Jul 30 01:21:01 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB2ae9183f4bb109748bdff9a62df426ef568a2adb

Custom Menus : fix pie menu buttons

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

M	release/scripts/modules/rna_user_menus_ui.py
M	release/scripts/startup/bl_operators/userpref.py
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.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 b86b4200a16..749692b9cc2 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -50,12 +50,12 @@ def get_keymap(context, index):
                 if kmi.properties.index == index:
                     return kmi
     km = context.window_manager.keyconfigs.user.keymaps['Window']
-    kmi = km.keymap_items.new("wm.call_user_menu",'RIGHTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
+    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):
+def draw_button(context, box, item, index):
     prefs = context.preferences
     um = prefs.user_menus
 
@@ -70,8 +70,8 @@ def draw_button(context, box, item):
     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')
+        if um.active_group.is_pie and index >= 0:
+            row.operator("preferences.pie_menuitem_add", text="", icon='ADD').index = index
             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')
@@ -81,7 +81,7 @@ def draw_button(context, box, item):
 
 def draw_item(context, box, items):
     for umi in items:
-        draw_button(context, box, umi)
+        draw_button(context, box, umi, -1)
 
 def draw_item_box(context, row):
     prefs = context.preferences
@@ -99,20 +99,16 @@ def draw_item_box(context, row):
     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_add", text="", icon='ADD').index = -1
     col.operator("preferences.menuitem_remove", text="", icon='REMOVE')
     col.operator("preferences.menuitem_up", text="", icon='TRIA_UP')
     col.operator("preferences.menuitem_down", text="", icon='TRIA_DOWN')
     row.separator()
 
-def draw_pie_item(context, col, items, label):
-    prefs = context.preferences
-    um = prefs.user_menus
-
+def draw_pie_item(context, col, items, label, index):
     row = col.row()
-    #subrow = row.split(factor=0.1)
     row.label(text=label)
-    draw_button(context, row, items)
+    draw_button(context, row, items, index)
 
 def draw_pie(context, row):
     prefs = context.preferences
@@ -122,14 +118,14 @@ def draw_pie(context, row):
     if not cm:
         return
     col = row.column()
-    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 : ")
+    draw_pie_item(context, col, cm.menu_items[0], "Left : ", 0)
+    draw_pie_item(context, col, cm.menu_items[1], "Right : ", 1)
+    draw_pie_item(context, col, cm.menu_items[2], "Down : ", 2)
+    draw_pie_item(context, col, cm.menu_items[3], "Up : ", 3)
+    draw_pie_item(context, col, cm.menu_items[4], "Upper left : ", 4)
+    draw_pie_item(context, col, cm.menu_items[5], "Upper right : ", 5)
+    draw_pie_item(context, col, cm.menu_items[6], "Lower left : ", 6)
+    draw_pie_item(context, col, cm.menu_items[7], "Lower right : ", 7)
     row.separator()
         
 
@@ -217,25 +213,6 @@ def menu_id(context, umg):
         i = i + 1
     return -1
 
-    
-def ensure_keymap(context):
-    prefs = context.preferences
-    um = prefs.user_menus
-    umg = um.active_group
-    index = menu_id(context, umg)
-
-    for km in context.window_manager.keyconfigs.user.keymaps:
-        for kmi in km.keymap_items:
-            if kmi.idname == "wm.call_user_menu":
-                if kmi.properties.index == index:
-                    umg.set_keymap(kmi=kmi)
-    if not umg.keymap:
-        km = context.window_manager.keyconfigs.user.keymaps['Window']
-        kmi = km.keymap_items.new("wm.call_user_menu",'RIGHTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-        kmi.properties.index = index
-        kmi.active = True
-        umg.set_keymap(kmi=kmi)
-
 
 def draw_user_menus(context, layout):
     prefs = context.preferences
@@ -243,13 +220,10 @@ def draw_user_menus(context, layout):
 
     if not um.active_group:
         um.active_group = um.menus[0]
-    if not um.active_group.keymap:
-        ensure_keymap(context)
 
     split = layout.split(factor=0.4)
 
     row = split.row()
-    col = layout.column()
 
     rowsub = row.row(align=True)
     rowsub.menu("USERPREF_MT_menu_select", text=um.active_group.name)
@@ -267,12 +241,10 @@ def draw_user_menus(context, layout):
     #rowsub.operator("preferences.keyconfig_export", text="", icon='EXPORT')
 
     row = layout.row()
-    col = layout.column()
 
     layout.separator()
     draw_user_menu_preference(context=context, layout=row)
 
-    col = layout.column()
     row = layout.row()
 
     if um.active_group.is_pie:
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index 4a4e244d3fc..326f4d13792 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -1164,21 +1164,6 @@ class PREFERENCES_OT_studiolight_show(Operator):
 # -----------------------------------------------------------------------------
 # User Menus Operators
 
-class PREFERENCES_OT_usermenus_select(Operator):
-    bl_idname = "preferences.usermenus_select"
-    bl_label = "select user 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'}
-
-
 class PREFERENCES_OT_usermenus_select(Operator):
     bl_idname = "preferences.usermenus_select"
     bl_label = "select user menu to edit"
@@ -1222,11 +1207,13 @@ class PREFERENCES_OT_menuitem_add(Operator):
     bl_idname = "preferences.menuitem_add"
     bl_label = "Add User Menu Item"
 
+    index: IntProperty()
+
     def execute(self, context):
         prefs = context.preferences
         um = prefs.user_menus
 
-        um.item_add()
+        um.item_add(index=self.index)
         context.preferences.is_dirty = True
         return {'FINISHED'}
 
@@ -1236,16 +1223,16 @@ class PREFERENCES_OT_menuitem_remove(Operator):
     bl_idname = "preferences.menuitem_remove"
     bl_label = "Remove User Menu Item"
 
-    item_id: IntProperty(
-        name="Item Identifier",
-        description="Identifier of the item to remove",
-    )
-
     @classmethod
-    def poll(cls, context):
+    def poll(self, context):
         prefs = context.preferences
         um = prefs.user_menus
         can_remove = um.active_item
+        is_pie = um.active_group.is_pie
+
+        if is_pie and can_remove:
+            if not can_remove.parent:
+                return False
         return can_remove
 
     def execute(self, context):
@@ -1261,22 +1248,29 @@ class PREFERENCES_OT_menuitem_up(Operator):
     bl_idname = "preferences.menuitem_up"
     bl_label = "Move Up An User Menu Item"
 
-    item_id: IntProperty(
-        name="Item Identifier",
-        description="Identifier of the item to remove",
-    )
-
     @classmethod
-    def poll(cls, context):
+    def poll(self, context):
         prefs = context.preferences
         um = prefs.user_menus
         current = um.active_item
+        is_pie = um.active_group.is_pie
         if not current:
             return False
-        prev_item = current.prev
-        if prev_item or current.parent:
-            return True
-        return False
+        
+        if is_pie:
+            if not current.parent:
+                return False
+            prev_item = current.prev
+            if prev_item:
+                return True
+            if current.parent.item.parent:
+                return True
+            return False
+        else:
+            prev_item = current.prev
+            if prev_item or current.parent:
+                return True
+            return False
 
     def execute(self, context):
         prefs = context.preferences
@@ -1291,22 +1285,29 @@ class PREFERENCES_OT_menuitem_down(Operator):
     bl_idname = "preferences.menuitem_down"
     bl_label = "Move Up An User Menu Item"
 
-    item_id: IntProperty(
-        name="Item Identifier",
-        description="Identifier of the item to remove",
-    )
-
     @classmethod
-    def poll(cls, context):
+    def poll(self, context):
         prefs = context.preferences
         um = prefs.user_menus
+        is_pie = um.active_group.is_pie
         current = um.active_item
         if not current:
             return False
-        next_item = current.next
-        if next_item or current.parent:
-            return True
-        return False
+        
+        if is_pie:
+            if not current.parent:
+                return False
+            next_item = current.next
+            if next_item:
+                return True
+            if current.parent.item.parent:
+                return True
+            return False
+        else:
+            next_item = current.next
+            if next_item or current.parent:
+                return True
+            return False
 
     def execute(self, context):
         prefs = context.preferences
@@ -1315,6 +1316,21 @@ class PREFERENCES_OT_menuitem_down(Operator):
         context.preferences.is_dirty = True
         return {'FINISHED'}
 
+class PREFERENCES_OT_pie_menuitem_add(Operator):
+    "

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list