diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2013-06-09 20:18:23 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2013-06-09 20:18:23 +0400 |
commit | 0123c7d2be0036435192318a2a3fa7949bc3d5f7 (patch) | |
tree | c635749563ffda7550224cb5790a24e1c7579130 /source/blender/editors | |
parent | 49115b4dd38443c77b18f0b627a97f60975ada1d (diff) |
This commit replaces old "manual" Editors menu with nice RNA-based one (so once again, some cleanup of old UI code). It makes the following changes:
* RNA's editor types enum (space_type_items) has been re-ordered, added icons, and removed internal-only SPACE_EMPTY value, so that it matches the menu.
* Two fixes in code drawing enums as dropdown menu:
** All items were taken into account when computing the number of needed columns, now simple separators (void string items) are ignored.
** Simple separators items were drawn as labels, taking far too much space!
And now translators will be free from that ugly, insane menu-string! :P
Thanks to Brecht for the review.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 42 | ||||
-rw-r--r-- | source/blender/editors/screen/area.c | 71 |
2 files changed, 38 insertions, 75 deletions
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 76e523f1329..3b9574156eb 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1768,18 +1768,34 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a const char *instr = arg_str; int columns, rows, a, b; int column_start = 0, column_end = 0; + int nbr_entries_nosepr = 0; uiBlockSetFlag(block, UI_BLOCK_MOVEMOUSE_QUIT); /* compute menu data */ md = decompose_menu_string(instr); - /* columns and row estimation */ - columns = (md->nitems + 20) / 20; + /* Run some "tweaking" checks. */ + entry = md->items; + for (a = 0; a < md->nitems; a++, entry++) { + if (entry->sepr) { + /* inconsistent, but menus with labels do not look good flipped */ + if (entry->str[0]) { + block->flag |= UI_BLOCK_NO_FLIP; + nbr_entries_nosepr++; + } + /* We do not want simple separators in nbr_entries_nosepr count */ + continue; + } + nbr_entries_nosepr++; + } + + /* Columns and row estimation. Ignore simple separators here. */ + columns = (nbr_entries_nosepr + 20) / 20; if (columns < 1) columns = 1; if (columns > 8) - columns = (md->nitems + 25) / 25; + columns = (nbr_entries_nosepr + 25) / 25; rows = md->nitems / columns; if (rows < 1) @@ -1799,15 +1815,6 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a } } - /* inconsistent, but menus with labels do not look good flipped */ - entry = md->items; - for (a = 0; a < md->nitems; a++, entry++) { - if (entry->sepr && entry->str[0]) { - block->flag |= UI_BLOCK_NO_FLIP; - break; - } - } - /* create items */ split = uiLayoutSplit(layout, 0.0f, FALSE); @@ -1837,9 +1844,14 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a entry = &md->items[column_start + column_end - 1 - a]; if (entry->sepr) { - uiItemL(column, entry->str, entry->icon); - bt = block->buttons.last; - bt->flag = UI_TEXT_LEFT; + if (entry->str[0]) { + uiItemL(column, entry->str, entry->icon); + bt = block->buttons.last; + bt->flag = UI_TEXT_LEFT; + } + else { + uiItemS(column); + } } else if (entry->icon) { uiDefIconTextButF(block, BUTM, B_NOP, entry->icon, entry->str, 0, 0, diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 9196fdc1980..69c1d2cf169 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -46,6 +46,9 @@ #include "BKE_global.h" #include "BKE_screen.h" +#include "RNA_access.h" +#include "RNA_types.h" + #include "WM_api.h" #include "WM_types.h" #include "wm_subwindow.h" @@ -1494,71 +1497,19 @@ void ED_area_prevspace(bContext *C, ScrArea *sa) WM_event_add_notifier(C, NC_SPACE | ND_SPACE_CHANGED, sa); } -static const char *editortype_pup(void) -{ - const char *types = N_( - "Editor type: %t" - "|3D View %x1" - - "|%l" - - "|Timeline %x15" - "|Graph Editor %x2" - "|Dope Sheet %x12" - "|NLA Editor %x13" - - "|%l" - - "|UV/Image Editor %x6" - - "|Video Sequence Editor %x8" - "|Movie Clip Editor %x20" - "|Text Editor %x9" - "|Node Editor %x16" - "|Logic Editor %x17" - - "|%l" - - "|Properties %x4" - "|Outliner %x3" - "|User Preferences %x19" - "|Info %x7" - - "|%l" - - "|File Browser %x5" - - "|%l" - - "|Python Console %x18" - ); - - return IFACE_(types); -} - -static void spacefunc(struct bContext *C, void *UNUSED(arg1), void *UNUSED(arg2)) -{ - ED_area_newspace(C, CTX_wm_area(C), CTX_wm_area(C)->butspacetype); - ED_area_tag_redraw(CTX_wm_area(C)); - - /* send space change notifier */ - WM_event_add_notifier(C, NC_SPACE | ND_SPACE_CHANGED, CTX_wm_area(C)); -} - /* returns offset for next button in header */ int ED_area_header_switchbutton(const bContext *C, uiBlock *block, int yco) { ScrArea *sa = CTX_wm_area(C); - uiBut *but; + bScreen *scr = CTX_wm_screen(C); + PointerRNA areaptr; int xco = 0.4 * U.widget_unit; - - but = uiDefIconTextButC(block, ICONTEXTROW, 0, ICON_VIEW3D, - editortype_pup(), xco, yco, 1.5 * U.widget_unit, U.widget_unit, - &(sa->butspacetype), 1.0, SPACEICONMAX, 0, 0, - TIP_("Display current editor type (click for a menu of available types)")); - uiButSetFunc(but, spacefunc, NULL, NULL); - uiButClearFlag(but, UI_BUT_UNDO); /* skip undo on screen buttons */ - + + RNA_pointer_create(&(scr->id), &RNA_Area, sa, &areaptr); + + uiDefButR(block, MENU, 0, NULL, xco, yco, 1.5 * U.widget_unit, U.widget_unit, + &areaptr, "type", 0, 0.0f, 0.0f, 0.0f, 0.0f, ""); + return xco + 1.7 * U.widget_unit; } |