UI: avoid double operator type lookup
This commit is contained in:
@@ -1006,6 +1006,7 @@ void uiItemV(uiLayout *layout, const char *name, int icon, int argval); /* value
|
||||
void uiItemS(uiLayout *layout); /* separator */
|
||||
|
||||
void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg);
|
||||
void uiItemMenuEnumO_ptr(uiLayout *layout, struct bContext *C, struct wmOperatorType *ot, const char *propname, const char *name, int icon);
|
||||
void uiItemMenuEnumO(uiLayout *layout, struct bContext *C, const char *opname, const char *propname, const char *name, int icon);
|
||||
void uiItemMenuEnumR_prop(uiLayout *layout, struct PointerRNA *ptr, PropertyRNA *prop, const char *name, int icon);
|
||||
void uiItemMenuEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *name, int icon);
|
||||
|
||||
@@ -2016,19 +2016,15 @@ static void menu_item_enum_opname_menu(bContext *UNUSED(C), uiLayout *layout, vo
|
||||
UI_block_direction_set(layout->root->block, UI_DIR_DOWN);
|
||||
}
|
||||
|
||||
void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name, int icon)
|
||||
void uiItemMenuEnumO_ptr(
|
||||
uiLayout *layout, bContext *C, wmOperatorType *ot, const char *propname,
|
||||
const char *name, int icon)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
MenuItemLevel *lvl;
|
||||
uiBut *but;
|
||||
|
||||
UI_OPERATOR_ERROR_RET(ot, opname, return);
|
||||
|
||||
if (!ot->srna) {
|
||||
ui_item_disabled(layout, opname);
|
||||
RNA_warning("operator missing srna '%s'", opname);
|
||||
return;
|
||||
}
|
||||
/* Caller must check */
|
||||
BLI_assert(ot->srna != NULL);
|
||||
|
||||
if (name == NULL) {
|
||||
name = RNA_struct_ui_name(ot->srna);
|
||||
@@ -2038,7 +2034,7 @@ void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const ch
|
||||
icon = ICON_BLANK1;
|
||||
|
||||
lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
|
||||
BLI_strncpy(lvl->opname, opname, sizeof(lvl->opname));
|
||||
BLI_strncpy(lvl->opname, ot->idname, sizeof(lvl->opname));
|
||||
BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
|
||||
lvl->opcontext = layout->root->opcontext;
|
||||
|
||||
@@ -2058,6 +2054,23 @@ void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const ch
|
||||
}
|
||||
}
|
||||
|
||||
void uiItemMenuEnumO(
|
||||
uiLayout *layout, bContext *C, const char *opname, const char *propname,
|
||||
const char *name, int icon)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
|
||||
UI_OPERATOR_ERROR_RET(ot, opname, return);
|
||||
|
||||
if (!ot->srna) {
|
||||
ui_item_disabled(layout, opname);
|
||||
RNA_warning("operator missing srna '%s'", opname);
|
||||
return;
|
||||
}
|
||||
|
||||
uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
|
||||
}
|
||||
|
||||
static void menu_item_enum_rna_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)
|
||||
{
|
||||
MenuItemLevel *lvl = (MenuItemLevel *)(((uiBut *)arg)->func_argN);
|
||||
|
||||
@@ -213,8 +213,7 @@ static void rna_uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opnam
|
||||
/* Get translated name (label). */
|
||||
name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
|
||||
|
||||
/* XXX This will search operator again :( */
|
||||
uiItemMenuEnumO(layout, C, opname, propname, name, icon);
|
||||
uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
|
||||
}
|
||||
|
||||
static void rna_uiItemL(uiLayout *layout, const char *name, const char *text_ctxt, int translate,
|
||||
|
||||
Reference in New Issue
Block a user