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/rna_internal_types.h | |
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/rna_internal_types.h')
-rw-r--r-- | source/blender/makesrna/intern/rna_internal_types.h | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index ccfb83b61e3..b16f0d69fba 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -30,6 +30,8 @@ #include "DNA_listBase.h" +#include "RNA_types.h" + struct BlenderRNA; struct ContainerRNA; struct StructRNA; @@ -103,6 +105,27 @@ typedef int (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key, stru typedef int (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key, struct PointerRNA *r_ptr); typedef int (*PropCollectionAssignIntFunc)(struct PointerRNA *ptr, int key, const struct PointerRNA *assign_ptr); +/* extended versions with PropertyRNA argument */ +typedef int (*PropBooleanGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop); +typedef void (*PropBooleanSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int value); +typedef void (*PropBooleanArrayGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int *values); +typedef void (*PropBooleanArraySetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, const int *values); +typedef int (*PropIntGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop); +typedef void (*PropIntSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int value); +typedef void (*PropIntArrayGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int *values); +typedef void (*PropIntArraySetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, const int *values); +typedef void (*PropIntRangeFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int *min, int *max, int *softmin, int *softmax); +typedef float (*PropFloatGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop); +typedef void (*PropFloatSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, float value); +typedef void (*PropFloatArrayGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, float *values); +typedef void (*PropFloatArraySetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, const float *values); +typedef void (*PropFloatRangeFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, float *min, float *max, float *softmin, float *softmax); +typedef void (*PropStringGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, char *value); +typedef int (*PropStringLengthFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop); +typedef void (*PropStringSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, const char *value); +typedef int (*PropEnumGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop); +typedef void (*PropEnumSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int value); + /* Container - generic abstracted container of RNA properties */ typedef struct ContainerRNA { void *next, *prev; @@ -193,10 +216,14 @@ typedef struct BoolPropertyRNA { PropBooleanGetFunc get; PropBooleanSetFunc set; - PropBooleanArrayGetFunc getarray; PropBooleanArraySetFunc setarray; + PropBooleanGetFuncEx get_ex; + PropBooleanSetFuncEx set_ex; + PropBooleanArrayGetFuncEx getarray_ex; + PropBooleanArraySetFuncEx setarray_ex; + int defaultvalue; const int *defaultarray; } BoolPropertyRNA; @@ -206,12 +233,16 @@ typedef struct IntPropertyRNA { PropIntGetFunc get; PropIntSetFunc set; - PropIntArrayGetFunc getarray; PropIntArraySetFunc setarray; - PropIntRangeFunc range; + PropIntGetFuncEx get_ex; + PropIntSetFuncEx set_ex; + PropIntArrayGetFuncEx getarray_ex; + PropIntArraySetFuncEx setarray_ex; + PropIntRangeFuncEx range_ex; + int softmin, softmax; int hardmin, hardmax; int step; @@ -225,12 +256,16 @@ typedef struct FloatPropertyRNA { PropFloatGetFunc get; PropFloatSetFunc set; - PropFloatArrayGetFunc getarray; PropFloatArraySetFunc setarray; - PropFloatRangeFunc range; + PropFloatGetFuncEx get_ex; + PropFloatSetFuncEx set_ex; + PropFloatArrayGetFuncEx getarray_ex; + PropFloatArraySetFuncEx setarray_ex; + PropFloatRangeFuncEx range_ex; + float softmin, softmax; float hardmin, hardmax; float step; @@ -247,6 +282,10 @@ typedef struct StringPropertyRNA { PropStringLengthFunc length; PropStringSetFunc set; + PropStringGetFuncEx get_ex; + PropStringLengthFuncEx length_ex; + PropStringSetFuncEx set_ex; + int maxlength; /* includes string terminator! */ const char *defaultvalue; @@ -258,6 +297,9 @@ typedef struct EnumPropertyRNA { PropEnumGetFunc get; PropEnumSetFunc set; PropEnumItemFunc itemf; + + PropEnumGetFuncEx get_ex; + PropEnumSetFuncEx set_ex; void *py_data; /* store py callback here */ EnumPropertyItem *item; |