From ad625acda82281461267a3379c57ce76d54325a1 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 29 Nov 2017 13:52:06 +1100 Subject: RNA: Allow structs to define tags for their properties Adds support for defining a number of tags as part of the rna-struct definition, which its properties can set similar to property-flags. BPY supports setting these tags when defining custom properties too. * To define tags for a struct (which its properties can use then), define the tags in an `EnumPropertyItem` array, and assign them to the struct using `RNA_def_struct_property_tags(...)`. * To set tags for an RNA-property in C, use the new `RNA_def_property_tags(...)`. * To set tags for an RNA-property in Python, use the newly added tags parameter. E.g. `bpy.props.FloatProperty(name="Some Float", tags={'SOME_TAG', 'ANOTHER_TAG'})`. --- source/blender/makesrna/intern/rna_define.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'source/blender/makesrna/intern/rna_define.c') diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index fd511655c5f..c8a6a503fd9 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -966,6 +966,11 @@ void RNA_def_struct_clear_flag(StructRNA *srna, int flag) srna->flag &= ~flag; } +void RNA_def_struct_property_tags(StructRNA *srna, const EnumPropertyItem *prop_tag_defines) +{ + srna->prop_tag_defines = prop_tag_defines; +} + void RNA_def_struct_refine_func(StructRNA *srna, const char *refine) { if (!DefRNA.preprocess) { @@ -1280,6 +1285,18 @@ void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag) prop->flag &= ~flag; } +/** + * Add the property-tags passed as \a tags to \a prop (if valid). + * + * \note Multiple tags can be set by passing them within \a tags (using bitflags). + * \note Doesn't do any type-checking with the tags defined in the parent StructRNA + * of \a prop. This should be done before (e.g. see #WM_operatortype_prop_tag). + */ +void RNA_def_property_tags(PropertyRNA *prop, int tags) +{ + prop->tags |= tags; +} + void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter) { prop->flag |= flag_property; -- cgit v1.2.3