svn merge -r 21041:21301 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[blender.git] / source / blender / makesrna / RNA_types.h
index 9faa8b2fd8ecace9823605fe6020a27cd951a341..923191cba78878ac018d25a143bc1b1ec085fa65 100644 (file)
 #ifndef RNA_TYPES
 #define RNA_TYPES
 
-#include "DNA_listBase.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-struct BlenderRNA;
-struct StructRNA;
+struct ParameterList;
+struct FunctionRNA;
 struct PropertyRNA;
-struct CollectionPropertyIterator;
+struct StructRNA;
+struct BlenderRNA;
+struct IDProperty;
 struct bContext;
+struct ReportList;
 
-typedef void (*PropNotifyFunc)(struct bContext *C, void *data);
-typedef int (*PropBooleanGetFunc)(void *data);
-typedef void (*PropBooleanSetFunc)(void *data, int value);
-typedef int (*PropBooleanArrayGetFunc)(void *data, int index);
-typedef void (*PropBooleanArraySetFunc)(void *data, int index, int value);
-typedef int (*PropIntGetFunc)(void *data);
-typedef void (*PropIntSetFunc)(void *data, int value);
-typedef int (*PropIntArrayGetFunc)(void *data, int index);
-typedef void (*PropIntArraySetFunc)(void *data, int index, int value);
-typedef float (*PropFloatGetFunc)(void *data);
-typedef void (*PropFloatSetFunc)(void *data, float value);
-typedef float (*PropFloatArrayGetFunc)(void *data, int index);
-typedef void (*PropFloatArraySetFunc)(void *data, int index, float value);
-typedef void (*PropStringGetFunc)(void *data, char *value);
-typedef int (*PropStringLengthFunc)(void *data);
-typedef void (*PropStringSetFunc)(void *data, const char *value);
-typedef int (*PropEnumGetFunc)(void *data);
-typedef void (*PropEnumSetFunc)(void *data, int value);
-typedef void* (*PropPointerGetFunc)(void *data);
-typedef void (*PropPointerSetFunc)(void *data, void *value);
-typedef struct StructRNA* (*PropPointerTypeFunc)(void *data);
-typedef void (*PropCollectionBeginFunc)(struct CollectionPropertyIterator *iter, void *data);
-typedef void (*PropCollectionNextFunc)(struct CollectionPropertyIterator *iter);
-typedef void (*PropCollectionEndFunc)(struct CollectionPropertyIterator *iter);
-typedef void* (*PropCollectionGetFunc)(struct CollectionPropertyIterator *iter);
-typedef struct StructRNA* (*PropCollectionTypeFunc)(struct CollectionPropertyIterator *iter);
-typedef int (*PropCollectionLengthFunc)(void *data);
-typedef void* (*PropCollectionLookupIntFunc)(void *data, int key, struct StructRNA **type);
-typedef void* (*PropCollectionLookupStringFunc)(void *data, const char *key, struct StructRNA **type);
+/* Pointer
+ *
+ * RNA pointers are not a single C pointer but include the type,
+ * and a pointer to the ID struct that owns the struct, since
+ * in some cases this information is needed to correctly get/set
+ * the properties and validate them. */
+
+typedef struct PointerRNA {
+       struct {
+               void *data;
+       } id;
+
+       struct StructRNA *type;
+       void *data;
+} PointerRNA;
+
+/* Property */
 
 typedef enum PropertyType {
        PROP_BOOLEAN = 0,
@@ -77,171 +70,163 @@ typedef enum PropertySubType {
        PROP_NONE = 0,
        PROP_UNSIGNED = 1,
        PROP_FILEPATH = 2,
-       PROP_COLOR = 3,
-       PROP_VECTOR = 4,
-       PROP_MATRIX = 5,
-       PROP_ROTATION = 6
+       PROP_DIRPATH = 3,
+       PROP_COLOR = 4,
+       PROP_VECTOR = 5,
+       PROP_MATRIX = 6,
+       PROP_ROTATION = 7,
+       PROP_NEVER_NULL = 8,
+       PROP_PERCENTAGE = 9
 } PropertySubType;
 
 typedef enum PropertyFlag {
+       /* editable means the property is editable in the user
+        * interface, properties are editable by default except
+        * for pointers and collections. */
        PROP_EDITABLE = 1,
-       PROP_EVALUATEABLE = 2
+
+       /* animateable means the property can be driven by some
+        * other input, be it animation curves, expressions, ..
+        * properties are animateable by default except for pointers
+        * and collections */
+       PROP_ANIMATEABLE = 2,
+
+       /* icon */
+       PROP_ICONS_CONSECUTIVE = 4096,
+
+       /* function paramater flags */
+       PROP_REQUIRED = 4,
+       PROP_RETURN = 8,
+       PROP_RNAPTR = 2048,
+
+       /* registering */
+       PROP_REGISTER = 16,
+       PROP_REGISTER_OPTIONAL = 16|32,
+
+       /* pointers */
+       PROP_ID_REFCOUNT = 64,
+
+       /* internal flags */
+       PROP_BUILTIN = 128,
+       PROP_EXPORT = 256,
+       PROP_RUNTIME = 512,
+       PROP_IDPROPERTY = 1024,
+       PROP_RAW_ACCESS = 8192,
+       PROP_RAW_ARRAY = 16384,
 } PropertyFlag;
 
 typedef struct CollectionPropertyIterator {
+       /* internal */
+       PointerRNA parent;
+       PointerRNA builtin_parent;
+       struct PropertyRNA *prop;
        void *internal;
+       int idprop;
+       int level;
+
+       /* external */
        int valid;
+       PointerRNA ptr;
 } CollectionPropertyIterator;
 
-typedef struct PropertyEnumItem {
+typedef struct CollectionPointerLink {
+       struct CollectionPointerLink *next, *prev;
+       PointerRNA ptr;
+} CollectionPointerLink;
+
+typedef enum RawPropertyType {
+       PROP_RAW_CHAR,
+       PROP_RAW_SHORT,
+       PROP_RAW_INT,
+       PROP_RAW_FLOAT,
+       PROP_RAW_DOUBLE
+} RawPropertyType;
+
+typedef struct RawArray {
+       void *array;
+       RawPropertyType type;
+       int len;
+       int stride;
+} RawArray;
+
+/* Iterator Utility */
+
+typedef struct EnumPropertyItem {
        int value;
-       const char *cname;
-       const char *name;
-} PropertyEnumItem;
-
-typedef struct PropertyRNA {
-       struct PropertyRNA *next, *prev;
-
-       /* C code name */
-       const char *cname;
-       /* various options */
-       int flag;
-
-       /* user readable name */
+       const char *identifier;
+       int icon;
        const char *name;
-       /* single line description, displayed in the tooltip for example */
        const char *description;
+} EnumPropertyItem;
 
-       /* property type as it appears to the outside */
-       PropertyType type;
-       /* subtype, 'interpretation' of the property */
-       PropertySubType subtype;
-       /* if an array this is > 0, specifying the length */
-       unsigned int arraylength;
-       
-       /* callback for notifys on change */
-       PropNotifyFunc notify;
-} PropertyRNA;
-
-/* information specific to the property type */
-typedef struct BooleanPropertyRNA {
-       PropertyRNA property;
-
-       PropBooleanGetFunc get;
-       PropBooleanSetFunc set;
-
-       PropBooleanArrayGetFunc getarray;
-       PropBooleanArraySetFunc setarray;
+typedef struct PropertyRNA PropertyRNA;
 
-       int defaultvalue;
-       const int *defaultarray;
-} BooleanPropertyRNA;
+/* Parameter List */
 
-typedef struct IntPropertyRNA {
-       PropertyRNA property;
+typedef struct ParameterList ParameterList;
 
-       PropIntGetFunc get;
-       PropIntSetFunc set;
+typedef struct ParameterIterator {
+       ParameterList *parms;
+       PointerRNA funcptr;
+       void *data;
+       int size, offset;
 
-       PropIntArrayGetFunc getarray;
-       PropIntArraySetFunc setarray;
-
-       int softmin, softmax;
-       int hardmin, hardmax;
-       int step;
-
-       int defaultvalue;
-       const int *defaultarray;
-} IntPropertyRNA;
-
-typedef struct FloatPropertyRNA {
-       PropertyRNA property;
-
-       PropFloatGetFunc get;
-       PropFloatSetFunc set;
-
-       PropFloatArrayGetFunc getarray;
-       PropFloatArraySetFunc setarray;
-
-       float softmin, softmax;
-       float hardmin, hardmax;
-       float step, precision;
-
-       float defaultvalue;
-       const float *defaultarray;
-} FloatPropertyRNA;
-
-typedef struct StringPropertyRNA {
-       PropertyRNA property;
-
-       PropStringGetFunc get;
-       PropStringLengthFunc length;
-       PropStringSetFunc set;
-
-       int maxlength;  /* includes string terminator! */
-
-       const char *defaultvalue;
-} StringPropertyRNA;
-
-typedef struct EnumPropertyRNA {
-       PropertyRNA property;
-
-       PropEnumGetFunc get;
-       PropEnumSetFunc set;
+       PropertyRNA *parm;
+       int valid;
+} ParameterIterator;
 
-       const PropertyEnumItem *item;
-       int totitem;
+/* Function */
 
-       int defaultvalue;
-} EnumPropertyRNA;
+typedef enum FunctionFlag {
+       FUNC_NO_SELF = 1, /* for static functions */
+       FUNC_USE_CONTEXT = 2,
+       FUNC_USE_REPORTS = 4,
 
-typedef struct PointerPropertyRNA {
-       PropertyRNA property;
+       /* registering */
+       FUNC_REGISTER = 8,
+       FUNC_REGISTER_OPTIONAL = 8|16,
 
-       PropPointerGetFunc get;
-       PropPointerSetFunc set;
-       PropPointerTypeFunc type;       /* optional */
+       /* internal flags */
+       FUNC_BUILTIN = 128,
+       FUNC_EXPORT = 256,
+       FUNC_RUNTIME = 512
+} FunctionFlag;
 
-       struct StructRNA *structtype;
-} PointerPropertyRNA;
+typedef void (*CallFunc)(struct bContext *C, struct ReportList *reports, PointerRNA *ptr, ParameterList *parms);
 
-typedef struct CollectionPropertyRNA {
-       PropertyRNA property;
+typedef struct FunctionRNA FunctionRNA;
 
-       PropCollectionBeginFunc begin;
-       PropCollectionNextFunc next;
-       PropCollectionEndFunc end;                                              /* optional */
-       PropCollectionGetFunc get;
-       PropCollectionTypeFunc type;                                    /* optional */
-       PropCollectionLengthFunc length;                                /* optional */
-       PropCollectionLookupIntFunc lookupint;                  /* optional */
-       PropCollectionLookupStringFunc lookupstring;    /* optional */
+/* Struct */
 
-       struct StructRNA *structtype;
-} CollectionPropertyRNA;
+typedef enum StructFlag {
+       /* indicates that this struct is an ID struct, and to use refcounting */
+       STRUCT_ID = 1,
+       STRUCT_ID_REFCOUNT = 2,
 
-typedef struct StructRNA {
-       struct StructRNA *next, *prev;
+       /* internal flags */
+       STRUCT_RUNTIME = 4,
+       STRUCT_GENERATED = 8
+} StructFlag;
 
-       /* C code name */
-       const char *cname;
-       /* various options */
-       int flag;
+typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
+typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, struct ParameterList *list);
+typedef void (*StructFreeFunc)(void *data);
+typedef struct StructRNA *(*StructRegisterFunc)(const struct bContext *C, struct ReportList *reports, void *data,
+       StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
+typedef void (*StructUnregisterFunc)(const struct bContext *C, struct StructRNA *type);
 
-       /* user readable name */
-       const char *name;
+typedef struct StructRNA StructRNA;
 
-       /* property that defines the name */
-       PropertyRNA *nameproperty;
+/* Blender RNA
+ *
+ * Root RNA data structure that lists all struct types. */
 
-       /* properties of this struct */
-       ListBase properties; 
-} StructRNA;
+typedef struct BlenderRNA BlenderRNA;
 
-typedef struct BlenderRNA {
-       /* structs */
-       ListBase structs;
-} BlenderRNA;
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* RNA_TYPES */
 
+