diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_rna.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_rna.c | 99 |
1 files changed, 66 insertions, 33 deletions
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c index 81b0df1d840..4402f0a3665 100644 --- a/source/blender/makesrna/intern/rna_rna.c +++ b/source/blender/makesrna/intern/rna_rna.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** @@ -54,6 +54,7 @@ EnumPropertyItem property_unit_items[] = { #ifdef RNA_RUNTIME #include "MEM_guardedalloc.h" +#include "BLI_utildefines.h" #include "BLI_ghash.h" /* Struct */ @@ -115,11 +116,12 @@ static int rna_idproperty_known(CollectionPropertyIterator *iter, void *data) /* function to skip any id properties that are already known by RNA, * for the second loop where we go over unknown id properties */ + do { + for(prop= ptype->cont.properties.first; prop; prop=prop->next) + if((prop->flag & PROP_BUILTIN) == 0 && strcmp(prop->identifier, idprop->name) == 0) + return 1; + } while((ptype=ptype->base)); - for(prop= ptype->cont.properties.first; prop; prop=prop->next) - if(strcmp(prop->identifier, idprop->name) == 0) - return 1; - return 0; } @@ -299,13 +301,12 @@ PointerRNA rna_builtin_properties_get(CollectionPropertyIterator *iter) return rna_Struct_properties_get(iter); } -PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key) +int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr) { StructRNA *srna; PropertyRNA *prop; - PointerRNA propptr; + PointerRNA propptr= {{0}}; - memset(&propptr, 0, sizeof(propptr)); srna= ptr->type; do { @@ -315,15 +316,20 @@ PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key if(prop) { propptr.type= &RNA_Property; propptr.data= prop; - return propptr; + + *r_ptr= propptr; + return TRUE; } } + else { + for(prop=srna->cont.properties.first; prop; prop=prop->next) { + if(!(prop->flag & PROP_BUILTIN) && strcmp(prop->identifier, key)==0) { + propptr.type= &RNA_Property; + propptr.data= prop; - for(prop=srna->cont.properties.first; prop; prop=prop->next) { - if(!(prop->flag & PROP_BUILTIN) && strcmp(prop->identifier, key)==0) { - propptr.type= &RNA_Property; - propptr.data= prop; - return propptr; + *r_ptr= propptr; + return TRUE; + } } } } while((srna=srna->base)); @@ -342,13 +348,15 @@ PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key if(strcmp(idp->name, key) == 0) { propptr.type= &RNA_Property; propptr.data= idp; - return propptr; + + *r_ptr= propptr; + return TRUE; } } } } #endif - return propptr; + return FALSE; } PointerRNA rna_builtin_type_get(PointerRNA *ptr) @@ -474,6 +482,18 @@ static int rna_Property_is_never_none_get(PointerRNA *ptr) return prop->flag & PROP_NEVER_NULL ? 1:0; } +static int rna_Property_is_hidden_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + return prop->flag & PROP_HIDDEN ? 1:0; +} + +static int rna_Property_is_enum_flag_get(PointerRNA *ptr) +{ + PropertyRNA *prop= (PropertyRNA*)ptr->data; + return prop->flag & PROP_ENUM_FLAG ? 1:0; +} + static int rna_Property_array_length_get(PointerRNA *ptr) { PropertyRNA *prop= (PropertyRNA*)ptr->data; @@ -836,34 +856,29 @@ static int rna_BlenderRNA_structs_length(PointerRNA *ptr) { return BLI_countlist(&((BlenderRNA*)ptr->data)->structs); } -static PointerRNA rna_BlenderRNA_structs_lookup_int(PointerRNA *ptr, int index) +static int rna_BlenderRNA_structs_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr) { StructRNA *srna= BLI_findlink(&((BlenderRNA*)ptr->data)->structs, index); if(srna) { - PointerRNA r_ptr; - RNA_pointer_create(NULL, &RNA_Struct, srna, &r_ptr); - return r_ptr; + RNA_pointer_create(NULL, &RNA_Struct, srna, r_ptr); + return TRUE; } else { - return PointerRNA_NULL; + return FALSE; } } -static PointerRNA rna_BlenderRNA_structs_lookup_string(PointerRNA *ptr, const char *key) +static int rna_BlenderRNA_structs_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr) { StructRNA *srna= ((BlenderRNA*)ptr->data)->structs.first; - for(; srna; srna=srna->cont.next) - if(key[0] == srna->identifier[0] && strcmp(key, srna->identifier)==0) - break; - - if(srna) { - PointerRNA r_ptr; - RNA_pointer_create(NULL, &RNA_Struct, srna, &r_ptr); - return r_ptr; - } - else { - return PointerRNA_NULL; + for(; srna; srna=srna->cont.next) { + if(key[0] == srna->identifier[0] && strcmp(key, srna->identifier)==0) { + RNA_pointer_create(NULL, &RNA_Struct, srna, r_ptr); + return TRUE; + } } + + return FALSE; } @@ -1011,6 +1026,11 @@ static void rna_def_property(BlenderRNA *brna) RNA_def_property_boolean_funcs(prop, "rna_Property_is_never_none_get", NULL); RNA_def_property_ui_text(prop, "Never None", "True when this value can't be set to None"); + prop= RNA_def_property(srna, "is_hidden", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, "rna_Property_is_hidden_get", NULL); + RNA_def_property_ui_text(prop, "Hidden", "True when the property is hidden"); + prop= RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_boolean_funcs(prop, "rna_Property_use_output_get", NULL); @@ -1030,6 +1050,11 @@ static void rna_def_property(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_boolean_funcs(prop, "rna_Property_runtime_get", NULL); RNA_def_property_ui_text(prop, "Read Only", "Property is editable through RNA"); + + prop= RNA_def_property(srna, "is_enum_flag", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, "rna_Property_is_enum_flag_get", NULL); + RNA_def_property_ui_text(prop, "Enum Flag", "True when multiple enums "); } static void rna_def_function(BlenderRNA *brna) @@ -1195,6 +1220,14 @@ static void rna_def_enum_property(BlenderRNA *brna, StructRNA *srna) RNA_def_property_enum_funcs(prop, "rna_EnumProperty_default_get", NULL, "rna_EnumProperty_default_itemf"); RNA_def_property_ui_text(prop, "Default", "Default value for this enum"); + /* same 'default' but uses 'PROP_ENUM_FLAG' */ + prop= RNA_def_property(srna, "default_flag", PROP_ENUM, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_flag(prop, PROP_ENUM_FLAG); + RNA_def_property_enum_items(prop, default_dummy_items); + RNA_def_property_enum_funcs(prop, "rna_EnumProperty_default_get", NULL, "rna_EnumProperty_default_itemf"); + RNA_def_property_ui_text(prop, "Default", "Default value for this enum"); + prop= RNA_def_property(srna, "items", PROP_COLLECTION, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_struct_type(prop, "EnumPropertyItem"); |