[Bf-blender-cvs] [7f7a7efc626] soc-2020-custom-menus: Custom Menu: restruct rna and change enum button to button collection
TempoDev
noreply at git.blender.org
Tue Jun 23 12:38:36 CEST 2020
Commit: 7f7a7efc626a01421400a86f5bbeb25b4bbb1266
Author: TempoDev
Date: Tue Jun 23 12:27:22 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB7f7a7efc626a01421400a86f5bbeb25b4bbb1266
Custom Menu: restruct rna and change enum button to button collection
===================================================================
M release/datafiles/userdef/userdef_default.c
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/makesdna/DNA_userdef_types.h
M source/blender/makesrna/intern/rna_userdef.c
===================================================================
diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c
index 31d0eb8e923..cdbaff555be 100644
--- a/release/datafiles/userdef/userdef_default.c
+++ b/release/datafiles/userdef/userdef_default.c
@@ -232,5 +232,10 @@ const UserDef U_default = {
.runtime =
{
.is_dirty = 0,
+
+ .um_space_select = 1,
+ .um_context_select = 0,
+ .um_item_select = NULL,
+ .um_buttons = {NULL},
},
};
diff --git a/release/scripts/modules/rna_user_menus_ui.py b/release/scripts/modules/rna_user_menus_ui.py
index 879cf8858af..400f7e867d0 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -26,6 +26,19 @@ import bpy
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):
+ 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 == "MENU":
+ sub_box = box.box()
+ draw_item(context, sub_box, items.subbut)
+
def draw_item_box(context, row):
prefs = context.preferences
um = prefs.user_menus
@@ -36,7 +49,15 @@ def draw_item_box(context, row):
has_item = um.has_item()
if not has_item :
box_col.label(text="none")
- box_col.prop(um, "item_selected", expand=True)
+ #box_col.prop(um, "item_selected", expand=True)
+ um.buttons_refresh()
+ for items in um.buttons:
+ name = items.item.name
+ if items.item.type == "SEPARATOR":
+ name = "___________"
+ box_col.prop(items, "pressed", text=name, toggle=1)
+ if items.item.type == "MENU":
+ sub_box = box_col.box()
row = row.split(factor=0.9, align=True)
col = row.column(align=True)
@@ -54,16 +75,17 @@ def draw_item_editor(context, row):
col = row.column()
has_item = um.has_item()
+ current = um.active_item
if not has_item :
col.label(text="No item in this list.")
col.label(text="Add one or choose another list to get started")
- elif (um.sitem_id() >= 0):
- type = um.sitem_type()
- col.prop(um, "item_type")
- if (type != "SEPARATOR"):
- col.prop(um, "item_name")
- if (type == "OPERATOR"):
- col.prop(um, "item_operator")
+ elif current:
+ col.prop(current, "type")
+ if (current.type != "SEPARATOR"):
+ col.prop(current, "name")
+ if (current.type == "OPERATOR"):
+ umi_op = current.get_operator()
+ col.prop(umi_op, "operator")
else :
col.label(text="No item selected.")
@@ -105,7 +127,7 @@ def draw_user_menus(context, layout):
col = layout.column()
row = layout.row()
-
+
draw_item_box(context=context, row=row)
draw_item_editor(context=context, row=row)
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index 5eca40aeb7b..9c5e7210a54 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -1184,7 +1184,7 @@ class PREFERENCES_OT_menuitem_remove(Operator):
def poll(cls, context):
prefs = context.preferences
um = prefs.user_menus
- can_remove = um.sitem_id() >= 0
+ can_remove = um.active_item
return can_remove
def execute(self, context):
@@ -1208,8 +1208,13 @@ class PREFERENCES_OT_menuitem_up(Operator):
def poll(cls, context):
prefs = context.preferences
um = prefs.user_menus
- can_move_up = um.sitem_id() > 0
- return can_move_up
+ current = um.active_item
+ if not current:
+ return False
+ prev_item = current.prev
+ if prev_item:
+ return True
+ return False
def execute(self, context):
prefs = context.preferences
@@ -1232,9 +1237,13 @@ class PREFERENCES_OT_menuitem_down(Operator):
def poll(cls, context):
prefs = context.preferences
um = prefs.user_menus
- id = um.sitem_id()
- can_move_down = id >= 0 and id + 1 < um.items_len()
- return can_move_down
+ current = um.active_item
+ if not current:
+ return False
+ next_item = current.next
+ if next_item:
+ return True
+ return False
def execute(self, context):
prefs = context.preferences
@@ -1243,7 +1252,6 @@ class PREFERENCES_OT_menuitem_down(Operator):
context.preferences.is_dirty = True
return {'FINISHED'}
-
classes = (
PREFERENCES_OT_addon_disable,
PREFERENCES_OT_addon_enable,
@@ -1274,4 +1282,4 @@ classes = (
PREFERENCES_OT_menuitem_remove,
PREFERENCES_OT_menuitem_up,
PREFERENCES_OT_menuitem_down,
-)
+)
\ No newline at end of file
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d3c391a1595..934be16ccaf 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -10330,6 +10330,10 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
/* Clear runtime data. */
user->runtime.is_dirty = false;
user->edit_studio_light = 0;
+ user->runtime.um_space_select = 1;
+ user->runtime.um_context_select = 1;
+ user->runtime.um_item_select = NULL;
+ BLI_listbase_clear(&user->runtime.um_buttons);
/* free fd->datamap again */
oldnewmap_clear(fd->datamap);
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 635eb683cf2..72bbc4f4dd7 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -518,6 +518,13 @@ typedef struct bPathCompare {
char _pad0[7];
} bPathCompare;
+typedef struct bUserMenusGroup {
+ struct bUserMenuGroup *next, *prev;
+ char name[64];
+ /* bUserMenu */
+ ListBase menus;
+} bUserMenusGroup;
+
typedef struct bUserMenu {
struct bUserMenu *next, *prev;
char space_type;
@@ -556,6 +563,15 @@ typedef struct bUserMenuItem_Prop {
char _pad0[4];
} bUserMenuItem_Prop;
+typedef struct bUserMenuItem_But {
+ struct bUserMenuItem_But *next, *prev;
+ struct bUserMenuItem *item;
+ int index;
+ unsigned char pressed;
+ char _pad0[3];
+ struct ListBase subbut;
+} bUserMenuItem_But;
+
enum {
USER_MENU_TYPE_SEP = 1,
USER_MENU_TYPE_OPERATOR = 2,
@@ -585,7 +601,14 @@ typedef struct WalkNavigation {
typedef struct UserDef_Runtime {
char is_dirty;
- char _pad0[7];
+
+ /* User menu editor runtime datas */
+ char um_space_select;
+ char um_context_select;
+ char _pad0[5];
+ struct bUserMenuItem *um_item_select;
+ /** #bUserMenuItem_But. */
+ struct ListBase um_buttons;
} UserDef_Runtime;
/**
@@ -880,14 +903,6 @@ typedef struct UserDef {
struct WalkNavigation walk_navigation;
- /** custom menu **/
- short um_space_select;
- short um_context_select;
- short um_item_select;
- short um_item_type;
- char um_item_name[64];
- char um_item_op[64];
-
/** 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 b7740e5e476..fe345650961 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1080,41 +1080,22 @@ static bUserMenu *rna_UserDef_usermenus_get_current(UserDef *userdef, bool ensur
const char **contexts_list = CTX_data_list_mode_string();
bUserMenu *bum = NULL;
- if (userdef->um_space_select > 0 && userdef->um_context_select >= 0) {
+ if (userdef->runtime.um_space_select > 0 && userdef->runtime.um_context_select >= 0) {
if (ensure)
bum = BKE_blender_user_menu_ensure(&userdef->user_menus,
- userdef->um_space_select,
- contexts_list[userdef->um_context_select]);
+ userdef->runtime.um_space_select,
+ contexts_list[userdef->runtime.um_context_select]);
else
bum = BKE_blender_user_menu_find(&userdef->user_menus,
- userdef->um_space_select,
- contexts_list[userdef->um_context_select]);
+ userdef->runtime.um_space_select,
+ contexts_list[userdef->runtime.um_context_select]);
}
return bum;
}
-static int rna_UserDef_usermenus_item_selected(UserDef *userdef)
+/*static bUserMenuItem *rna_UserDef_usermenus_get_current_item(UserDef *userdef)
{
- int id = userdef->um_item_select - 1;
- if (id < 0) return -1;
-
- bUserMenu *bum = rna_UserDef_usermenus_get_current(userdef, false);
- if (bum) {
-
- ListBase *lb = &bum->items;
- int i = 0;
- for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
- if (i == id)
- return id;
- }
- }
-
- return -1;
-}
-
-static bUserMenuItem *rna_UserDef_usermenus_get_current_item(UserDef *userdef)
-{
- int id = userdef->um_item_select - 1;
+ int id = userdef->runtime.um_item_select - 1;
if (id < 0) return NULL;
bUserMenu *bum = rna_UserDef_usermenus_get_current(userdef, false);
@@ -1129,7 +1110,7 @@ static bUserMenuItem *rna_UserDef_usermenus_get_current_item(UserDef *userdef)
}
return NULL;
-}
+}*/
static bool rna_UserDef_usermenus_has_item(UserDef *userdef)
{
@@ -1142,6 +1123,62 @@ static bool rna_UserDef_usermenus_has_item(UserDef *userdef)
return true;
}
+static void rna_UserDef_usermenus_buttons_delete(ListBase *lb, bUserMenuItem_But *umib)
+{
+ BLI_remlink(lb, umib);
+ MEM_freeN(umib);
+}
+
+static void rna_UserDef_usermenus_buttons_free_list(ListBase *lb)
+{
+ bUserMenuItem_B
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list