diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-12-26 23:38:52 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-12-26 23:38:52 +0300 |
commit | 82cf2aebba1c340c1c4fffde1e89fc80a4591fea (patch) | |
tree | 18d58c3ce61401b4fcd077f902e06235cab737be /source/blender/makesrna | |
parent | 254fc41b56e8c4f828e9721a045c8c5108044d0a (diff) |
RNA:
* Added support for using pointers + collections as operator properties,
but with the restriction that they must point to other type derived from
ID property groups. The "add" function for these properties will allocate
a new ID property group and point to that.
* Added support for arrays with type IDP_GROUP in ID properties.
* Fix bug getting/setting float array values.
Example code for collections, note the "OperatorMousePath" type is defined
in rna_wm.c and has a float[2] property named "loc".
Defining the operator property:
prop= RNA_def_property(ot->srna, "path", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_runtime(prop, &RNA_OperatorMousePath);
Adding values:
PointerRNA itemptr;
float loc[2] = {1, 1},
RNA_collection_add(op->ptr, "path", &itemptr);
RNA_float_set_array(&itemptr, "loc", loc);
Iterating:
RNA_BEGIN(op->ptr, itemptr, "path") {
float loc[2];
RNA_float_get_array(&itemptr, "loc", loc);
printf("Location: %f %f\n", loc[0], loc[1]);
}
RNA_END;
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 26 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_define.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_types.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 24 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ID.c | 5 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_access.c | 224 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_define.c | 27 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_internal.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm.c | 21 |
9 files changed, 295 insertions, 35 deletions
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 56325079ad2..17a0556e65e 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -50,7 +50,6 @@ extern StructRNA RNA_CollectionProperty; extern StructRNA RNA_CollisionSensor; extern StructRNA RNA_ColorSequence; extern StructRNA RNA_Constraint; -// ... constraint types... extern StructRNA RNA_Controller; extern StructRNA RNA_Curve; extern StructRNA RNA_CurveMap; @@ -119,6 +118,7 @@ extern StructRNA RNA_NodeTree; extern StructRNA RNA_NorController; extern StructRNA RNA_Object; extern StructRNA RNA_Operator; +extern StructRNA RNA_OperatorMousePath; extern StructRNA RNA_OperatorProperties; extern StructRNA RNA_OrController; extern StructRNA RNA_PackedFile; @@ -266,6 +266,11 @@ int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop); int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr); int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr); +/* to create ID property groups */ +void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop); +void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr); +void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop); + /* Path * * Experimental method to refer to structs and properties with a string, @@ -329,6 +334,25 @@ char *RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, in int RNA_string_length(PointerRNA *ptr, const char *name); void RNA_string_set(PointerRNA *ptr, const char *name, const char *value); +void RNA_pointer_get(PointerRNA *ptr, const char *name, PointerRNA *r_value); +void RNA_pointer_add(PointerRNA *ptr, const char *name); + +void RNA_collection_begin(PointerRNA *ptr, const char *name, CollectionPropertyIterator *iter); +int RNA_collection_length(PointerRNA *ptr, const char *name); +void RNA_collection_add(PointerRNA *ptr, const char *name, PointerRNA *r_value); +void RNA_collection_clear(PointerRNA *ptr, const char *name); + +#define RNA_BEGIN(sptr, itemptr, propname) \ + { \ + CollectionPropertyIterator rna_macro_iter; \ + for(RNA_collection_begin(sptr, propname, &rna_macro_iter); rna_macro_iter.valid; RNA_property_collection_next(&rna_macro_iter)) { \ + PointerRNA itemptr= rna_macro_iter.ptr; + +#define RNA_END \ + } \ + RNA_property_collection_end(&rna_macro_iter); \ + } + /* check if the idproperty exists, for operators */ int RNA_property_is_set(PointerRNA *ptr, const char *name); diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index d7df58ca61c..12711a1b95d 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -69,6 +69,7 @@ void RNA_def_property_range(PropertyRNA *prop, double min, double max); void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item); void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength); void RNA_def_property_struct_type(PropertyRNA *prop, const char *type); +void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type); void RNA_def_property_boolean_default(PropertyRNA *prop, int value); void RNA_def_property_boolean_array_default(PropertyRNA *prop, const int *array); diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index fac42821e09..e4aceb0a81b 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -110,6 +110,7 @@ typedef struct CollectionPropertyIterator { PointerRNA parent; struct PropertyRNA *prop; void *internal; + int idprop; int valid; PointerRNA ptr; diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index ed408a26c9a..86b40e6a828 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -525,17 +525,19 @@ static void rna_def_property_funcs(FILE *f, PropertyDefRNA *dp) cprop->length= (void*)rna_def_property_length_func(f, srna, prop, dp); } - if(!cprop->begin) { - fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a begin function.\n", srna->identifier, prop->identifier); - DefRNA.error= 1; - } - if(!cprop->next) { - fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a next function.\n", srna->identifier, prop->identifier); - DefRNA.error= 1; - } - if(!cprop->get) { - fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a get function.\n", srna->identifier, prop->identifier); - DefRNA.error= 1; + if(!(prop->flag & PROP_IDPROPERTY)) { + if(!cprop->begin) { + fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a begin function.\n", srna->identifier, prop->identifier); + DefRNA.error= 1; + } + if(!cprop->next) { + fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a next function.\n", srna->identifier, prop->identifier); + DefRNA.error= 1; + } + if(!cprop->get) { + fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have a get function.\n", srna->identifier, prop->identifier); + DefRNA.error= 1; + } } if(!cprop->structtype && !cprop->type) { fprintf(stderr, "rna_def_property_funcs: %s.%s, collection must have either type function or fixed type.\n", srna->identifier, prop->identifier); diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 0d927f332dc..ba252f30994 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -110,7 +110,6 @@ static void rna_def_ID_properties(BlenderRNA *brna) srna= RNA_def_struct(brna, "IDProperty", NULL); RNA_def_struct_ui_text(srna, "ID Property", "stores arbitrary properties"); - /* IDP_STRING */ prop= RNA_def_property(srna, "string", PROP_STRING, PROP_NONE); RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY); @@ -144,6 +143,10 @@ static void rna_def_ID_properties(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EXPORT|PROP_NOT_EDITABLE|PROP_IDPROPERTY); RNA_def_property_struct_type(prop, "IDPropertyGroup"); + prop= RNA_def_property(srna, "collection", PROP_COLLECTION, PROP_NONE); + RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY); + RNA_def_property_struct_type(prop, "IDPropertyGroup"); + /* IDP_ID -- not implemented yet in id properties */ /* ID property groups > level 0, since level 0 group is merged diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 1fb5699b79d..1d29efa2463 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -101,7 +101,7 @@ IDProperty *rna_idproperties_get(StructRNA *type, void *data, int create) { if(type->flag & STRUCT_ID) return IDP_GetProperties(data, create); - else if(type == &RNA_IDPropertyGroup) + else if(type == &RNA_IDPropertyGroup || type->from == &RNA_IDPropertyGroup) return data; else if(type->from == &RNA_OperatorProperties) { IDProperty **properties= (IDProperty**)data; @@ -109,7 +109,7 @@ IDProperty *rna_idproperties_get(StructRNA *type, void *data, int create) if(create && !*properties) { IDPropertyTemplate val; val.i = 0; /* silence MSVC warning about uninitialized var when debugging */ - *properties= IDP_New(IDP_GROUP, val, "property"); + *properties= IDP_New(IDP_GROUP, val, "RNA_OperatorProperties group"); } return *properties; @@ -141,7 +141,11 @@ static int rna_idproperty_verify_valid(PropertyRNA *prop, IDProperty *idprop) switch(idprop->type) { case IDP_ARRAY: - if(prop->arraylength != idprop->len) + if(idprop->subtype == IDP_GROUP) { + if(prop->type != PROP_COLLECTION) + return 0; + } + else if(prop->arraylength != idprop->len) return 0; if(idprop->subtype == IDP_FLOAT && prop->type != PROP_FLOAT) @@ -214,7 +218,8 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr) static PropertyRNA *arraytypemap[IDP_NUMTYPES] = {NULL, (PropertyRNA*)&rna_IDProperty_intarray, (PropertyRNA*)&rna_IDProperty_floatarray, - NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, + (PropertyRNA*)&rna_IDProperty_collection, NULL, (PropertyRNA*)&rna_IDProperty_doublearray}; IDProperty *idprop= (IDProperty*)(*prop); @@ -702,7 +707,7 @@ float RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, int index IDProperty *idprop; if((idprop=rna_idproperty_check(&prop, ptr))) { - if(idprop->type == IDP_FLOAT) + if(idprop->subtype == IDP_FLOAT) return ((float*)IDP_Array(idprop))[index]; else return (float)(((double*)IDP_Array(idprop))[index]); @@ -719,7 +724,7 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, int index, IDProperty *idprop; if((idprop=rna_idproperty_check(&prop, ptr))) { - if(idprop->type == IDP_FLOAT) + if(idprop->subtype == IDP_FLOAT) ((float*)IDP_Array(idprop))[index]= value; else ((double*)IDP_Array(idprop))[index]= value; @@ -889,6 +894,27 @@ void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *pt pprop->set(ptr, ptr_value->data); } +void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop) +{ + IDProperty *idprop; + + if((idprop=rna_idproperty_check(&prop, ptr))) { + /* already exists */ + } + else if(prop->flag & PROP_IDPROPERTY) { + IDPropertyTemplate val; + IDProperty *group; + + val.i= 0; + + group= rna_idproperties_get(ptr->type, ptr->data, 1); + if(group) + IDP_AddToGroup(group, IDP_New(IDP_GROUP, val, (char*)prop->identifier)); + } + else + printf("RNA_property_pointer_add %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier); +} + static StructRNA *rna_property_collection_type(CollectionPropertyIterator *iter) { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop; @@ -920,49 +946,95 @@ static void rna_property_collection_get(CollectionPropertyIterator *iter) memset(&iter->ptr, 0, sizeof(iter->ptr)); } +static void rna_property_collection_get_idp(CollectionPropertyIterator *iter) +{ + CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop; + + iter->ptr.data= rna_iterator_array_dereference_get(iter); + iter->ptr.type= cprop->structtype; + rna_pointer_inherit_id(cprop->structtype, &iter->parent, &iter->ptr); +} + void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, CollectionPropertyIterator *iter) { - CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; + IDProperty *idprop; - if(cprop->begin) { + if((idprop=rna_idproperty_check(&prop, ptr)) || (prop->flag & PROP_IDPROPERTY)) { iter->parent= *ptr; iter->prop= prop; - cprop->begin(iter, ptr); + + if(idprop) + rna_iterator_array_begin(iter, IDP_Array(idprop), sizeof(void*), idprop->len, NULL); + else + rna_iterator_array_begin(iter, NULL, sizeof(void*), 0, NULL); if(iter->valid) - rna_property_collection_get(iter); + rna_property_collection_get_idp(iter); else memset(&iter->ptr, 0, sizeof(iter->ptr)); + + iter->idprop= 1; + } + else { + CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; + + if(cprop->begin) { + iter->parent= *ptr; + iter->prop= prop; + iter->idprop= 0; + cprop->begin(iter, ptr); + + if(iter->valid) + rna_property_collection_get(iter); + else + memset(&iter->ptr, 0, sizeof(iter->ptr)); + } + else + memset(iter, 0, sizeof(*iter)); } - else - memset(iter, 0, sizeof(*iter)); } void RNA_property_collection_next(CollectionPropertyIterator *iter) { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop; - cprop->next(iter); + if(iter->idprop) { + rna_iterator_array_next(iter); - if(iter->valid) - rna_property_collection_get(iter); - else - memset(&iter->ptr, 0, sizeof(iter->ptr)); + if(iter->valid) + rna_property_collection_get_idp(iter); + else + memset(&iter->ptr, 0, sizeof(iter->ptr)); + } + else { + cprop->next(iter); + + if(iter->valid) + rna_property_collection_get(iter); + else + memset(&iter->ptr, 0, sizeof(iter->ptr)); + } } void RNA_property_collection_end(CollectionPropertyIterator *iter) { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop; - if(cprop->end) + if(iter->idprop) + rna_iterator_array_end(iter); + else if(cprop->end) cprop->end(iter); } int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop) { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; + IDProperty *idprop; - if(cprop->length) { + if((idprop=rna_idproperty_check(&prop, ptr))) { + return idprop->len; + } + else if(cprop->length) { return cprop->length(ptr); } else { @@ -978,6 +1050,51 @@ int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop) } } +void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr) +{ + IDProperty *idprop; + + if((idprop=rna_idproperty_check(&prop, ptr))) { + IDP_ResizeArray(idprop, idprop->len+1); + } + else if(prop->flag & PROP_IDPROPERTY) { + IDPropertyTemplate val; + IDProperty *group; + + val.array.len= 1; + val.array.type= IDP_GROUP; + + group= rna_idproperties_get(ptr->type, ptr->data, 1); + if(group) { + idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier); + IDP_AddToGroup(group, idprop); + } + } + else + printf("RNA_property_collection_add %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier); + + if(r_ptr) { + if(idprop) { + CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; + IDProperty **array= (IDProperty**)IDP_Array(idprop); + + r_ptr->data= array[idprop->len-1]; + r_ptr->type= cprop->structtype; + rna_pointer_inherit_id(NULL, ptr, r_ptr); + } + else + memset(r_ptr, 0, sizeof(*r_ptr)); + } +} + +void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop) +{ + IDProperty *idprop; + + if((idprop=rna_idproperty_check(&prop, ptr))) + IDP_FreeArray(idprop); +} + int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr) { CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; @@ -1666,6 +1783,69 @@ void RNA_string_set(PointerRNA *ptr, const char *name, const char *value) printf("RNA_string_set: %s.%s not found.\n", ptr->type->identifier, name); } +void RNA_pointer_get(PointerRNA *ptr, const char *name, PointerRNA *r_value) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) + RNA_property_pointer_get(ptr, prop, r_value); + else + printf("RNA_pointer_get: %s.%s not found.\n", ptr->type->identifier, name); +} + +void RNA_pointer_add(PointerRNA *ptr, const char *name) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) + RNA_property_pointer_add(ptr, prop); + else + printf("RNA_pointer_set: %s.%s not found.\n", ptr->type->identifier, name); +} + +void RNA_collection_begin(PointerRNA *ptr, const char *name, CollectionPropertyIterator *iter) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) + RNA_property_collection_begin(ptr, prop, iter); + else + printf("RNA_collection_begin: %s.%s not found.\n", ptr->type->identifier, name); +} + +void RNA_collection_add(PointerRNA *ptr, const char *name, PointerRNA *r_value) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) + RNA_property_collection_add(ptr, prop, r_value); + else + printf("RNA_collection_add: %s.%s not found.\n", ptr->type->identifier, name); +} + +void RNA_collection_clear(PointerRNA *ptr, const char *name) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) + RNA_property_collection_clear(ptr, prop); + else + printf("RNA_collection_clear: %s.%s not found.\n", ptr->type->identifier, name); +} + +int RNA_collection_length(PointerRNA *ptr, const char *name) +{ + PropertyRNA *prop= RNA_struct_find_property(ptr, name); + + if(prop) { + return RNA_property_collection_length(ptr, prop); + } + else { + printf("RNA_collection_length: %s.%s not found.\n", ptr->type->identifier, name); + return 0; + } +} + int RNA_property_is_set(PointerRNA *ptr, const char *name) { PropertyRNA *prop= RNA_struct_find_property(ptr, name); @@ -1679,8 +1859,8 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name) } } -/* string representation of a property, python compatible but - * cant be used for display too*/ +/* string representation of a property, python + * compatible but can be used for display too*/ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop) { int type = RNA_property_type(ptr, prop); @@ -1768,4 +1948,4 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop) cstring = BLI_dynstr_get_cstring(dynstr); BLI_dynstr_free(dynstr); return cstring; -}
\ No newline at end of file +} diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 14e4763d2c0..05dba91757b 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -804,6 +804,33 @@ void RNA_def_property_struct_type(PropertyRNA *prop, const char *type) } } +void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type) +{ + StructRNA *srna= DefRNA.laststruct; + + if(DefRNA.preprocess) { + fprintf(stderr, "RNA_def_property_struct_runtime: only at runtime.\n"); + return; + } + + switch(prop->type) { + case PROP_POINTER: { + PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop; + pprop->structtype = type; + break; + } + case PROP_COLLECTION: { + CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop; + cprop->structtype = type; + break; + } + default: + fprintf(stderr, "RNA_def_property_struct_runtime: %s.%s, invalid type for struct type.\n", srna->identifier, prop->identifier); + DefRNA.error= 1; + break; + } +} + void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item) { StructRNA *srna= DefRNA.laststruct; diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index d296238edae..435f00c9c2b 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -140,6 +140,7 @@ extern IntPropertyRNA rna_IDProperty_intarray; extern FloatPropertyRNA rna_IDProperty_float; extern FloatPropertyRNA rna_IDProperty_floatarray; extern PointerPropertyRNA rna_IDProperty_group; +extern CollectionPropertyRNA rna_IDProperty_collection; extern FloatPropertyRNA rna_IDProperty_double; extern FloatPropertyRNA rna_IDProperty_doublearray; diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index a7a510bc428..1b9efa92a1b 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -92,6 +92,26 @@ static void rna_def_operator(BlenderRNA *brna) srna= RNA_def_struct(brna, "OperatorProperties", NULL); RNA_def_struct_ui_text(srna, "Operator Properties", "DOC_BROKEN"); RNA_def_struct_funcs(srna, NULL, "rna_OperatorProperties_refine"); + + +} + +static void rna_def_operator_utils(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "OperatorMousePath", "IDPropertyGroup"); + RNA_def_struct_ui_text(srna, "Operator Mouse Path", "Mouse path values for operators."); + + prop= RNA_def_property(srna, "loc", PROP_FLOAT, PROP_VECTOR); + RNA_def_property_flag(prop, PROP_IDPROPERTY); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_text(prop, "Location", "Mouse location."); + + prop= RNA_def_property(srna, "time", PROP_FLOAT, PROP_NONE); + RNA_def_property_flag(prop, PROP_IDPROPERTY); + RNA_def_property_ui_text(prop, "Time", "Time of mouse location."); } static void rna_def_windowmanager(BlenderRNA *brna) @@ -111,6 +131,7 @@ static void rna_def_windowmanager(BlenderRNA *brna) void RNA_def_wm(BlenderRNA *brna) { rna_def_operator(brna); + rna_def_operator_utils(brna); rna_def_windowmanager(brna); } |