Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2020-10-13 20:43:28 +0300
committerHans Goudey <h.goudey@me.com>2020-10-13 20:43:28 +0300
commit96dd299055a1ce35819480f3c4b938f8e6f91537 (patch)
treeb2a1149e4e9da41c967595f947314e33dd5ec6ea /source/blender/makesrna/intern/rna_ui_api.c
parent9fe581758851c98a8e43f0e8a02d70551352682d (diff)
UI: Add highlight arguments to tab buttons
This adds arguments to `uiLayout.prop_tabs_enum` and the C equivalent (`uiItemTabsEnumR_prop`) to gray out tabs based on a boolean array. For property search in multiple tabs, we need a way to show which tabs have a search result, but we still need to show which tab is active. Differential Revision: https://developer.blender.org/D8858
Diffstat (limited to 'source/blender/makesrna/intern/rna_ui_api.c')
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 47d9e3e146a..447f5b4210b 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -216,8 +216,13 @@ static void rna_uiItemMenuEnumR(uiLayout *layout,
uiItemMenuEnumR_prop(layout, ptr, prop, name, icon);
}
-static void rna_uiItemTabsEnumR(
- uiLayout *layout, bContext *C, struct PointerRNA *ptr, const char *propname, bool icon_only)
+static void rna_uiItemTabsEnumR(uiLayout *layout,
+ bContext *C,
+ struct PointerRNA *ptr,
+ const char *propname,
+ struct PointerRNA *ptr_highlight,
+ const char *propname_highlight,
+ bool icon_only)
{
PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
@@ -230,7 +235,31 @@ static void rna_uiItemTabsEnumR(
return;
}
- uiItemTabsEnumR_prop(layout, C, ptr, prop, icon_only);
+ /* Get the highlight property used to gray out some of the tabs. */
+ PropertyRNA *prop_highlight = NULL;
+ if (!RNA_pointer_is_null(ptr_highlight)) {
+ prop_highlight = RNA_struct_find_property(ptr_highlight, propname_highlight);
+ if (!prop_highlight) {
+ RNA_warning("property not found: %s.%s",
+ RNA_struct_identifier(ptr_highlight->type),
+ propname_highlight);
+ return;
+ }
+ if (RNA_property_type(prop_highlight) != PROP_BOOLEAN) {
+ RNA_warning("property is not a boolean: %s.%s",
+ RNA_struct_identifier(ptr_highlight->type),
+ propname_highlight);
+ return;
+ }
+ if (!RNA_property_array_check(prop_highlight)) {
+ RNA_warning("property is not an array: %s.%s",
+ RNA_struct_identifier(ptr_highlight->type),
+ propname_highlight);
+ return;
+ }
+ }
+
+ uiItemTabsEnumR_prop(layout, C, ptr, prop, ptr_highlight, prop_highlight, icon_only);
}
static void rna_uiItemEnumR_string(uiLayout *layout,
@@ -929,6 +958,11 @@ void RNA_api_ui_layout(StructRNA *srna)
func = RNA_def_function(srna, "prop_tabs_enum", "rna_uiItemTabsEnumR");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
api_ui_item_rna_common(func);
+ parm = RNA_def_pointer(
+ func, "data_highlight", "AnyType", "", "Data from which to take highlight property");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_RNAPTR);
+ parm = RNA_def_string(
+ func, "property_highlight", NULL, 0, "", "Identifier of highlight property in data");
RNA_def_boolean(func, "icon_only", false, "", "Draw only icons in tabs, no text");
func = RNA_def_function(srna, "prop_enum", "rna_uiItemEnumR_string");