IconView template: adding optional labels to popup buttons
This commit is contained in:
parent
f01c6e185f
commit
78250f1d1d
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue