Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-12-26 06:56:52 +0300
committerCampbell Barton <ideasman42@gmail.com>2008-12-26 06:56:52 +0300
commit0054e6d354f1b38a0788cc7716c52f07b16dd895 (patch)
treed1291cb9670e579ba41d128211ec505755b0f030 /source/blender/makesrna
parent27d0394ba47fdc6c65ec2f3920b52c64264879c2 (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.h3
-rw-r--r--source/blender/makesrna/intern/rna_access.c90
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