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>2012-01-22 07:30:07 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-01-22 07:30:07 +0400
commitb1667911ef88e067817cb1702695a0d1e350dd78 (patch)
tree303dff319b59b89516127c065f9486e4dfd53975 /source/blender
parent6964b5a6c48f2fab19b4ce5a52ba23525a5f05eb (diff)
reduce operator lookups in the UI (could do 4 hash lookups per button).
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/armature/poselib.c10
-rw-r--r--source/blender/editors/curve/editcurve.c4
-rw-r--r--source/blender/editors/include/UI_interface.h7
-rw-r--r--source/blender/editors/interface/interface.c44
-rw-r--r--source/blender/editors/interface/interface_layout.c200
-rw-r--r--source/blender/editors/object/object_relations.c2
-rw-r--r--source/blender/editors/space_graph/graph_edit.c3
-rw-r--r--source/blender/editors/space_node/drawnode.c9
-rw-r--r--source/blender/editors/space_text/text_ops.c16
-rw-r--r--source/blender/editors/util/ed_util.c34
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c2
11 files changed, 211 insertions, 120 deletions
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index dcddde207f0..eb49f16584b 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -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);
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index a20fbad874e..8c20d9be4f8 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -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 {
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index d1f11d60999..3f907004931 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -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);
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 3a1bab9987e..8bb9ceb121c 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -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 */
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index eb55cf912d6..20b5bc54661 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -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(&ptr, ot);
+ RNA_property_enum_set(&ptr, prop, value);
- WM_operator_properties_create(&ptr, opname);
- RNA_enum_set(&ptr, propname, 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_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, 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(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);
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index a0bddda0413..b1c8f8012a5 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -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);
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 24b2dc9e41c..9df43a85614 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -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... */
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 7d475973c09..143173da5bc 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -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);
}
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index eab06474546..29583a9356e 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -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;
}
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index 73322a8292d..a40c6cfa42f 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -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;
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 3a3be292f07..7dd2bf7fc51 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -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;