Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-06-30 13:08:08 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-06-30 13:08:08 +0300
commit41176cd3d820649488ec5a5475d5dc7e97a01a59 (patch)
tree31d8df071e656f1b629eefc4281c74d28ec2d639 /source/blender/editors/screen/screen_user_menu.c
parent62ff53ff19e36da0203915d04fc0ce295002f173 (diff)
UI: support adding menu's to favourites
Diffstat (limited to 'source/blender/editors/screen/screen_user_menu.c')
-rw-r--r--source/blender/editors/screen/screen_user_menu.c40
1 files changed, 36 insertions, 4 deletions
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);
}