From 41176cd3d820649488ec5a5475d5dc7e97a01a59 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Jun 2018 12:08:08 +0200 Subject: UI: support adding menu's to favourites --- source/blender/editors/screen/screen_user_menu.c | 40 +++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/screen/screen_user_menu.c') diff --git a/source/blender/editors/screen/screen_user_menu.c b/source/blender/editors/screen/screen_user_menu.c index d942602c896..f36bceaa129 100644 --- a/source/blender/editors/screen/screen_user_menu.c +++ b/source/blender/editors/screen/screen_user_menu.c @@ -82,7 +82,7 @@ bUserMenu *ED_screen_user_menu_ensure(bContext *C) bUserMenuItem_Op *ED_screen_user_menu_item_find_operator( ListBase *lb, - wmOperatorType *ot, IDProperty *prop, short opcontext) + const wmOperatorType *ot, IDProperty *prop, short opcontext) { for (bUserMenuItem *umi = lb->first; umi; umi = umi->next) { if (umi->type == USER_MENU_TYPE_OPERATOR) { @@ -98,19 +98,45 @@ bUserMenuItem_Op *ED_screen_user_menu_item_find_operator( return NULL; } +struct bUserMenuItem_Menu *ED_screen_user_menu_item_find_menu( + struct ListBase *lb, + const struct MenuType *mt) +{ + for (bUserMenuItem *umi = lb->first; umi; umi = umi->next) { + if (umi->type == USER_MENU_TYPE_MENU) { + bUserMenuItem_Menu *umi_mt = (bUserMenuItem_Menu *)umi; + if (STREQ(mt->idname, umi_mt->mt_idname)) { + return umi_mt; + } + } + } + return NULL; +} + void ED_screen_user_menu_item_add_operator( ListBase *lb, const char *ui_name, - wmOperatorType *ot, IDProperty *prop, short opcontext) + const wmOperatorType *ot, const IDProperty *prop, short opcontext) { bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)BKE_blender_user_menu_item_add(lb, USER_MENU_TYPE_OPERATOR); umi_op->opcontext = opcontext; if (!STREQ(ui_name, ot->name)) { - BLI_strncpy(umi_op->item.ui_name, ui_name, OP_MAX_TYPENAME); + STRNCPY(umi_op->item.ui_name, ui_name); } - BLI_strncpy(umi_op->opname, ot->idname, OP_MAX_TYPENAME); + STRNCPY(umi_op->opname, ot->idname); umi_op->prop = prop ? IDP_CopyProperty(prop) : NULL; } +void ED_screen_user_menu_item_add_menu( + ListBase *lb, const char *ui_name, + const MenuType *mt) +{ + bUserMenuItem_Menu *umi_mt = (bUserMenuItem_Menu *)BKE_blender_user_menu_item_add(lb, USER_MENU_TYPE_MENU); + if (!STREQ(ui_name, mt->idname)) { + STRNCPY(umi_mt->item.ui_name, ui_name); + } + STRNCPY(umi_mt->mt_idname, mt->idname); +} + void ED_screen_user_menu_item_remove(ListBase *lb, bUserMenuItem *umi) { BLI_remlink(lb, umi); @@ -144,6 +170,12 @@ static void screen_user_menu_draw(const bContext *C, Menu *menu) menu->layout, umi_op->opname, umi->ui_name[0] ? umi->ui_name : NULL, ICON_NONE, prop, umi_op->opcontext, 0, NULL); } + else if (umi->type == USER_MENU_TYPE_MENU) { + bUserMenuItem_Menu *umi_mt = (bUserMenuItem_Menu *)umi; + uiItemM( + menu->layout, NULL, umi_mt->mt_idname, umi->ui_name[0] ? umi->ui_name : NULL, + ICON_NONE); + } else if (umi->type == USER_MENU_TYPE_SEP) { uiItemS(menu->layout); } -- cgit v1.2.3