diff options
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_ui_api.c | 40 |
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"); |