diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-12-26 06:56:52 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-12-26 06:56:52 +0300 |
commit | 0054e6d354f1b38a0788cc7716c52f07b16dd895 (patch) | |
tree | d1291cb9670e579ba41d128211ec505755b0f030 /source/blender/makesrna | |
parent | 27d0394ba47fdc6c65ec2f3920b52c64264879c2 (diff) |
* added RNA_property_as_string to rna_access.c - can print most types except for pointers and collections.
* WM_operator_pystring to print the python func+args for an operator
* call WM_operator_print(op) in wm_operator_invoke(), simple echo mode should be moved later.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_access.c | 90 |
2 files changed, 93 insertions, 0 deletions
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index cb57343a50e..927da6dc641 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -331,6 +331,9 @@ void RNA_string_set(PointerRNA *ptr, const char *name, const char *value); /* check if the idproperty exists, for operators */ int RNA_property_is_set(PointerRNA *ptr, const char *name); +/* python compatible string representation of this property, (must be freed!) */ +char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop); + #endif /* RNA_ACCESS */ diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 13b8a34356d..1fb5699b79d 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -1679,3 +1679,93 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name) } } +/* string representation of a property, python compatible but + * cant be used for display too*/ +char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop) +{ + int type = RNA_property_type(ptr, prop); + int len = RNA_property_array_length(ptr, prop); + int i; + + DynStr *dynstr= BLI_dynstr_new(); + char *cstring; + + + /* see if we can coorce into a python type - PropertyType */ + switch (type) { + case PROP_BOOLEAN: + if (len==0) { + BLI_dynstr_append(dynstr, RNA_property_boolean_get(ptr, prop) ? "True" : "False"); + } + else { + BLI_dynstr_append(dynstr, "("); + for(i=0; i<len; i++) { + BLI_dynstr_appendf(dynstr, i?"%s, ":"%s", RNA_property_boolean_get_array(ptr, prop, i) ? "True" : "False"); + } + BLI_dynstr_append(dynstr, ")"); + } + break; + case PROP_INT: + if (len==0) { + BLI_dynstr_appendf(dynstr, "%d", RNA_property_int_get(ptr, prop)); + } + else { + BLI_dynstr_append(dynstr, "("); + for(i=0; i<len; i++) { + BLI_dynstr_appendf(dynstr, i?"%d, ":"%d", RNA_property_int_get_array(ptr, prop, i)); + } + BLI_dynstr_append(dynstr, ")"); + } + break; + case PROP_FLOAT: + if (len==0) { + BLI_dynstr_appendf(dynstr, "%f", RNA_property_int_get(ptr, prop)); + } + else { + BLI_dynstr_append(dynstr, "("); + for(i=0; i<len; i++) { + BLI_dynstr_appendf(dynstr, i?"%f, ":"%f", RNA_property_float_get_array(ptr, prop, i)); + } + BLI_dynstr_append(dynstr, ")"); + } + break; + case PROP_STRING: + { + /* string arrays dont exist */ + char *buf; + buf = RNA_property_string_get_alloc(ptr, prop, NULL, -1); + BLI_dynstr_appendf(dynstr, "\"%s\"", buf); + MEM_freeN(buf); + break; + } + case PROP_ENUM: + { + /* string arrays dont exist */ + const char *identifier; + int val = RNA_property_enum_get(ptr, prop); + + if (RNA_property_enum_identifier(ptr, prop, val, &identifier)) { + BLI_dynstr_appendf(dynstr, "'%s'", identifier); + } + else { + BLI_dynstr_appendf(dynstr, "'<UNKNOWN ENUM>'", identifier); + } + break; + } + case PROP_POINTER: + { + BLI_dynstr_append(dynstr, "'<POINTER>'"); /* TODO */ + break; + } + case PROP_COLLECTION: + BLI_dynstr_append(dynstr, "'<COLLECTION>'"); /* TODO */ + break; + default: + BLI_dynstr_append(dynstr, "'<UNKNOWN TYPE>'"); /* TODO */ + break; + } + + cstring = BLI_dynstr_get_cstring(dynstr); + BLI_dynstr_free(dynstr); + return cstring; +}
\ No newline at end of file |