diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-01-05 18:56:37 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2013-01-05 18:56:37 +0400 |
commit | e8b415bdb4ba282e3574cad1463bf2512fe5eb8f (patch) | |
tree | 42d45b749f9442393ef08e41a1c98bc3e4978872 /source/blender/makesrna/intern/makesrna.c | |
parent | 5ee3cd6c86391e78a6905d1aa9c5241f623dcfc1 (diff) |
This patch adds support in bpy.props for getter/setter callback functions. We already have update callbacks, but generic get/set functions can come in handy in some cases where the functionality is too complex to use a single value.
The current C callback functions are too simple allow a straightforward implementation, in particular they don't receive the PropertyRNA pointer itself as an argument, which means the callback cannot directly access the PropertyRNA's py_data pointers which store the python function objects. For this reason a second runtime variant of these callbacks has been added. It is only used for runtime callbacks and not in makesrna, but otherwise works the same way.
Diffstat (limited to 'source/blender/makesrna/intern/makesrna.c')
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 6b1f496b593..1ba50657751 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2947,11 +2947,15 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_BOOLEAN: { BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop; - fprintf(f, "\t%s, %s, %s, %s, %d, ", + fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, %s, %d, ", rna_function_string(bprop->get), rna_function_string(bprop->set), rna_function_string(bprop->getarray), rna_function_string(bprop->setarray), + rna_function_string(bprop->get_ex), + rna_function_string(bprop->set_ex), + rna_function_string(bprop->getarray_ex), + rna_function_string(bprop->setarray_ex), bprop->defaultvalue); if (prop->arraydimension && prop->totarraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier); @@ -2961,12 +2965,17 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_INT: { IntPropertyRNA *iprop = (IntPropertyRNA *)prop; - fprintf(f, "\t%s, %s, %s, %s, %s,\n\t", + fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,\n\t", rna_function_string(iprop->get), rna_function_string(iprop->set), rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), - rna_function_string(iprop->range)); + rna_function_string(iprop->range), + rna_function_string(iprop->get_ex), + rna_function_string(iprop->set_ex), + rna_function_string(iprop->getarray_ex), + rna_function_string(iprop->setarray_ex), + rna_function_string(iprop->range_ex)); rna_int_print(f, iprop->softmin); fprintf(f, ", "); rna_int_print(f, iprop->softmax); fprintf(f, ", "); rna_int_print(f, iprop->hardmin); fprintf(f, ", "); @@ -2981,12 +2990,17 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_FLOAT: { FloatPropertyRNA *fprop = (FloatPropertyRNA *)prop; - fprintf(f, "\t%s, %s, %s, %s, %s, ", + fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, ", rna_function_string(fprop->get), rna_function_string(fprop->set), rna_function_string(fprop->getarray), rna_function_string(fprop->setarray), - rna_function_string(fprop->range)); + rna_function_string(fprop->range), + rna_function_string(fprop->get_ex), + rna_function_string(fprop->set_ex), + rna_function_string(fprop->getarray_ex), + rna_function_string(fprop->setarray_ex), + rna_function_string(fprop->range_ex)); rna_float_print(f, fprop->softmin); fprintf(f, ", "); rna_float_print(f, fprop->softmax); fprintf(f, ", "); rna_float_print(f, fprop->hardmin); fprintf(f, ", "); @@ -3002,10 +3016,13 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_STRING: { StringPropertyRNA *sprop = (StringPropertyRNA *)prop; - fprintf(f, "\t%s, %s, %s, %d, ", + fprintf(f, "\t%s, %s, %s, %s, %s, %s, %d, ", rna_function_string(sprop->get), rna_function_string(sprop->length), rna_function_string(sprop->set), + rna_function_string(sprop->get_ex), + rna_function_string(sprop->length_ex), + rna_function_string(sprop->set_ex), sprop->maxlength); rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n"); break; @@ -3013,10 +3030,12 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr case PROP_ENUM: { EnumPropertyRNA *eprop = (EnumPropertyRNA *)prop; - fprintf(f, "\t%s, %s, %s, NULL, ", + fprintf(f, "\t%s, %s, %s, %s, %s, NULL, ", rna_function_string(eprop->get), rna_function_string(eprop->set), - rna_function_string(eprop->itemf)); + rna_function_string(eprop->itemf), + rna_function_string(eprop->get_ex), + rna_function_string(eprop->set_ex)); if (eprop->item) fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier); else |