UI: Expose force_menu in Python API #119029

Open
Leon Schittek wants to merge 1 commits from lone_noel/blender:menu-alignment into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
11 changed files with 23 additions and 16 deletions

View File

@ -165,7 +165,7 @@ void draw_menu_for_catalog(const bScreen &owner_screen,
uiLayout *col = uiLayoutColumn(&layout, false);
uiLayoutSetContextPointer(col, "asset_catalog_path", &path_ptr);
uiItemM(col, menu_name.c_str(), IFACE_(item.get_name().c_str()), ICON_NONE);
uiItemM(col, menu_name.c_str(), IFACE_(item.get_name().c_str()), ICON_NONE, false);
}
} // namespace blender::ed::asset

View File

@ -1106,7 +1106,7 @@ void ui_template_node_operator_asset_root_items(uiLayout &layout, const bContext
});
if (!tree->unassigned_assets.is_empty() || unassigned_local_poll(C)) {
uiItemM(&layout, "GEO_MT_node_operator_unassigned", "", ICON_FILE_HIDDEN);
uiItemM(&layout, "GEO_MT_node_operator_unassigned", "", ICON_FILE_HIDDEN, false);
}
}

View File

@ -2896,8 +2896,8 @@ void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, const char *name, int icon);
/**
* Menu.
*/
void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon);
void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon);
void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon, bool force_menu);
void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon, bool force_menu);
/**
* Menu contents.
*/

View File

@ -1058,7 +1058,7 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *ev
MenuType *mt_idtemplate_liboverride = WM_menutype_find("UI_MT_idtemplate_liboverride", true);
if (mt_idtemplate_liboverride && mt_idtemplate_liboverride->poll(C, mt_idtemplate_liboverride)) {
uiItemM_ptr(layout, mt_idtemplate_liboverride, IFACE_("Library Override"), ICON_NONE);
uiItemM_ptr(layout, mt_idtemplate_liboverride, IFACE_("Library Override"), ICON_NONE, false);
uiItemS(layout);
}

View File

@ -3046,7 +3046,7 @@ static uiBut *ui_item_menu(uiLayout *layout,
return but;
}
void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon)
void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon, bool force_menu)
{
uiBlock *block = layout->root->block;
bContext *C = static_cast<bContext *>(block->evil_C);
@ -3069,17 +3069,17 @@ void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon)
mt,
nullptr,
mt->description ? TIP_(mt->description) : "",
false);
force_menu);
}
void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon)
void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon, bool force_menu)
{
MenuType *mt = WM_menutype_find(menuname, false);
if (mt == nullptr) {
RNA_warning("not found %s", menuname);
return;
}
uiItemM_ptr(layout, mt, name, icon);
uiItemM_ptr(layout, mt, name, icon, force_menu);
}
void uiItemMContents(uiLayout *layout, const char *menuname)

View File

@ -2721,7 +2721,7 @@ static eAutoPropButsReturn template_operator_property_buts_draw_single(
block->ui_operator = op;
row = uiLayoutRow(layout, true);
uiItemM(row, "WM_MT_operator_presets", nullptr, ICON_NONE);
uiItemM(row, "WM_MT_operator_presets", nullptr, ICON_NONE, false);
wmOperatorType *ot = WM_operatortype_find("WM_OT_operator_preset_add", false);
uiItemFullO_ptr(row, ot, "", ICON_ADD, nullptr, WM_OP_INVOKE_DEFAULT, UI_ITEM_NONE, &op_ptr);

View File

@ -253,7 +253,8 @@ static void root_catalogs_draw(const bContext *C, Menu *menu)
uiItemM(layout,
"OBJECT_MT_add_modifier_unassigned_assets",
IFACE_("Unassigned"),
ICON_FILE_HIDDEN);
ICON_FILE_HIDDEN,
false);
}
}

View File

@ -259,7 +259,7 @@ static void screen_user_menu_draw(const bContext *C, Menu *menu)
bUserMenuItem_Menu *umi_mt = (bUserMenuItem_Menu *)umi;
MenuType *mt = WM_menutype_find(umi_mt->mt_idname, false);
if (mt != nullptr) {
uiItemM_ptr(menu->layout, mt, ui_name, ICON_NONE);
uiItemM_ptr(menu->layout, mt, ui_name, ICON_NONE, false);
is_empty = false;
}
else {

View File

@ -144,7 +144,7 @@ static int context_menu_invoke(bContext *C, wmOperator * /*op*/, const wmEvent *
uiPopupMenu *pup = UI_popup_menu_begin(C, IFACE_("Context Menu"), ICON_NONE);
uiLayout *layout = UI_popup_menu_layout(pup);
uiItemM(layout, "INFO_MT_area", nullptr, ICON_NONE);
uiItemM(layout, "INFO_MT_area", nullptr, ICON_NONE, false);
UI_popup_menu_end(C, pup);
return OPERATOR_INTERFACE;

View File

@ -284,7 +284,11 @@ static void add_root_catalogs_draw(const bContext *C, Menu *menu)
if (!tree.unassigned_assets.is_empty()) {
uiItemS(layout);
uiItemM(layout, "NODE_MT_node_add_unassigned_assets", IFACE_("Unassigned"), ICON_FILE_HIDDEN);
uiItemM(layout,
"NODE_MT_node_add_unassigned_assets",
IFACE_("Unassigned"),
ICON_FILE_HIDDEN,
false);
}
}

View File

@ -457,7 +457,8 @@ static void rna_uiItemM(uiLayout *layout,
const char *text_ctxt,
bool translate,
int icon,
int icon_value)
int icon_value,
bool force_menu)
{
/* Get translated name (label). */
name = rna_translate_ui_text(name, text_ctxt, nullptr, nullptr, translate);
@ -466,7 +467,7 @@ static void rna_uiItemM(uiLayout *layout,
icon = icon_value;
}
uiItemM(layout, menuname, name, icon);
uiItemM(layout, menuname, name, icon, force_menu);
}
static void rna_uiItemM_contents(uiLayout *layout, const char *menuname)
@ -1483,6 +1484,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED);
parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
RNA_def_boolean(func, "force_menu", false, "Force Menu", "Force button to be a menu button");
func = RNA_def_function(srna, "menu_contents", "rna_uiItemM_contents");
parm = RNA_def_string(func, "menu", nullptr, 0, "", "Identifier of the menu");