svn merge -r 21041:21301 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[blender.git] / source / blender / makesrna / RNA_types.h
index 83a1ca315c70c0f185d6f7f860b17d0e8a8104b1..923191cba78878ac018d25a143bc1b1ec085fa65 100644 (file)
 #ifndef RNA_TYPES
 #define RNA_TYPES
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ParameterList;
+struct FunctionRNA;
+struct PropertyRNA;
+struct StructRNA;
+struct BlenderRNA;
+struct IDProperty;
+struct bContext;
+struct ReportList;
+
 /* Pointer
  *
  * RNA pointers are not a single C pointer but include the type,
@@ -34,7 +47,6 @@
 
 typedef struct PointerRNA {
        struct {
-               struct StructRNA *type;
                void *data;
        } id;
 
@@ -58,86 +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, evaluated means that the property is set
-        * as part of an evaluation. these can change at runtime
-        * the property flag contains the default. editable is
-        * enabled by default except for collections. */
-       PROP_NOT_EDITABLE = 1,
-       PROP_EVALUATED = 2,
-
-       /* driveable means the property can be driven by some
+        * interface, properties are editable by default except
+        * for pointers and collections. */
+       PROP_EDITABLE = 1,
+
+       /* animateable means the property can be driven by some
         * other input, be it animation curves, expressions, ..
-        * in other words making the property evaluated.
-        * enable by default except for pointers and collections. */
-       PROP_NOT_DRIVEABLE = 4,
-
-#if 0
-       /* for pointers and collections, means that the struct
-        * depends on the data pointed to for evaluation, such
-        * that a change in the data pointed to will affect the
-        * evaluated result of this struct. */
-       PROP_EVALUATE_DEPENDENCY = 8,
-       PROP_INVERSE_EVALUATE_DEPENDENCY = 16,
-
-       /* for pointers and collections, means that the struct
-        * requires the data pointed to for rendering in the,
-        * be it the render engine or viewport */
-       PROP_RENDER_DEPENDENCY = 32,
-       PROP_INVERSE_RENDER_DEPENDENCY = 64,
-#endif
+        * 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_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 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 *identifier;
+       int icon;
        const char *name;
        const char *description;
 } EnumPropertyItem;
 
-struct PropertyRNA;
 typedef struct PropertyRNA PropertyRNA;
 
+/* Parameter List */
+
+typedef struct ParameterList ParameterList;
+
+typedef struct ParameterIterator {
+       ParameterList *parms;
+       PointerRNA funcptr;
+       void *data;
+       int size, offset;
+
+       PropertyRNA *parm;
+       int valid;
+} ParameterIterator;
+
+/* Function */
+
+typedef enum FunctionFlag {
+       FUNC_NO_SELF = 1, /* for static functions */
+       FUNC_USE_CONTEXT = 2,
+       FUNC_USE_REPORTS = 4,
+
+       /* registering */
+       FUNC_REGISTER = 8,
+       FUNC_REGISTER_OPTIONAL = 8|16,
+
+       /* internal flags */
+       FUNC_BUILTIN = 128,
+       FUNC_EXPORT = 256,
+       FUNC_RUNTIME = 512
+} FunctionFlag;
+
+typedef void (*CallFunc)(struct bContext *C, struct ReportList *reports, PointerRNA *ptr, ParameterList *parms);
+
+typedef struct FunctionRNA FunctionRNA;
+
 /* Struct */
 
 typedef enum StructFlag {
-       /* indicates that this struct is an ID struct */
+       /* indicates that this struct is an ID struct, and to use refcounting */
        STRUCT_ID = 1,
+       STRUCT_ID_REFCOUNT = 2,
 
        /* internal flags */
-       STRUCT_RUNTIME = 2
+       STRUCT_RUNTIME = 4,
+       STRUCT_GENERATED = 8
 } StructFlag;
 
-struct StructRNA;
+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);
+
 typedef struct StructRNA StructRNA;
 
 /* Blender RNA
  *
  * Root RNA data structure that lists all struct types. */
 
-struct BlenderRNA;
 typedef struct BlenderRNA BlenderRNA;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* RNA_TYPES */
 
+