UI: use checkbox text for property split layout

Use right aligned checkboxes when 'use_property_split' is enabled
instead of a separate label.
This commit is contained in:
Campbell Barton 2019-03-22 15:29:25 +11:00
parent bd2299aae5
commit 813694e07b
1 changed files with 27 additions and 20 deletions

View File

@ -1572,6 +1572,13 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
bool is_array;
const bool use_prop_sep = ((layout->item.flag & UI_ITEM_PROP_SEP) != 0);
/* By default 'use_prop_sep' uses a separate column for labels.
* This is an exception for check-boxes otherwise only the small checkbox region is clickable.
*
* Keep using 'use_prop_sep' instead of disabling it entirely because
* we need the ability to have decorators still. */
bool use_prop_set_split_label = use_prop_sep;
#ifdef UI_PROP_DECORATE
struct {
bool use_prop_decorate;
@ -1602,6 +1609,14 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
}
}
#ifdef UI_PROP_SEP_ICON_WIDTH_EXCEPTION
if (use_prop_sep) {
if (type == PROP_BOOLEAN && (icon == ICON_NONE) && !icon_only) {
use_prop_set_split_label = false;
}
}
#endif
if (icon == ICON_NONE)
icon = RNA_property_ui_icon(prop);
@ -1691,25 +1706,16 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
}
#endif /* UI_PROP_DECORATE */
if (name[0] == '\0') {
if ((name[0] == '\0') || (use_prop_set_split_label == false)) {
/* Ensure we get a column when text is not set. */
layout = uiLayoutColumn(layout_row ? layout_row : layout, true);
layout->space = 0;
}
else {
const PropertySubType subtype = RNA_property_subtype(prop);
uiLayout *layout_split;
#ifdef UI_PROP_SEP_ICON_WIDTH_EXCEPTION
if (type == PROP_BOOLEAN && (icon == ICON_NONE) && !icon_only) {
layout_split = uiLayoutRow(layout_row ? layout_row : layout, true);
}
else
#endif /* UI_PROP_SEP_ICON_WIDTH_EXCEPTION */
{
layout_split = uiLayoutSplit(
layout_row ? layout_row : layout,
UI_ITEM_PROP_SEP_DIVIDE, true);
}
uiLayout *layout_split = uiLayoutSplit(
layout_row ? layout_row : layout,
UI_ITEM_PROP_SEP_DIVIDE, true);
layout_split->space = 0;
uiLayout *layout_sub = uiLayoutColumn(layout_split, true);
layout_sub->space = 0;
@ -1771,12 +1777,6 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
layout = uiLayoutColumn(layout_split, true);
}
layout->space = 0;
#ifdef UI_PROP_SEP_ICON_WIDTH_EXCEPTION
if (type == PROP_BOOLEAN && (icon == ICON_NONE) && !icon_only) {
w = UI_UNIT_X;
}
#endif /* UI_PROP_SEP_ICON_WIDTH_EXCEPTION */
}
#ifdef UI_PROP_DECORATE
@ -1797,7 +1797,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
if (index == RNA_NO_INDEX && is_array) {
ui_item_array(
layout, block, name, icon, ptr, prop, len, 0, 0, w, h,
expand, slider, toggle, icon_only, compact, !use_prop_sep);
expand, slider, toggle, icon_only, compact, !use_prop_set_split_label);
}
/* enum item */
else if (type == PROP_ENUM && index == RNA_ENUM_VALUE) {
@ -1838,6 +1838,13 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
if (layout->activate_init)
UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
if (use_prop_set_split_label == false) {
/* When the button uses it's own text right align it. */
but->drawflag |= UI_BUT_TEXT_RIGHT;
but->drawflag &= ~UI_BUT_TEXT_LEFT;
}
}
/* Mark non-embossed textfields inside a listbox. */