Commit: 78250f1d1d87d5158be4824e64d8869a3b361f75
Author: Ines Almeida
Date:   Fri May 22 21:31:26 2015 +0100
Branches: master
https://developer.blender.org/rB78250f1d1d87d5158be4824e64d8869a3b361f75

IconView template: adding optional labels to popup buttons

===================================================================

M       source/blender/editors/include/UI_interface.h
M       source/blender/editors/interface/interface_templates.c
M       source/blender/editors/interface/interface_widgets.c
M       source/blender/makesrna/intern/rna_ui_api.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c

===================================================================

diff --git a/source/blender/editors/include/UI_interface.h 
b/source/blender/editors/include/UI_interface.h
index cc66cbe..1b09671 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -889,7 +889,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, struct 
PointerRNA *ptr);
 void uiTemplatePreview(uiLayout *layout, struct bContext *C, struct ID *id, 
int show_buttons, struct ID *parent,
                        struct MTex *slot, const char *preview_id);
 void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, const char 
*propname, int expand);
-void uiTemplateIconView(uiLayout *layout, struct PointerRNA *ptr, const char 
*propname);
+void uiTemplateIconView(uiLayout *layout, struct PointerRNA *ptr, const char 
*propname, int show_labels);
 void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, const char 
*propname);
 void uiTemplateWaveform(uiLayout *layout, struct PointerRNA *ptr, const char 
*propname);
 void uiTemplateVectorscope(uiLayout *layout, struct PointerRNA *ptr, const 
char *propname);
diff --git a/source/blender/editors/interface/interface_templates.c 
b/source/blender/editors/interface/interface_templates.c
index 20ce18b..d164f3c 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -1636,11 +1636,16 @@ void uiTemplateColorRamp(uiLayout *layout, PointerRNA 
*ptr, const char *propname
 
 
 /********************* Icon viewer Template ************************/
+typedef struct IconViewMenuArgs {
+       PointerRNA ptr;
+       PropertyRNA *prop;
+       int show_labels;
+} IconViewMenuArgs;
 
 /* ID Search browse menu, open */
 static uiBlock *ui_icon_view_menu_cb(bContext *C, ARegion *ar, void *arg_litem)
 {
-       static RNAUpdateCb cb;
+       static IconViewMenuArgs args;
        uiBlock *block;
        uiBut *but;
        int icon, value;
@@ -1649,25 +1654,36 @@ static uiBlock *ui_icon_view_menu_cb(bContext *C, 
ARegion *ar, void *arg_litem)
        bool free;
 
        /* arg_litem is malloced, can be freed by parent button */
-       cb = *((RNAUpdateCb *)arg_litem);
+       args = *((IconViewMenuArgs *) arg_litem);
 
        block = UI_block_begin(C, ar, "_popup", UI_EMBOSS_PULLDOWN);
        UI_block_flag_enable(block, UI_BLOCK_LOOP);
-       
-       
-       RNA_property_enum_items(C, &cb.ptr, cb.prop, &item, NULL, &free);
-       
+
+       RNA_property_enum_items(C, &args.ptr, args.prop, &item, NULL, &free);
+
        for (a = 0; item[a].identifier; a++) {
                int x, y;
-               
                /* XXX hardcoded size to 5 x unit */
-               x = (a % 8) * UI_UNIT_X * 5;
-               y = (a / 8) * UI_UNIT_X * 5;
-               
+               int w = UI_UNIT_X * 5;
+               int h = UI_UNIT_Y * 5;
+
+               if(args.show_labels) {
+                       h += (int)(1.25f * UI_UNIT_Y);
+               }
+
+               x = (a % 8) * w;
+               y = (a / 8) * h;
+
                icon = item[a].icon;
                value = item[a].value;
-               but = uiDefIconButR_prop(block, UI_BTYPE_ROW, 0, ICON_NONE, x, 
y, UI_UNIT_X * 5, UI_UNIT_Y * 5,
-                                        &cb.ptr, cb.prop, -1, 0, value, -1, 
-1, NULL);
+               if(args.show_labels) {
+                       but = uiDefIconTextButR_prop(block, UI_BTYPE_ROW, 0, 
icon, item[a].name, x, y, w, h,
+                                            &args.ptr, args.prop, -1, 0, 
value, -1, -1, NULL);
+               }
+               else {
+                       but = uiDefIconButR_prop(block, UI_BTYPE_ROW, 0, icon, 
x, y, w, h,
+                                                &args.ptr, args.prop, -1, 0, 
value, -1, -1, NULL);
+               }
                ui_def_but_icon(but, icon, UI_HAS_ICON | UI_BUT_ICON_PREVIEW);
        }
 
@@ -1681,10 +1697,10 @@ static uiBlock *ui_icon_view_menu_cb(bContext *C, 
ARegion *ar, void *arg_litem)
        return block;
 }
 
-void uiTemplateIconView(uiLayout *layout, PointerRNA *ptr, const char 
*propname)
+void uiTemplateIconView(uiLayout *layout, PointerRNA *ptr, const char 
*propname, int show_labels)
 {
        PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
-       RNAUpdateCb *cb;
+       IconViewMenuArgs *cb_args;
        EnumPropertyItem *items;
        uiBlock *block;
        uiBut *but;
@@ -1702,11 +1718,12 @@ void uiTemplateIconView(uiLayout *layout, PointerRNA 
*ptr, const char *propname)
        value = RNA_property_enum_get(ptr, prop);
        RNA_enum_icon_from_value(items, value, &icon);
 
-       cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb");
-       cb->ptr = *ptr;
-       cb->prop = prop;
+       cb_args = MEM_callocN(sizeof(IconViewMenuArgs), __func__);
+       cb_args->ptr = *ptr;
+       cb_args->prop = prop;
+       cb_args->show_labels = show_labels;
 
-       but = uiDefBlockButN(block, ui_icon_view_menu_cb, cb, "", 0, 0, 
UI_UNIT_X * 6, UI_UNIT_Y * 6, "");
+       but = uiDefBlockButN(block, ui_icon_view_menu_cb, cb_args, "", 0, 0, 
UI_UNIT_X * 6, UI_UNIT_Y * 6, "");
 
        ui_def_but_icon(but, icon, UI_HAS_ICON | UI_BUT_ICON_PREVIEW);
 
diff --git a/source/blender/editors/interface/interface_widgets.c 
b/source/blender/editors/interface/interface_widgets.c
index f5ee8e1..9860c1b 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1518,7 +1518,27 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, 
uiWidgetColors *wcol, uiB
        /* If there's an icon too (made with uiDefIconTextBut) then draw the 
icon
         * and offset the text label to accommodate it */
 
-       if (but->flag & UI_HAS_ICON || show_menu_icon) {
+       /* Big previews with optional text label below */
+       if (but->flag & UI_BUT_ICON_PREVIEW && ui_block_is_menu(but->block)) {
+               const BIFIconID icon = (but->flag & UI_HAS_ICON) ? but->icon + 
but->iconadd : ICON_NONE;
+               const float icon_size = 0.8f * BLI_rcti_size_y(rect);
+               float text_size;
+
+               if(but->drawstr[0] != '\0')
+                       text_size = 0.2f * BLI_rcti_size_y(rect);
+               else
+                       text_size = 0.0f;
+
+               /* draw icon in rect above the space reserved for the label */
+               rect->ymin += text_size;
+               widget_draw_icon(but, icon, alpha, rect, show_menu_icon);
+
+               /* offset rect to draw label in*/
+               rect->ymin -= text_size;
+               rect->ymax -= icon_size;
+       }
+       /* Icons on the left with optional text label on the right */
+       else if (but->flag & UI_HAS_ICON || show_menu_icon) {
                const BIFIconID icon = (but->flag & UI_HAS_ICON) ? but->icon + 
but->iconadd : ICON_NONE;
                const float icon_size = ICON_SIZE_FROM_BUTRECT(rect);
 
diff --git a/source/blender/makesrna/intern/rna_ui_api.c 
b/source/blender/makesrna/intern/rna_ui_api.c
index 832a29a..ce5f44a 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -719,11 +719,12 @@ void RNA_api_ui_layout(StructRNA *srna)
        RNA_def_function_ui_description(func, "Item. A color ramp widget");
        api_ui_item_rna_common(func);
        RNA_def_boolean(func, "expand", false, "", "Expand button to show more 
detail");
-       
+
        func = RNA_def_function(srna, "template_icon_view", 
"uiTemplateIconView");
        RNA_def_function_ui_description(func, "Enum. Large widget showing Icon 
previews");
        api_ui_item_rna_common(func);
-       
+       RNA_def_boolean(func, "show_labels", false, "", "Show enum label in 
preview buttons");
+
        func = RNA_def_function(srna, "template_histogram", 
"uiTemplateHistogram");
        RNA_def_function_ui_description(func, "Item. A histogramm widget to 
analyze imaga data");
        api_ui_item_rna_common(func);
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c 
b/source/blenderplayer/bad_level_call_stubs/stubs.c
index f1cb235..38b58fb 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -471,7 +471,7 @@ void uiLayoutSetEnabled(uiLayout *layout, bool enabled) 
RET_NONE
 void uiLayoutSetAlignment(uiLayout *layout, char alignment) RET_NONE
 void uiLayoutSetScaleX(struct uiLayout *layout, float scale) RET_NONE
 void uiLayoutSetScaleY(struct uiLayout *layout, float scale) RET_NONE
-void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const 
char *propname) RET_NONE
+void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const 
char *propname, int show_labels) RET_NONE
 void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, 
struct Base *base) RET_NONE
 void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int 
calc_tessface) RET_NONE
 void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int 
count) RET_NONE

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to