diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2013-05-12 17:16:11 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2013-05-12 17:16:11 +0400 |
commit | 127c39b8a44df962b1ac20578497b387319efe87 (patch) | |
tree | 7f928e590060350708d4160b1637994ca758c025 /source/blender/editors/interface/interface.c | |
parent | 5fcf9b1d2fe94798178beeea8e31f54faac31414 (diff) |
Fix for [#35224] Transform Orientation - order inconsistency
Fix turned out to remove as much "manual UI" from 3D view header as possible. Mode selector and all transform manipulators/orientations stuff are now RNA-based UI (leaving basically only edit mesh select modes with custom handlers, as they have some quite specific features).
To achieve this, four main modifications were done:
* enum-operator-generated menus are now MENU (i.e. dropdown lists) in headers too.
* All bit-flag enums expanded in ROW buttons now have a handling consistent with e.g. layers, or what we already have for transform manipulators, i.e. clicking select only one element, shift-click to select multiple ones.
* Consequently, the three RNA booleans manipulators flags are merged into a single bit-flag enum (yes, this is also an API change, though I doubt many scripts use it).
* Now the width of enum-based dropdown lists is computed from longest item name in enum, no more from a dummy place holder string (when no label/name is given).
All this allows to remove some code from 3DView/transform areas, that was actually mostly duplicating RNA/operator one.
Also done a few optimizations here and there (among others, do not pass &numitems to RNA_property_enum_items() when you do not need it, saves at least an iteration over enum items to count them).
Many thanks to Brecht for the reviews!
Diffstat (limited to 'source/blender/editors/interface/interface.c')
-rw-r--r-- | source/blender/editors/interface/interface.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 87281ab7819..59a5f169f9b 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2880,15 +2880,15 @@ static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *s freestr = 1; } else if (ELEM(type, ROW, LISTROW) && proptype == PROP_ENUM) { - EnumPropertyItem *item; - int i, totitem, free; + EnumPropertyItem *item, *item_array = NULL; + int free; /* get untranslated, then translate the single string we need */ - RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free); - for (i = 0; i < totitem; i++) { - if (item[i].identifier[0] && item[i].value == (int)max) { - str = CTX_IFACE_(RNA_property_translation_context(prop), item[i].name); - icon = item[i].icon; + RNA_property_enum_items(block->evil_C, ptr, prop, &item_array, NULL, &free); + for (item = item_array; item->identifier; item++) { + if (item->identifier[0] && item->value == (int)max) { + str = CTX_IFACE_(RNA_property_translation_context(prop), item->name); + icon = item->icon; break; } } @@ -2897,7 +2897,7 @@ static uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, const char *s str = RNA_property_ui_name(prop); } if (free) { - MEM_freeN(item); + MEM_freeN(item_array); } } else { |