Merge from 2.5 r20991 through r21037
[blender.git] / source / blender / makesrna / intern / rna_internal_types.h
index 3cb4bbea63e8cf48bc59dab8da6bd90d89533172..8bae21cca2b1f622e7492b1433d86f341499c7e9 100644 (file)
 #include "DNA_listBase.h"
 
 struct BlenderRNA;
+struct ContainerRNA;
 struct StructRNA;
 struct PropertyRNA;
 struct PointerRNA;
+struct FunctionRNA;
+struct ReportList;
 struct CollectionPropertyIterator;
 struct bContext;
+struct IDProperty;
+struct GHash;
+
+#define RNA_MAX_ARRAY 32
 
 /* Function Callbacks */
 
-typedef void (*NotifyFunc)(struct bContext *C, struct PointerRNA *ptr);
+typedef void (*UpdateFunc)(struct bContext *C, struct PointerRNA *ptr);
+typedef int (*EditableFunc)(struct PointerRNA *ptr);
+typedef struct IDProperty* (*IDPropertiesFunc)(struct PointerRNA *ptr, int create);
 typedef struct StructRNA *(*StructRefineFunc)(struct PointerRNA *ptr);
+typedef char *(*StructPathFunc)(struct PointerRNA *ptr);
 
 typedef int (*PropBooleanGetFunc)(struct PointerRNA *ptr);
 typedef void (*PropBooleanSetFunc)(struct PointerRNA *ptr, int value);
-typedef int (*PropBooleanArrayGetFunc)(struct PointerRNA *ptr, int index);
-typedef void (*PropBooleanArraySetFunc)(struct PointerRNA *ptr, int index, int value);
+typedef void (*PropBooleanArrayGetFunc)(struct PointerRNA *ptr, int *values);
+typedef void (*PropBooleanArraySetFunc)(struct PointerRNA *ptr, const int *values);
 typedef int (*PropIntGetFunc)(struct PointerRNA *ptr);
 typedef void (*PropIntSetFunc)(struct PointerRNA *ptr, int value);
-typedef int (*PropIntArrayGetFunc)(struct PointerRNA *ptr, int index);
-typedef void (*PropIntArraySetFunc)(struct PointerRNA *ptr, int index, int value);
+typedef void (*PropIntArrayGetFunc)(struct PointerRNA *ptr, int *values);
+typedef void (*PropIntArraySetFunc)(struct PointerRNA *ptr, const int *values);
+typedef void (*PropIntRangeFunc)(struct PointerRNA *ptr, int *min, int *max);
 typedef float (*PropFloatGetFunc)(struct PointerRNA *ptr);
 typedef void (*PropFloatSetFunc)(struct PointerRNA *ptr, float value);
-typedef float (*PropFloatArrayGetFunc)(struct PointerRNA *ptr, int index);
-typedef void (*PropFloatArraySetFunc)(struct PointerRNA *ptr, int index, float value);
+typedef void (*PropFloatArrayGetFunc)(struct PointerRNA *ptr, float *values);
+typedef void (*PropFloatArraySetFunc)(struct PointerRNA *ptr, const float *values);
+typedef void (*PropFloatRangeFunc)(struct PointerRNA *ptr, float *min, float *max);
 typedef void (*PropStringGetFunc)(struct PointerRNA *ptr, char *value);
 typedef int (*PropStringLengthFunc)(struct PointerRNA *ptr);
 typedef void (*PropStringSetFunc)(struct PointerRNA *ptr, const char *value);
 typedef int (*PropEnumGetFunc)(struct PointerRNA *ptr);
 typedef void (*PropEnumSetFunc)(struct PointerRNA *ptr, int value);
-typedef void* (*PropPointerGetFunc)(struct PointerRNA *ptr);
-typedef void (*PropPointerSetFunc)(struct PointerRNA *ptr, void *value);
-typedef struct StructRNA* (*PropPointerTypeFunc)(struct PointerRNA *ptr);
+typedef EnumPropertyItem *(*PropEnumItemFunc)(struct PointerRNA *ptr);
+typedef PointerRNA (*PropPointerGetFunc)(struct PointerRNA *ptr);
+typedef StructRNA* (*PropPointerTypeFunc)(struct PointerRNA *ptr);
+typedef void (*PropPointerSetFunc)(struct PointerRNA *ptr, const PointerRNA value);
 typedef void (*PropCollectionBeginFunc)(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
 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 PointerRNA (*PropCollectionGetFunc)(struct CollectionPropertyIterator *iter);
 typedef int (*PropCollectionLengthFunc)(struct PointerRNA *ptr);
-typedef void* (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key, struct StructRNA **type);
-typedef void* (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key, struct StructRNA **type);
+typedef PointerRNA (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key);
+typedef PointerRNA (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key);
+
+/* Container - generic abstracted container of RNA properties */
+typedef struct ContainerRNA {
+       void *next, *prev;
+
+       struct GHash *prophash;
+       ListBase properties;
+} ContainerRNA;
+
+struct ParameterList {
+       /* storage for parameters */
+       void *data;
+
+       /* function passed at creation time */
+       FunctionRNA *func;
+};
+
+struct FunctionRNA {
+       /* structs are containers of properties */
+       ContainerRNA cont;
+
+       /* unique identifier */
+       const char *identifier;
+       /* various options */
+       int flag;
+
+       /* single line description, displayed in the tooltip for example */
+       const char *description;
+
+       /* callback to execute the function */
+       CallFunc call;
+
+       /* parameter for the return value */
+       PropertyRNA *ret;
+};
 
 struct PropertyRNA {
        struct PropertyRNA *next, *prev;
@@ -83,6 +130,8 @@ struct PropertyRNA {
        const char *name;
        /* single line description, displayed in the tooltip for example */
        const char *description;
+       /* icon ID */
+       int icon;
 
        /* property type as it appears to the outside */
        PropertyType type;
@@ -91,8 +140,12 @@ struct PropertyRNA {
        /* if an array this is > 0, specifying the length */
        unsigned int arraylength;
        
-       /* callback for notifys on change */
-       NotifyFunc notify;
+       /* callback for updates on change */
+       UpdateFunc update;
+       int noteflag;
+
+       /* callback for testing if editable/evaluated */
+       EditableFunc editable;
 };
 
 /* Property Types */
@@ -119,6 +172,8 @@ typedef struct IntPropertyRNA {
        PropIntArrayGetFunc getarray;
        PropIntArraySetFunc setarray;
 
+       PropIntRangeFunc range;
+
        int softmin, softmax;
        int hardmin, hardmax;
        int step;
@@ -136,6 +191,8 @@ typedef struct FloatPropertyRNA {
        PropFloatArrayGetFunc getarray;
        PropFloatArraySetFunc setarray;
 
+       PropFloatRangeFunc range;
+
        float softmin, softmax;
        float hardmin, hardmax;
        float step;
@@ -162,6 +219,7 @@ typedef struct EnumPropertyRNA {
 
        PropEnumGetFunc get;
        PropEnumSetFunc set;
+       PropEnumItemFunc itemf;
 
        const EnumPropertyItem *item;
        int totitem;
@@ -174,9 +232,9 @@ typedef struct PointerPropertyRNA {
 
        PropPointerGetFunc get;
        PropPointerSetFunc set;
-       PropPointerTypeFunc type;       /* optional */
+       PropPointerTypeFunc typef;
 
-       struct StructRNA *structtype;
+       struct StructRNA *type;
 } PointerPropertyRNA;
 
 typedef struct CollectionPropertyRNA {
@@ -186,17 +244,25 @@ typedef struct CollectionPropertyRNA {
        PropCollectionNextFunc next;
        PropCollectionEndFunc end;                                              /* optional */
        PropCollectionGetFunc get;
-       PropCollectionTypeFunc type;                                    /* optional */
        PropCollectionLengthFunc length;                                /* optional */
        PropCollectionLookupIntFunc lookupint;                  /* optional */
        PropCollectionLookupStringFunc lookupstring;    /* optional */
+       FunctionRNA *add, *remove;
 
-       struct StructRNA *structtype;
+       struct StructRNA *type;
 } CollectionPropertyRNA;
 
+
+/* changes to this struct require updating rna_generate_struct in makesrna.c */
 struct StructRNA {
-       struct StructRNA *next, *prev;
+       /* structs are containers of properties */
+       ContainerRNA cont;
 
+       /* python type, this is a subtype of pyrna_struct_Type but used so each struct can have its own type
+        * which is useful for subclassing RNA */
+       void *py_type;
+       void *blender_type;
+       
        /* unique identifier */
        const char *identifier;
        /* various options */
@@ -204,7 +270,11 @@ struct StructRNA {
 
        /* user readable name */
        const char *name;
-
+       /* single line description, displayed in the tooltip for example */
+       const char *description;
+       /* icon ID */
+       int icon;
+       
        /* property that defines the name */
        PropertyRNA *nameproperty;
 
@@ -212,16 +282,29 @@ struct StructRNA {
        PropertyRNA *iteratorproperty;
 
        /* struct this is derivedfrom */
-       struct StructRNA *from;
+       struct StructRNA *base;
 
-       /* callback for notifys on change */
-       NotifyFunc notify;
+       /* only use for nested structs, where both the parent and child access
+        * the same C Struct but nesting is used for grouping properties.
+        * The parent property is used so we know NULL checks are not needed,
+        * and that this struct will never exist without its parent */
+       struct StructRNA *nested;
 
        /* function to give the more specific type */
        StructRefineFunc refine; 
 
-       /* properties of this struct */
-       ListBase properties; 
+       /* function to find path to this struct in an ID */
+       StructPathFunc path; 
+
+       /* function to register/unregister subclasses */
+       StructRegisterFunc reg; 
+       StructUnregisterFunc unreg; 
+
+       /* callback to get id properties */
+       IDPropertiesFunc idproperties;
+
+       /* functions of this struct */
+       ListBase functions; 
 };
 
 /* Blender RNA