[Bf-blender-cvs] [9fe9eb5240b] soc-2020-custom-menus: Custom Menus: pie menus: pie menu editor
TempoDev
noreply at git.blender.org
Mon Jul 6 02:00:56 CEST 2020
Commit: 9fe9eb5240b6ad07f14ec4ecbc2f0611a4456e36
Author: TempoDev
Date: Mon Jul 6 02:00:48 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB9fe9eb5240b6ad07f14ec4ecbc2f0611a4456e36
Custom Menus: pie menus: pie menu editor
===================================================================
M release/scripts/modules/rna_user_menus_ui.py
M release/scripts/startup/bl_operators/userpref.py
M release/scripts/startup/bl_ui/space_userpref.py
M source/blender/editors/include/ED_screen.h
M source/blender/editors/screen/screen_user_menu.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 7ab0d9060ec..07ad11d8335 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -27,20 +27,29 @@ from bpy.app.translations import pgettext_iface as iface_
from bpy.app.translations import contexts as i18n_contexts
-def draw_item(context, box, but_list):
+def draw_button(context, box, items):
prefs = context.preferences
um = prefs.user_menus
- for items in but_list:
- name = items.item.name
- if items.item.type == "SEPARATOR":
- name = "___________"
- box.prop(items, "pressed", text=name, toggle=1)
- if items.item.type == "SUBMENU":
- sub_box = box.box()
- sub_box = sub_box.column(align=True)
- draw_item(context, sub_box, items.subbut)
+ name = items.item.name
+ col = box.column(align=True)
+ row = col.row(align=True)
+ if items.item.type == "SEPARATOR":
+ name = "___________"
+ row.prop(items, "pressed", text=name, toggle=1)
+ if items.item.type == "SUBMENU":
+ if um.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)
+def draw_item(context, box, but_list):
+ for items in but_list:
+ draw_button(context, box, items)
def draw_item_box(context, row):
prefs = context.preferences
@@ -64,6 +73,31 @@ def draw_item_box(context, row):
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
+
+ row = col.row()
+ #subrow = row.split(factor=0.1)
+ row.label(text=label)
+ draw_button(context, row, items)
+
+def draw_pie(context, row):
+ prefs = context.preferences
+ um = prefs.user_menus
+
+ 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 : ")
+ row.separator()
+
def draw_item_editor(context, row):
prefs = context.preferences
@@ -133,7 +167,10 @@ def draw_user_menus(context, layout):
col = layout.column()
row = layout.row()
- draw_item_box(context=context, row=row)
+ if um.is_pie:
+ draw_pie(context=context, row=row)
+ else:
+ draw_item_box(context=context, row=row)
draw_item_editor(context=context, row=row)
layout.separator()
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index 9182f29b562..8869bf2da87 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -1278,7 +1278,6 @@ class PREFERENCES_OT_menuitem_down(Operator):
context.preferences.is_dirty = True
return {'FINISHED'}
-
classes = (
PREFERENCES_OT_addon_disable,
PREFERENCES_OT_addon_enable,
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index c4713227e3e..5bf2960500d 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1696,25 +1696,7 @@ class PIE_MT_user_menu(Menu):
layout = self.layout
pie = layout.menu_pie()
pie.scale_y = 1.2
- index = 0
- for item in menu.menu_items:
- if index > 8:
- break
- if item.type == "OPERATOR":
- op = item.get_operator()
- pie.operator(op.operator, text=item.name)
- if item.type == "MENU":
- pm = item.get_menu()
- pie.menu(pm.id_name, text=item.name)
- if item.type == "SUBMENU":
- sm = item.get_submenu()
- index = index - 1
- if item.type == "PROPERTY":
- sm = item.get_property()
- index = index - 1
- if item.type == "SEPARATOR":
- index = index - 1
- index = index + 1
+ menu.draw(context=context, layout=pie)
class USERPREF_PT_user_menus(UserMenusPanel, Panel):
bl_label = "user_menus"
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index e231293c7fe..41919312572 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -408,6 +408,10 @@ void ED_screen_user_menu_item_add_prop(struct bContext *C,
void ED_screen_user_menu_item_remove(struct ListBase *lb, struct bUserMenuItem *umi);
void ED_screen_user_menu_register(void);
+bool screen_user_menu_draw_items(struct bContext *C,
+ struct uiLayout *layout,
+ struct ListBase *lb,
+ bool is_pie);
/* Cache display helpers */
diff --git a/source/blender/editors/screen/screen_user_menu.c b/source/blender/editors/screen/screen_user_menu.c
index eafc3b73f0e..494b824aab9 100644
--- a/source/blender/editors/screen/screen_user_menu.c
+++ b/source/blender/editors/screen/screen_user_menu.c
@@ -241,24 +241,26 @@ void ED_screen_user_menu_item_remove(ListBase *lb, bUserMenuItem *umi)
/* -------------------------------------------------------------------- */
/** \name Menu Definition
* \{ */
-static bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase *lb);
static void screen_user_menu_draw_submenu(bContext *C, uiLayout *layout, void *arg)
{
ListBase *lb = (ListBase *)arg;
- screen_user_menu_draw_items(C, layout, lb);
+ screen_user_menu_draw_items(C, layout, lb, false);
}
-static bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase *lb)
+bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase *lb, bool is_pie)
{
/* Enable when we have the ability to edit menus. */
char label[512];
- const bool show_missing = true;
-
+ const bool show_missing = is_pie;
bool is_empty = true;
+ int i = 0;
+
LISTBASE_FOREACH (bUserMenuItem *, umi, lb) {
+ if (is_pie && i > 7)
+ return is_empty;
const char *ui_name = umi->ui_name[0] ? umi->ui_name : NULL;
if (umi->type == USER_MENU_TYPE_OPERATOR) {
bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi;
@@ -273,6 +275,7 @@ static bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase
SNPRINTF(label, "Missing: %s", umi_op->op_idname);
uiItemL(layout, label, ICON_NONE);
}
+ i--;
}
}
else if (umi->type == USER_MENU_TYPE_MENU) {
@@ -287,6 +290,7 @@ static bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase
SNPRINTF(label, "Missing: %s", umi_mt->mt_idname);
uiItemL(layout, label, ICON_NONE);
}
+ i--;
}
}
else if (umi->type == USER_MENU_TYPE_SUBMENU) {
@@ -334,11 +338,13 @@ static bool screen_user_menu_draw_items(bContext *C, uiLayout *layout, ListBase
SNPRINTF(label, "Missing: %s.%s", umi_pr->context_data_path, umi_pr->prop_id);
uiItemL(layout, label, ICON_NONE);
}
+ i--;
}
}
else if (umi->type == USER_MENU_TYPE_SEP) {
uiItemS(layout);
}
+ i++;
}
return is_empty;
}
@@ -353,7 +359,7 @@ static void screen_user_menu_draw(const bContext *C, Menu *menu)
if (um == NULL) {
continue;
}
- is_empty = screen_user_menu_draw_items(C, menu->layout, &um->items);
+ is_empty = screen_user_menu_draw_items(C, menu->layout, &um->items, true);
}
if (um_array) {
MEM_freeN(um_array);
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index f3bb6fc8515..f5f958611df 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1451,6 +1451,21 @@ static int rna_UserDef_usermenus_item_type_get(PointerRNA *ptr)
return 0;
}
+static void rna_UserDef_usermenus_pie_set(PointerRNA *ptr, int value)
+{
+ UserDef *userdef = (UserDef *)ptr->data;
+
+ LISTBASE_FOREACH (bUserMenu *, um, &userdef->user_menus) {
+ ListBase *lb = &um->items;
+ BKE_blender_user_menu_item_free_list(lb);
+ if (value)
+ for (int i = 0; i < 8; i++) {
+ bUserMenuItem *new_umi = BKE_blender_user_menu_item_add(lb, USER_MENU_TYPE_SEP);
+ }
+ }
+ userdef->runtime.um_is_pie = value;
+}
+
static void rna_UserDef_usermenus_item_op_set(PointerRNA *ptr, const char *value)
{
bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)ptr->data;
@@ -1471,6 +1486,11 @@ static void rna_UserDef_usermenus_item_op_set(PointerRNA *ptr, const char *value
free(opptr);
}
+static void rna_UserDef_usermenu_draw(bUserMenu *um, bContext *C, uiLayout *layout)
+{
+ screen_user_menu_draw_items(C, layout, &um->items, true);
+}
+
/* UserMenu.menu_items */
static void rna_UserDef_usermenu_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -6369,6 +6389,11 @@ static void rna_def_userdef_usermenus_items_subtypes(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UserDef_usermenus_item_op_set");
RNA_def_struct_name_property(srna, prop);
+ prop = RNA_def_property(srna, "prop", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "prop");
+ RNA_def_property_struct_type(prop
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list