forked from bartvdbraak/blender
reduce operator lookups in the UI (could do 4 hash lookups per button).
This commit is contained in:
parent
6964b5a6c4
commit
b1667911ef
@ -376,6 +376,10 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
|
||||
bAction *act= ob->poselib; /* never NULL */
|
||||
TimeMarker *marker;
|
||||
|
||||
wmOperatorType *ot = WM_operatortype_find("POSELIB_OT_pose_add", 1);
|
||||
|
||||
BLI_assert(ot != NULL);
|
||||
|
||||
/* set the operator execution context correctly */
|
||||
uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
|
||||
|
||||
@ -383,9 +387,9 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
|
||||
for (marker= act->markers.first; marker; marker= marker->next) {
|
||||
PointerRNA props_ptr;
|
||||
|
||||
props_ptr = uiItemFullO(layout, "POSELIB_OT_pose_add",
|
||||
marker->name, ICON_ARMATURE_DATA, NULL,
|
||||
WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
props_ptr = uiItemFullO_ptr(layout, ot,
|
||||
marker->name, ICON_ARMATURE_DATA, NULL,
|
||||
WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
|
||||
RNA_int_set(&props_ptr, "frame", marker->frame);
|
||||
RNA_string_set(&props_ptr, "name", marker->name);
|
||||
|
@ -5876,8 +5876,8 @@ static int delete_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
|
||||
if(obedit->type==OB_SURF) {
|
||||
pup= uiPupMenuBegin(C, "Delete", ICON_NONE);
|
||||
layout= uiPupMenuLayout(pup);
|
||||
uiItemEnumO(layout, op->type->idname, NULL, 0, "type", 0);
|
||||
uiItemEnumO(layout, op->type->idname, NULL, 0, "type", 2);
|
||||
uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 0);
|
||||
uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 2);
|
||||
uiPupMenuEnd(C, pup);
|
||||
}
|
||||
else {
|
||||
|
@ -62,6 +62,7 @@ struct ColorBand;
|
||||
struct CurveMapping;
|
||||
struct Image;
|
||||
struct ImageUser;
|
||||
struct wmOperatorType;
|
||||
struct uiWidgetColors;
|
||||
struct Tex;
|
||||
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_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_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 *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_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_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,
|
||||
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_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_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 */
|
||||
struct PointerRNA *uiButGetOperatorPtrRNA(uiBut *but);
|
||||
@ -773,6 +777,7 @@ void uiTemplateMarker(struct uiLayout *layout, struct PointerRNA *ptr, const cha
|
||||
|
||||
/* items */
|
||||
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_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);
|
||||
@ -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 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);
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
wmOperatorType *ot;
|
||||
|
||||
ot= WM_operatortype_find(opname, 0);
|
||||
|
||||
if(!str) {
|
||||
if(ot) str= ot->name;
|
||||
else str= opname;
|
||||
if(ot) str = ot->name;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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)
|
||||
{
|
||||
@ -3043,13 +3045,20 @@ uiBut *uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int
|
||||
ui_check_but(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;
|
||||
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);
|
||||
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)
|
||||
{
|
||||
@ -3121,13 +3130,19 @@ uiBut *uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x1
|
||||
ui_check_but_and_iconize(but, icon);
|
||||
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;
|
||||
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);
|
||||
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 */
|
||||
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;
|
||||
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;
|
||||
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);
|
||||
but->flag|= UI_ICON_LEFT;
|
||||
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 */
|
||||
|
||||
|
@ -622,19 +622,12 @@ static void ui_item_disabled(uiLayout *layout, const char *name)
|
||||
}
|
||||
|
||||
/* 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;
|
||||
wmOperatorType *ot= WM_operatortype_find(opname, 1);
|
||||
uiBut *but;
|
||||
int w;
|
||||
|
||||
if(!ot) {
|
||||
ui_item_disabled(layout, opname);
|
||||
RNA_warning("unknown operator '%s'", opname);
|
||||
return PointerRNA_NULL;
|
||||
}
|
||||
|
||||
if(!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)
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
|
||||
if(icon && name[0])
|
||||
but= uiDefIconTextButO(block, BUT, ot->idname, context, icon, name, 0, 0, w, UI_UNIT_Y, NULL);
|
||||
else if(icon)
|
||||
but= uiDefIconButO(block, BUT, ot->idname, context, icon, 0, 0, w, UI_UNIT_Y, NULL);
|
||||
else
|
||||
but= uiDefButO(block, BUT, ot->idname, context, name, 0, 0, w, UI_UNIT_Y, NULL);
|
||||
/* create the button */
|
||||
if(icon) {
|
||||
if (name[0]) {
|
||||
but = uiDefIconTextButO_ptr(block, BUT, ot, context, icon, 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);
|
||||
|
||||
@ -687,55 +686,90 @@ PointerRNA uiItemFullO(uiLayout *layout, const char *opname, const char *name, i
|
||||
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);
|
||||
PointerRNA ptr;
|
||||
PropertyRNA *prop;
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
|
||||
if(!ot || !ot->srna)
|
||||
return "";
|
||||
if(ot) {
|
||||
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);
|
||||
prop= RNA_struct_find_property(&ptr, propname);
|
||||
static const char *ui_menu_enumpropname(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int retval)
|
||||
{
|
||||
EnumPropertyItem *item;
|
||||
int totitem, free;
|
||||
const char *name;
|
||||
|
||||
if(prop) {
|
||||
EnumPropertyItem *item;
|
||||
int totitem, free;
|
||||
const char *name;
|
||||
RNA_property_enum_items_gettexted(layout->root->block->evil_C, ptr, prop, &item, &totitem, &free);
|
||||
if (RNA_enum_name(item, retval, &name) == 0) {
|
||||
name = "";
|
||||
}
|
||||
|
||||
RNA_property_enum_items_gettexted(layout->root->block->evil_C, &ptr, prop, &item, &totitem, &free);
|
||||
if(RNA_enum_name(item, retval, &name)) {
|
||||
if (free) {
|
||||
MEM_freeN(item);
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
if (free) {
|
||||
MEM_freeN(item);
|
||||
}
|
||||
if (free) {
|
||||
MEM_freeN(item);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
WM_operator_properties_create(&ptr, opname);
|
||||
RNA_enum_set(&ptr, propname, value);
|
||||
WM_operator_properties_create_ptr(&ptr, ot);
|
||||
RNA_property_enum_set(&ptr, prop, value);
|
||||
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot= WM_operatortype_find(opname, 1);
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
|
||||
PointerRNA ptr;
|
||||
PropertyRNA *prop;
|
||||
uiBut *bt;
|
||||
@ -748,7 +782,7 @@ void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname
|
||||
}
|
||||
|
||||
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 */
|
||||
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);
|
||||
}
|
||||
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 {
|
||||
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);
|
||||
}
|
||||
|
||||
#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 */
|
||||
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;
|
||||
|
||||
/* for getting the enum */
|
||||
PropertyRNA *prop;
|
||||
|
||||
WM_operator_properties_create(&ptr, opname);
|
||||
UI_OPERATOR_ERROR_RET(ot, opname);
|
||||
|
||||
WM_operator_properties_create_ptr(&ptr, ot);
|
||||
|
||||
/* enum lookup */
|
||||
if((prop= RNA_struct_find_property(&ptr, propname))) {
|
||||
if ((prop = RNA_struct_find_property(&ptr, propname))) {
|
||||
/* pass */
|
||||
}
|
||||
else {
|
||||
@ -830,21 +873,23 @@ void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char
|
||||
|
||||
/* same as uiItemEnumO */
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
PointerRNA ptr;
|
||||
|
||||
/* for getting the enum */
|
||||
PropertyRNA *prop;
|
||||
|
||||
EnumPropertyItem *item;
|
||||
int value, free;
|
||||
|
||||
WM_operator_properties_create(&ptr, opname);
|
||||
UI_OPERATOR_ERROR_RET(ot, opname);
|
||||
|
||||
WM_operator_properties_create_ptr(&ptr, ot);
|
||||
|
||||
/* enum lookup */
|
||||
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 */
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
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);
|
||||
|
||||
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)
|
||||
@ -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)
|
||||
{
|
||||
wmOperatorType *ot= WM_operatortype_find(opname, 1);
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
|
||||
MenuItemLevel *lvl;
|
||||
|
||||
if(!ot) {
|
||||
ui_item_disabled(layout, opname);
|
||||
RNA_warning("unknown operator '%s'", opname);
|
||||
return;
|
||||
}
|
||||
UI_OPERATOR_ERROR_RET(ot, opname);
|
||||
|
||||
if(!ot->srna) {
|
||||
ui_item_disabled(layout, 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);
|
||||
|
||||
/* 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... */
|
||||
uiPupMenuEnd(C, pup);
|
||||
|
@ -2069,6 +2069,7 @@ void GRAPH_OT_smooth (wmOperatorType *ot)
|
||||
/* present a special customised popup menu for this, with some filtering */
|
||||
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;
|
||||
uiLayout *layout;
|
||||
int i;
|
||||
@ -2086,7 +2087,7 @@ static int graph_fmodifier_add_invoke (bContext *C, wmOperator *op, wmEvent *UNU
|
||||
continue;
|
||||
|
||||
/* 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 */
|
||||
RNA_enum_set(&props_ptr, "type", i);
|
||||
/* the following properties are just repeats of existing ones... */
|
||||
|
@ -1233,7 +1233,10 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point
|
||||
PropertyRNA *prop;
|
||||
const char *layer_name;
|
||||
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);
|
||||
|
||||
if(!node->id) return;
|
||||
@ -1249,10 +1252,10 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point
|
||||
scn_ptr = RNA_pointer_get(ptr, "scene");
|
||||
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, "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. */
|
||||
pup= uiPupMenuBegin(C, "File Modified Outside and Inside Blender", ICON_NONE);
|
||||
layout= uiPupMenuLayout(pup);
|
||||
uiItemEnumO(layout, op->type->idname, "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(layout, op->type->idname, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL);
|
||||
uiItemEnumO_ptr(layout, op->type, "Reload from disk (ignore local changes)", 0, "resolution", RESOLVE_RELOAD);
|
||||
uiItemEnumO_ptr(layout, op->type, "Save to disk (ignore outside changes)", 0, "resolution", RESOLVE_SAVE);
|
||||
uiItemEnumO_ptr(layout, op->type, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL);
|
||||
uiPupMenuEnd(C, pup);
|
||||
}
|
||||
else {
|
||||
pup= uiPupMenuBegin(C, "File Modified Outside Blender", ICON_NONE);
|
||||
layout= uiPupMenuLayout(pup);
|
||||
uiItemEnumO(layout, op->type->idname, "Reload from disk", 0, "resolution", RESOLVE_RELOAD);
|
||||
uiItemEnumO(layout, op->type->idname, "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, "Reload from disk", 0, "resolution", RESOLVE_RELOAD);
|
||||
uiItemEnumO_ptr(layout, op->type, "Make text internal (separate copy)", 0, "resolution", RESOLVE_MAKE_INTERNAL);
|
||||
uiItemEnumO_ptr(layout, op->type, "Ignore", 0, "resolution", RESOLVE_IGNORE);
|
||||
uiPupMenuEnd(C, pup);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
pup= uiPupMenuBegin(C, "File Deleted Outside Blender", ICON_NONE);
|
||||
layout= uiPupMenuLayout(pup);
|
||||
uiItemEnumO(layout, op->type->idname, "Make text internal", 0, "resolution", RESOLVE_MAKE_INTERNAL);
|
||||
uiItemEnumO(layout, op->type->idname, "Recreate file", 0, "resolution", RESOLVE_SAVE);
|
||||
uiItemEnumO_ptr(layout, op->type, "Make text internal", 0, "resolution", RESOLVE_MAKE_INTERNAL);
|
||||
uiItemEnumO_ptr(layout, op->type, "Recreate file", 0, "resolution", RESOLVE_SAVE);
|
||||
uiPupMenuEnd(C, pup);
|
||||
break;
|
||||
}
|
||||
|
@ -58,6 +58,7 @@
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "WM_types.h"
|
||||
#include "WM_api.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;
|
||||
uiLayout *layout;
|
||||
char line[FILE_MAX + 100];
|
||||
wmOperatorType *ot = WM_operatortype_find(opname, 1);
|
||||
|
||||
pup= uiPupMenuBegin(C, "Unpack file", ICON_NONE);
|
||||
layout= uiPupMenuLayout(pup);
|
||||
|
||||
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_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)) {
|
||||
case PF_NOFILE:
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
|
||||
break;
|
||||
case PF_EQUAL:
|
||||
BLI_snprintf(line, sizeof(line), "Use %s (identical)", local_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_LOCAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
|
||||
break;
|
||||
case PF_DIFFERS:
|
||||
BLI_snprintf(line, sizeof(line), "Use %s (differs)", local_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_LOCAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
|
||||
BLI_snprintf(line, sizeof(line), "Overwrite %s", local_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_LOCAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_LOCAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
break;
|
||||
@ -217,28 +219,28 @@ void unpack_menu(bContext *C, const char *opname, const char *id_name, const cha
|
||||
switch(checkPackedFile(abs_name, pf)) {
|
||||
case PF_NOFILE:
|
||||
BLI_snprintf(line, sizeof(line), "Create %s", abs_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_ORIGINAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
break;
|
||||
case PF_EQUAL:
|
||||
BLI_snprintf(line, sizeof(line), "Use %s (identical)", abs_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_ORIGINAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
break;
|
||||
case PF_DIFFERS:
|
||||
BLI_snprintf(line, sizeof(line), "Use %s (differs)", abs_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_USE_ORIGINAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
|
||||
BLI_snprintf(line, sizeof(line), "Overwrite %s", abs_name);
|
||||
//uiItemEnumO(layout, opname, line, 0, "method", PF_WRITE_ORIGINAL);
|
||||
props_ptr= uiItemFullO(layout, opname, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
|
||||
//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
|
||||
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_string_set(&props_ptr, "id", id_name);
|
||||
break;
|
||||
|
@ -806,7 +806,7 @@ int WM_operator_confirm_message(bContext *C, wmOperator *op, const char *message
|
||||
|
||||
pup= uiPupMenuBegin(C, IFACE_("OK?"), ICON_QUESTION);
|
||||
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);
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
|
Loading…
Reference in New Issue
Block a user