diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2017-11-29 05:52:06 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-11-29 05:53:34 +0300 |
commit | ad625acda82281461267a3379c57ce76d54325a1 (patch) | |
tree | 22b2b7c583ba35c33cfec4aac7608f5f62e6e2c8 /source/blender/makesrna/intern/rna_access.c | |
parent | 0b325ba201269b3c8aab6e61c70f15c1758737d8 (diff) |
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'})`.
Diffstat (limited to 'source/blender/makesrna/intern/rna_access.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_access.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 14e0f6d45aa..7f5c57b1e24 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -565,6 +565,11 @@ PropertyRNA *RNA_struct_name_property(StructRNA *type) return type->nameproperty; } +const EnumPropertyItem *RNA_struct_property_tag_defines(const StructRNA *type) +{ + return type->prop_tag_defines; +} + PropertyRNA *RNA_struct_iterator_property(StructRNA *type) { return type->iteratorproperty; @@ -930,6 +935,17 @@ int RNA_property_flag(PropertyRNA *prop) return rna_ensure_property(prop)->flag; } +/** + * Get the tags set for \a prop as int bitfield. + * \note Doesn't perform any validity check on the set bits. #RNA_def_property_tags does this + * in debug builds (to avoid performance issues in non-debug builds), which should be + * the only way to set tags. Hence, at this point we assume the tag bitfield to be valid. + */ +int RNA_property_tags(PropertyRNA *prop) +{ + return rna_ensure_property(prop)->tags; +} + bool RNA_property_builtin(PropertyRNA *prop) { return (rna_ensure_property(prop)->flag_internal & PROP_INTERN_BUILTIN) != 0; @@ -1596,6 +1612,18 @@ int RNA_enum_from_value(const EnumPropertyItem *item, const int value) return -1; } +unsigned int RNA_enum_items_count(const EnumPropertyItem *item) +{ + unsigned int i = 0; + + while (item->identifier) { + item++; + i++; + } + + return i; +} + bool RNA_property_enum_identifier(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier) { |