reduce operator lookups in the UI (could do 4 hash lookups per button).

This commit is contained in:
Campbell Barton 2012-01-22 03:30:07 +00:00
parent 6964b5a6c4
commit b1667911ef
11 changed files with 212 additions and 121 deletions

@ -376,6 +376,10 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
bAction *act= ob->poselib; /* never NULL */ bAction *act= ob->poselib; /* never NULL */
TimeMarker *marker; TimeMarker *marker;
wmOperatorType *ot = WM_operatortype_find("POSELIB_OT_pose_add", 1);
BLI_assert(ot != NULL);
/* set the operator execution context correctly */ /* set the operator execution context correctly */
uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
@ -383,7 +387,7 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
for (marker= act->markers.first; marker; marker= marker->next) { for (marker= act->markers.first; marker; marker= marker->next) {
PointerRNA props_ptr; PointerRNA props_ptr;
props_ptr = uiItemFullO(layout, "POSELIB_OT_pose_add", props_ptr = uiItemFullO_ptr(layout, ot,
marker->name, ICON_ARMATURE_DATA, NULL, marker->name, ICON_ARMATURE_DATA, NULL,
WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);

@ -5876,8 +5876,8 @@ static int delete_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
if(obedit->type==OB_SURF) { if(obedit->type==OB_SURF) {
pup= uiPupMenuBegin(C, "Delete", ICON_NONE); pup= uiPupMenuBegin(C, "Delete", ICON_NONE);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
uiItemEnumO(layout, op->type->idname, NULL, 0, "type", 0); uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 0);
uiItemEnumO(layout, op->type->idname, NULL, 0, "type", 2); uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 2);
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);
} }
else { else {

@ -62,6 +62,7 @@ struct ColorBand;
struct CurveMapping; struct CurveMapping;
struct Image; struct Image;
struct ImageUser; struct ImageUser;
struct wmOperatorType;
struct uiWidgetColors; struct uiWidgetColors;
struct Tex; struct Tex;
struct MTex; struct MTex;
@ -446,6 +447,7 @@ uiBut *uiDefButBitC(uiBlock *block, int type, int bit, int retval, const char *s
uiBut *uiDefButR(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefButR(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip); uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefButO_ptr(uiBlock *block, int type, struct wmOperatorType *ot, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefButTextO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefButTextO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconBut(uiBlock *block, uiBut *uiDefIconBut(uiBlock *block,
@ -466,6 +468,7 @@ uiBut *uiDefIconButBitC(uiBlock *block, int type, int bit, int retval, int icon,
uiBut *uiDefIconButR(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefIconButR(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip); uiBut *uiDefIconButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefIconButO_ptr(uiBlock *block, int type, struct wmOperatorType *ot, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefIconTextBut(uiBlock *block, uiBut *uiDefIconTextBut(uiBlock *block,
int type, int retval, int icon, const char *str, int type, int retval, int icon, const char *str,
@ -485,6 +488,7 @@ uiBut *uiDefIconTextButBitC(uiBlock *block, int type, int bit, int retval, int i
uiBut *uiDefIconTextButR(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefIconTextButR(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, const char *propname, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip); uiBut *uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, float min, float max, float a1, float a2, const char *tip);
uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip); uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip);
uiBut *uiDefIconTextButO_ptr(uiBlock *block, int type, struct wmOperatorType *ot, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip);
/* for passing inputs to ButO buttons */ /* for passing inputs to ButO buttons */
struct PointerRNA *uiButGetOperatorPtrRNA(uiBut *but); struct PointerRNA *uiButGetOperatorPtrRNA(uiBut *but);
@ -773,6 +777,7 @@ void uiTemplateMarker(struct uiLayout *layout, struct PointerRNA *ptr, const cha
/* items */ /* items */
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname); void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname);
void uiItemEnumO_ptr(uiLayout *layout, struct wmOperatorType *ot, const char *name, int icon, const char *propname, int value);
void uiItemEnumO(uiLayout *layout, const char *opname, const char *name, int icon, const char *propname, int value); void uiItemEnumO(uiLayout *layout, const char *opname, const char *name, int icon, const char *propname, int value);
void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value); void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value);
void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value); void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value);
@ -781,6 +786,8 @@ void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *op
void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value); void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value);
void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, float value); void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, float value);
void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value); void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value);
PointerRNA uiItemFullO_ptr(uiLayout *layout, struct wmOperatorType *ot, const char *name, int icon, IDProperty *properties, int context, int flag);
PointerRNA uiItemFullO(uiLayout *layout, const char *idname, const char *name, int icon, struct IDProperty *properties, int context, int flag); PointerRNA uiItemFullO(uiLayout *layout, const char *idname, const char *name, int icon, struct IDProperty *properties, int context, int flag);
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon); void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon);

@ -2806,16 +2806,12 @@ static uiBut *ui_def_but_rna_propname(uiBlock *block, int type, int retval, cons
return but; return but;
} }
static uiBut *ui_def_but_operator(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip) static uiBut *ui_def_but_operator_ptr(uiBlock *block, int type, wmOperatorType *ot, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{ {
uiBut *but; uiBut *but;
wmOperatorType *ot;
ot= WM_operatortype_find(opname, 0);
if(!str) { if(!str) {
if(ot) str= ot->name; if(ot) str = ot->name;
else str= opname;
} }
if ((!tip || tip[0]=='\0') && ot && ot->description) { if ((!tip || tip[0]=='\0') && ot && ot->description) {
@ -2837,6 +2833,12 @@ static uiBut *ui_def_but_operator(uiBlock *block, int type, const char *opname,
return but; return but;
} }
static uiBut *UNUSED_FUNCTION(ui_def_but_operator)(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{
wmOperatorType *ot = WM_operatortype_find(opname, 0);
if (str == NULL && ot == NULL) str = opname;
return ui_def_but_operator_ptr(block, type, ot, opcontext, str, x1, y1, x2, y2, tip);
}
static uiBut *ui_def_but_operator_text(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip) static uiBut *ui_def_but_operator_text(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip)
{ {
@ -3043,13 +3045,20 @@ uiBut *uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int
ui_check_but(but); ui_check_but(but);
return but; return but;
} }
uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip)
uiBut *uiDefButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{ {
uiBut *but; uiBut *but;
but= ui_def_but_operator(block, type, opname, opcontext, str, x1, y1, x2, y2, tip); but= ui_def_but_operator_ptr(block, type, ot, opcontext, str, x1, y1, x2, y2, tip);
ui_check_but(but); ui_check_but(but);
return but; return but;
} }
uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{
wmOperatorType *ot = WM_operatortype_find(opname, 0);
if (str == NULL && ot == NULL) str = opname;
return uiDefButO_ptr(block, type, ot, opcontext, str, x1, y1, x2, y2, tip);
}
uiBut *uiDefButTextO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip) uiBut *uiDefButTextO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip)
{ {
@ -3121,13 +3130,19 @@ uiBut *uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x1
ui_check_but_and_iconize(but, icon); ui_check_but_and_iconize(but, icon);
return but; return but;
} }
uiBut *uiDefIconButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip)
uiBut *uiDefIconButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip)
{ {
uiBut *but; uiBut *but;
but= ui_def_but_operator(block, type, opname, opcontext, "", x1, y1, x2, y2, tip); but= ui_def_but_operator_ptr(block, type, ot, opcontext, "", x1, y1, x2, y2, tip);
ui_check_but_and_iconize(but, icon); ui_check_but_and_iconize(but, icon);
return but; return but;
} }
uiBut *uiDefIconButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, int x1, int y1, short x2, short y2, const char *tip)
{
wmOperatorType *ot = WM_operatortype_find(opname, 0);
return uiDefIconButO_ptr(block, type, ot, opcontext, icon, x1, y1, x2, y2, tip);
}
/* Button containing both string label and icon */ /* Button containing both string label and icon */
uiBut *uiDefIconTextBut(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip) uiBut *uiDefIconTextBut(uiBlock *block, int type, int retval, int icon, const char *str, int x1, int y1, short x2, short y2, void *poin, float min, float max, float a1, float a2, const char *tip)
@ -3195,14 +3210,19 @@ uiBut *uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, co
but->flag|= UI_ICON_LEFT; but->flag|= UI_ICON_LEFT;
return but; return but;
} }
uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip) uiBut *uiDefIconTextButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{ {
uiBut *but; uiBut *but;
but= ui_def_but_operator(block, type, opname, opcontext, str, x1, y1, x2, y2, tip); but= ui_def_but_operator_ptr(block, type, ot, opcontext, str, x1, y1, x2, y2, tip);
ui_check_but_and_iconize(but, icon); ui_check_but_and_iconize(but, icon);
but->flag|= UI_ICON_LEFT; but->flag|= UI_ICON_LEFT;
return but; return but;
} }
uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x1, int y1, short x2, short y2, const char *tip)
{
wmOperatorType *ot = WM_operatortype_find(opname, 0);
return uiDefIconTextButO_ptr(block, type, ot, opcontext, icon, str, x1, y1, x2, y2, tip);
}
/* END Button containing both string label and icon */ /* END Button containing both string label and icon */

@ -622,19 +622,12 @@ static void ui_item_disabled(uiLayout *layout, const char *name)
} }
/* operator items */ /* operator items */
PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, IDProperty *properties, int context, int flag) PointerRNA uiItemFullO_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, IDProperty *properties, int context, int flag)
{ {
uiBlock *block= layout->root->block; uiBlock *block= layout->root->block;
wmOperatorType *ot= WM_operatortype_find(opname, 1);
uiBut *but; uiBut *but;
int w; int w;
if(!ot) {
ui_item_disabled(layout, opname);
RNA_warning("unknown operator '%s'", opname);
return PointerRNA_NULL;
}
if(!name) { if(!name) {
name= IFACE_(ot->name); name= IFACE_(ot->name);
} }
@ -650,12 +643,18 @@ PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, i
if (flag & UI_ITEM_R_NO_BG) if (flag & UI_ITEM_R_NO_BG)
uiBlockSetEmboss(block, UI_EMBOSSN); uiBlockSetEmboss(block, UI_EMBOSSN);
if(icon && name[0]) /* create the button */
but= uiDefIconTextButO(block, BUT, ot->idname, context, icon, name, 0, 0, w, UI_UNIT_Y, NULL); if(icon) {
else if(icon) if (name[0]) {
but= uiDefIconButO(block, BUT, ot->idname, context, icon, 0, 0, w, UI_UNIT_Y, NULL); but = uiDefIconTextButO_ptr(block, BUT, ot, context, icon, name, 0, 0, w, UI_UNIT_Y, NULL);
else }
but= uiDefButO(block, BUT, ot->idname, context, name, 0, 0, w, UI_UNIT_Y, NULL); else {
but = uiDefIconButO_ptr(block, BUT, ot, context, icon, 0, 0, w, UI_UNIT_Y, NULL);
}
}
else {
but= uiDefButO_ptr(block, BUT, ot, context, name, 0, 0, w, UI_UNIT_Y, NULL);
}
assert(but->optype != NULL); assert(but->optype != NULL);
@ -687,55 +686,90 @@ PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, i
return PointerRNA_NULL; return PointerRNA_NULL;
} }
static const char *ui_menu_enumpropname(uiLayout *layout, const char *opname, const char *propname, int retval) PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, IDProperty *properties, int context, int flag)
{ {
wmOperatorType *ot= WM_operatortype_find(opname, 0); wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr;
PropertyRNA *prop;
if(!ot || !ot->srna) if(ot) {
return ""; return uiItemFullO_ptr(layout, ot, name, icon, properties, context, flag);
}
else {
ui_item_disabled(layout, opname);
RNA_warning("unknown operator '%s'", opname);
return PointerRNA_NULL;
}
}
RNA_pointer_create(NULL, ot->srna, NULL, &ptr); static const char *ui_menu_enumpropname(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int retval)
prop= RNA_struct_find_property(&ptr, propname); {
if(prop) {
EnumPropertyItem *item; EnumPropertyItem *item;
int totitem, free; int totitem, free;
const char *name; const char *name;
RNA_property_enum_items_gettexted(layout->root->block->evil_C, &ptr, prop, &item, &totitem, &free); RNA_property_enum_items_gettexted(layout->root->block->evil_C, ptr, prop, &item, &totitem, &free);
if(RNA_enum_name(item, retval, &name)) { if (RNA_enum_name(item, retval, &name) == 0) {
if (free) { name = "";
MEM_freeN(item);
}
return name;
} }
if (free) { if (free) {
MEM_freeN(item); MEM_freeN(item);
} }
}
return ""; return "";
} }
void uiItemEnumO(uiLayout *layout, const char *opname, const char *name, int icon, const char *propname, int value) /* same as below but 'prop' is already known */
static void uiItemEnumO_ptr__internal(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, PropertyRNA *prop, int value)
{ {
PointerRNA ptr; PointerRNA ptr;
WM_operator_properties_create_ptr(&ptr, ot);
WM_operator_properties_create(&ptr, opname); RNA_property_enum_set(&ptr, prop, value);
RNA_enum_set(&ptr, propname, value);
if(!name) if(!name)
name= ui_menu_enumpropname(layout, opname, propname, value); name = ui_menu_enumpropname(layout, &ptr, prop, value);
uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
}
void uiItemEnumO_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, const char *propname, int value)
{
PointerRNA ptr;
PropertyRNA *prop;
WM_operator_properties_create_ptr(&ptr, ot);
if ((prop = RNA_struct_find_property(&ptr, propname))) {
/* pass */
}
else {
RNA_warning("%s.%s not found", RNA_struct_identifier(ptr.type), propname);
return;
}
RNA_property_enum_set(&ptr, prop, value);
if(!name)
name = ui_menu_enumpropname(layout, &ptr, prop, value);
uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
}
void uiItemEnumO(uiLayout *layout, const char *opname, const char *name, int icon, const char *propname, int value)
{
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
if(ot) {
uiItemEnumO_ptr(layout, ot, name, icon, propname, value);
}
else {
ui_item_disabled(layout, opname);
RNA_warning("unknown operator '%s'", opname);
}
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname, IDProperty *properties, int context, int flag) void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname, IDProperty *properties, int context, int flag)
{ {
wmOperatorType *ot= WM_operatortype_find(opname, 1); wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
PropertyRNA *prop; PropertyRNA *prop;
uiBut *bt; uiBut *bt;
@ -748,7 +782,7 @@ void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname
} }
RNA_pointer_create(NULL, ot->srna, NULL, &ptr); RNA_pointer_create(NULL, ot->srna, NULL, &ptr);
prop= RNA_struct_find_property(&ptr, propname); prop = RNA_struct_find_property(&ptr, propname);
/* don't let bad properties slip through */ /* don't let bad properties slip through */
BLI_assert((prop == NULL) || (RNA_property_type(prop) == PROP_ENUM)); BLI_assert((prop == NULL) || (RNA_property_type(prop) == PROP_ENUM));
@ -772,12 +806,13 @@ void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname
MEM_freeN(tptr.data); MEM_freeN(tptr.data);
} }
tptr.data= IDP_CopyProperty(properties); tptr.data= IDP_CopyProperty(properties);
RNA_enum_set(&tptr, propname, item[i].value); RNA_property_enum_set(&tptr, prop, item[i].value);
uiItemFullO(column, opname, item[i].name, item[i].icon, tptr.data, context, flag); uiItemFullO_ptr(column, ot, item[i].name, item[i].icon, tptr.data, context, flag);
}
else {
uiItemEnumO_ptr__internal(column, ot, item[i].name, item[i].icon, prop, item[i].value);
} }
else
uiItemEnumO(column, opname, item[i].name, item[i].icon, propname, item[i].value);
} }
else { else {
if(item[i].name) { if(item[i].name) {
@ -807,18 +842,26 @@ void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
uiItemsFullEnumO(layout, opname, propname, NULL, layout->root->opcontext, 0); uiItemsFullEnumO(layout, opname, propname, NULL, layout->root->opcontext, 0);
} }
#define UI_OPERATOR_ERROR_RET(_ot, _opname) \
if (ot == NULL) { \
ui_item_disabled(layout, _opname); \
RNA_warning("'%s' unknown operator", _opname); \
return; \
} (void)0
/* for use in cases where we have */ /* for use in cases where we have */
void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value) void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
/* for getting the enum */
PropertyRNA *prop; PropertyRNA *prop;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
/* enum lookup */ /* enum lookup */
if((prop= RNA_struct_find_property(&ptr, propname))) { if ((prop = RNA_struct_find_property(&ptr, propname))) {
/* pass */ /* pass */
} }
else { else {
@ -830,21 +873,23 @@ void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char
/* same as uiItemEnumO */ /* same as uiItemEnumO */
if(!name) if(!name)
name= ui_menu_enumpropname(layout, opname, propname, value); name = ui_menu_enumpropname(layout, &ptr, prop, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value_str) void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value_str)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
/* for getting the enum */
PropertyRNA *prop; PropertyRNA *prop;
EnumPropertyItem *item; EnumPropertyItem *item;
int value, free; int value, free;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
/* enum lookup */ /* enum lookup */
if((prop= RNA_struct_find_property(&ptr, propname))) { if((prop= RNA_struct_find_property(&ptr, propname))) {
@ -870,49 +915,61 @@ void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char
/* same as uiItemEnumO */ /* same as uiItemEnumO */
if(!name) if(!name)
name= ui_menu_enumpropname(layout, opname, propname, value); name = ui_menu_enumpropname(layout, &ptr, prop, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value) void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
RNA_boolean_set(&ptr, propname, value); RNA_boolean_set(&ptr, propname, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value) void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
RNA_int_set(&ptr, propname, value); RNA_int_set(&ptr, propname, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, float value) void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, float value)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
RNA_float_set(&ptr, propname, value); RNA_float_set(&ptr, propname, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value) void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value)
{ {
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
PointerRNA ptr; PointerRNA ptr;
WM_operator_properties_create(&ptr, opname); UI_OPERATOR_ERROR_RET(ot, opname);
WM_operator_properties_create_ptr(&ptr, ot);
RNA_string_set(&ptr, propname, value); RNA_string_set(&ptr, propname, value);
uiItemFullO(layout, opname, name, icon, ptr.data, layout->root->opcontext, 0); uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0);
} }
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname) void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
@ -1548,14 +1605,11 @@ static void menu_item_enum_opname_menu(bContext *UNUSED(C), uiLayout *layout, vo
void uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, const char *name, int icon) void uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, const char *name, int icon)
{ {
wmOperatorType *ot= WM_operatortype_find(opname, 1); wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
MenuItemLevel *lvl; MenuItemLevel *lvl;
if(!ot) { UI_OPERATOR_ERROR_RET(ot, opname);
ui_item_disabled(layout, opname);
RNA_warning("unknown operator '%s'", opname);
return;
}
if(!ot->srna) { if(!ot->srna) {
ui_item_disabled(layout, opname); ui_item_disabled(layout, opname);
RNA_warning("operator missing srna '%s'", opname); RNA_warning("operator missing srna '%s'", opname);

@ -300,7 +300,7 @@ static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt)
uiLayout *layout= uiPupMenuLayout(pup); uiLayout *layout= uiPupMenuLayout(pup);
/* create operator menu item with relevant properties filled in */ /* create operator menu item with relevant properties filled in */
uiItemFullO(layout, op->idname, op->type->name, ICON_NONE, NULL, WM_OP_EXEC_REGION_WIN, UI_ITEM_O_RETURN_PROPS); uiItemFullO_ptr(layout, op->type, op->type->name, ICON_NONE, NULL, WM_OP_EXEC_REGION_WIN, UI_ITEM_O_RETURN_PROPS);
/* present the menu and be done... */ /* present the menu and be done... */
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);

@ -2069,6 +2069,7 @@ void GRAPH_OT_smooth (wmOperatorType *ot)
/* present a special customised popup menu for this, with some filtering */ /* present a special customised popup menu for this, with some filtering */
static int graph_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED(event)) static int graph_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{ {
wmOperatorType *ot = WM_operatortype_find("GRAPH_OT_fmodifier_add", 1);
uiPopupMenu *pup; uiPopupMenu *pup;
uiLayout *layout; uiLayout *layout;
int i; int i;
@ -2086,7 +2087,7 @@ static int graph_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *UNU
continue; continue;
/* create operator menu item with relevant properties filled in */ /* create operator menu item with relevant properties filled in */
props_ptr= uiItemFullO(layout, "GRAPH_OT_fmodifier_add", fmi->name, ICON_NONE, NULL, WM_OP_EXEC_REGION_WIN, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, fmi->name, ICON_NONE, NULL, WM_OP_EXEC_REGION_WIN, UI_ITEM_O_RETURN_PROPS);
/* the only thing that gets set from the menu is the type of F-Modifier to add */ /* the only thing that gets set from the menu is the type of F-Modifier to add */
RNA_enum_set(&props_ptr, "type", i); RNA_enum_set(&props_ptr, "type", i);
/* the following properties are just repeats of existing ones... */ /* the following properties are just repeats of existing ones... */

@ -1233,6 +1233,9 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point
PropertyRNA *prop; PropertyRNA *prop;
const char *layer_name; const char *layer_name;
char scene_name[MAX_ID_NAME-2]; char scene_name[MAX_ID_NAME-2];
wmOperatorType *ot = WM_operatortype_find("RENDER_OT_render", 1);
BLI_assert(ot != 0);
uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL); uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL);
@ -1249,10 +1252,10 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point
scn_ptr = RNA_pointer_get(ptr, "scene"); scn_ptr = RNA_pointer_get(ptr, "scene");
RNA_string_get(&scn_ptr, "name", scene_name); RNA_string_get(&scn_ptr, "name", scene_name);
WM_operator_properties_create(&op_ptr, "RENDER_OT_render"); WM_operator_properties_create_ptr(&op_ptr, ot);
RNA_string_set(&op_ptr, "layer", layer_name); RNA_string_set(&op_ptr, "layer", layer_name);
RNA_string_set(&op_ptr, "scene", scene_name); RNA_string_set(&op_ptr, "scene", scene_name);
uiItemFullO(row, "RENDER_OT_render", "", ICON_RENDER_STILL, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0); uiItemFullO_ptr(row, ot, "", ICON_RENDER_STILL, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
} }

@ -3187,25 +3187,25 @@ static int text_resolve_conflict_invoke(bContext *C, wmOperator *op, wmEvent *UN
/* modified locally and externally, ahhh. offer more possibilites. */ /* modified locally and externally, ahhh. offer more possibilites. */
pup= uiPupMenuBegin(C, "File Modified Outside and Inside Blender", ICON_NONE); pup= uiPupMenuBegin(C, "File Modified Outside and Inside Blender", ICON_NONE);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
uiItemEnumO(layout, op->type->idname, "Reload from disk (ignore local changes)", 0, "resolution", RESOLVE_RELOAD); uiItemEnumO_ptr(layout, op->type, "Reload from disk (ignore local changes)", 0, "resolution", RESOLVE_RELOAD);
uiItemEnumO(layout, op->type->idname, "Save to disk (ignore outside changes)", 0, "resolution", RESOLVE_SAVE); uiItemEnumO_ptr(layout, op->type, "Save to disk (ignore outside changes)", 0, "resolution", RESOLVE_SAVE);
uiItemEnumO(layout, op->type->idname, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL); uiItemEnumO_ptr(layout, op->type, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL);
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);
} }
else { else {
pup= uiPupMenuBegin(C, "File Modified Outside Blender", ICON_NONE); pup= uiPupMenuBegin(C, "File Modified Outside Blender", ICON_NONE);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
uiItemEnumO(layout, op->type->idname, "Reload from disk", 0, "resolution", RESOLVE_RELOAD); uiItemEnumO_ptr(layout, op->type, "Reload from disk", 0, "resolution", RESOLVE_RELOAD);
uiItemEnumO(layout, op->type->idname, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL); uiItemEnumO_ptr(layout, op->type, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL);
uiItemEnumO(layout, op->type->idname, "Ignore", 0, "resolution", RESOLVE_IGNORE); uiItemEnumO_ptr(layout, op->type, "Ignore", 0, "resolution", RESOLVE_IGNORE);
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);
} }
break; break;
case 2: case 2:
pup= uiPupMenuBegin(C, "File Deleted Outside Blender", ICON_NONE); pup= uiPupMenuBegin(C, "File Deleted Outside Blender", ICON_NONE);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
uiItemEnumO(layout, op->type->idname, "Make text internal", 0, "resolution", RESOLVE_MAKE_INTERNAL); uiItemEnumO_ptr(layout, op->type, "Make text internal", 0, "resolution", RESOLVE_MAKE_INTERNAL);
uiItemEnumO(layout, op->type->idname, "Recreate file", 0, "resolution", RESOLVE_SAVE); uiItemEnumO_ptr(layout, op->type, "Recreate file", 0, "resolution", RESOLVE_SAVE);
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);
break; break;
} }

@ -58,6 +58,7 @@
#include "UI_resources.h" #include "UI_resources.h"
#include "WM_types.h" #include "WM_types.h"
#include "WM_api.h"
#include "RNA_access.h" #include "RNA_access.h"
@ -165,12 +166,13 @@ void unpack_menu(bContext *C, const char *opname, const char *id_name, const cha
uiPopupMenu *pup; uiPopupMenu *pup;
uiLayout *layout; uiLayout *layout;
char line[FILE_MAX + 100]; char line[FILE_MAX + 100];
wmOperatorType *ot = WM_operatortype_find(opname, 1);
pup= uiPupMenuBegin(C, "Unpack file", ICON_NONE); pup= uiPupMenuBegin(C, "Unpack file", ICON_NONE);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
strcpy(line, "Remove Pack"); strcpy(line, "Remove Pack");
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_REMOVE); RNA_enum_set(&props_ptr, "method", PF_REMOVE);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
@ -184,29 +186,29 @@ void unpack_menu(bContext *C, const char *opname, const char *id_name, const cha
switch(checkPackedFile(local_name, pf)) { switch(checkPackedFile(local_name, pf)) {
case PF_NOFILE: case PF_NOFILE:
BLI_snprintf(line, sizeof(line), "Create %s", local_name); BLI_snprintf(line, sizeof(line), "Create %s", local_name);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL); RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;
case PF_EQUAL: case PF_EQUAL:
BLI_snprintf(line, sizeof(line), "Use %s (identical)", local_name); BLI_snprintf(line, sizeof(line), "Use %s (identical)", local_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_LOCAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL); RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;
case PF_DIFFERS: case PF_DIFFERS:
BLI_snprintf(line, sizeof(line), "Use %s (differs)", local_name); BLI_snprintf(line, sizeof(line), "Use %s (differs)", local_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_LOCAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL); RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
BLI_snprintf(line, sizeof(line), "Overwrite %s", local_name); BLI_snprintf(line, sizeof(line), "Overwrite %s", local_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_LOCAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_LOCAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL); RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;
@ -217,28 +219,28 @@ void unpack_menu(bContext *C, const char *opname, const char *id_name, const cha
switch(checkPackedFile(abs_name, pf)) { switch(checkPackedFile(abs_name, pf)) {
case PF_NOFILE: case PF_NOFILE:
BLI_snprintf(line, sizeof(line), "Create %s", abs_name); BLI_snprintf(line, sizeof(line), "Create %s", abs_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_ORIGINAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL); RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;
case PF_EQUAL: case PF_EQUAL:
BLI_snprintf(line, sizeof(line), "Use %s (identical)", abs_name); BLI_snprintf(line, sizeof(line), "Use %s (identical)", abs_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_ORIGINAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL); RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;
case PF_DIFFERS: case PF_DIFFERS:
BLI_snprintf(line, sizeof(line), "Use %s (differs)", abs_name); BLI_snprintf(line, sizeof(line), "Use %s (differs)", abs_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_ORIGINAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL); RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
BLI_snprintf(line, sizeof(line), "Overwrite %s", abs_name); BLI_snprintf(line, sizeof(line), "Overwrite %s", abs_name);
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_ORIGINAL); //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS); props_ptr= uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL); RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
RNA_string_set(&props_ptr, "id", id_name); RNA_string_set(&props_ptr, "id", id_name);
break; break;

@ -806,7 +806,7 @@ int WM_operator_confirm_message(bContext *C, wmOperator *op, const char *message
pup= uiPupMenuBegin(C, IFACE_("OK?"), ICON_QUESTION); pup= uiPupMenuBegin(C, IFACE_("OK?"), ICON_QUESTION);
layout= uiPupMenuLayout(pup); layout= uiPupMenuLayout(pup);
uiItemFullO(layout, op->type->idname, message, ICON_NONE, properties, WM_OP_EXEC_REGION_WIN, 0); uiItemFullO_ptr(layout, op->type, message, ICON_NONE, properties, WM_OP_EXEC_REGION_WIN, 0);
uiPupMenuEnd(C, pup); uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED; return OPERATOR_CANCELLED;