Finish changes in up/down arrows for menus

Restored single triangle for special menus, which still isn't perfect but
probably makes more sense.

Added drawflag bit flags to button, which is currently used to declare, that
button need to have up/down arrows. This is needed because it's tricky to
distinguish if button should have such arrows. For example, ID search buttons
is a simple block button which doesn't directly mean it'll have pop-up menu
and not all buttons which cases pop-up menu to display need to have such
arrows.

So currently only ID selector button is forcing up/down arrows to be displayed,
all the rest buttons now behaves in the same way as it used to be before.
This commit is contained in:
Sergey Sharybin 2012-05-23 14:24:40 +00:00
parent 9b45f607c9
commit 28002edb6b
9 changed files with 29 additions and 10 deletions

@ -130,7 +130,7 @@ class DATA_PT_bone_groups(ArmatureButtonsPanel, Panel):
col.active = (ob.proxy is None)
col.operator("pose.group_add", icon='ZOOMIN', text="")
col.operator("pose.group_remove", icon='ZOOMOUT', text="")
col.menu("DATA_PT_bone_group_specials", icon='BLANK1', text="")
col.menu("DATA_PT_bone_group_specials", icon='DOWNARROW_HLT', text="")
if group:
col.separator()
col.operator("pose.group_move", icon='TRIA_UP', text="").direction = 'UP'

@ -149,7 +149,7 @@ class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
col = row.column(align=True)
col.operator("object.vertex_group_add", icon='ZOOMIN', text="")
col.operator("object.vertex_group_remove", icon='ZOOMOUT', text="")
col.menu("MESH_MT_vertex_group_specials", icon='BLANK1', text="")
col.menu("MESH_MT_vertex_group_specials", icon='DOWNARROW_HLT', text="")
if group:
col.operator("object.vertex_group_move", icon='TRIA_UP', text="").direction = 'UP'
col.operator("object.vertex_group_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
@ -208,7 +208,7 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
sub = col.column(align=True)
sub.operator("object.shape_key_add", icon='ZOOMIN', text="").from_mix = False
sub.operator("object.shape_key_remove", icon='ZOOMOUT', text="")
sub.menu("MESH_MT_shape_key_specials", icon='BLANK1', text="")
sub.menu("MESH_MT_shape_key_specials", icon='DOWNARROW_HLT', text="")
if kb:
col.separator()

@ -110,7 +110,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
col.operator("object.material_slot_add", icon='ZOOMIN', text="")
col.operator("object.material_slot_remove", icon='ZOOMOUT', text="")
col.menu("MATERIAL_MT_specials", icon='BLANK1', text="")
col.menu("MATERIAL_MT_specials", icon='DOWNARROW_HLT', text="")
if ob.mode == 'EDIT':
row = layout.row(align=True)

@ -130,7 +130,7 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, Panel):
col = row.column(align=True)
col.operator("texture.slot_move", text="", icon='TRIA_UP').type = 'UP'
col.operator("texture.slot_move", text="", icon='TRIA_DOWN').type = 'DOWN'
col.menu("TEXTURE_MT_specials", icon='BLANK1', text="")
col.menu("TEXTURE_MT_specials", icon='DOWNARROW_HLT', text="")
split = layout.split(percentage=0.65)
col = split.column()
@ -511,7 +511,7 @@ class TEXTURE_PT_envmap(TextureTypePanel, Panel):
row = layout.row()
row.prop(env, "source", expand=True)
row.menu("TEXTURE_MT_envmap_specials", icon='BLANK1', text="")
row.menu("TEXTURE_MT_envmap_specials", icon='DOWNARROW_HLT', text="")
if env.source == 'IMAGE_FILE':
layout.template_ID(tex, "image", open="image.open")

@ -171,6 +171,9 @@ typedef struct uiLayout uiLayout;
#define UI_PANEL_WIDTH 340
#define UI_COMPACT_PANEL_WIDTH 160
/* uiBut->drawflag */
#define UI_BUT_DRAW_ENUM_ARROWS (1 << 0) /* draw enum-like up/down arrows for button */
/* scale fixed button widths by this to account for DPI
* 8.4852 == sqrtf(72.0f)) */
#define UI_DPI_FAC (sqrtf((float)U.dpi) / 8.48528137423857f)
@ -427,6 +430,9 @@ int UI_but_active_drop_name(struct bContext *C);
void uiButSetFlag(uiBut *but, int flag);
void uiButClearFlag(uiBut *but, int flag);
void uiButSetDrawFlag(uiBut *but, int flag);
void uiButClearDrawFlag(uiBut *but, int flag);
/* special button case, only draw it when used actively, for outliner etc */
int uiButActiveOnly(const struct bContext *C, uiBlock *block, uiBut *but);

@ -3356,6 +3356,16 @@ void uiButClearFlag(uiBut *but, int flag)
but->flag &= ~flag;
}
void uiButSetDrawFlag(uiBut *but, int flag)
{
but->drawflag |= flag;
}
void uiButClearDrawFlag(uiBut *but, int flag)
{
but->drawflag &= ~flag;
}
int uiButGetRetVal(uiBut *but)
{
return but->retval;

@ -150,7 +150,7 @@ typedef struct {
struct uiBut {
struct uiBut *next, *prev;
int flag;
int flag, drawflag;
short type, pointype, bit, bitnr, retval, strwidth, ofs, pos, selsta, selend, alignnr;
short pad1;

@ -376,6 +376,9 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
else if (flag & UI_ID_BROWSE) {
but = uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template), "", 0, 0, UI_UNIT_X * 1.6, UI_UNIT_Y,
TIP_(template_id_browse_tip(type)));
uiButSetDrawFlag(but, UI_BUT_DRAW_ENUM_ARROWS);
if (type) {
but->icon = RNA_struct_ui_icon(type);
/* default dragging of icon for id browse buttons */

@ -3136,10 +3136,10 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
/* no text, with icon */
else if (!but->str[0] && but->icon) {
if (but->flag & UI_ICON_PREVIEW)
wt = widget_type(UI_WTYPE_MENU_ICON_RADIO); /* no arrows */
else
if (but->drawflag & UI_BUT_DRAW_ENUM_ARROWS)
wt = widget_type(UI_WTYPE_MENU_RADIO); /* with arrows */
else
wt = widget_type(UI_WTYPE_MENU_ICON_RADIO); /* no arrows */
}
/* with menu arrows */
else