Merge with trunk r37677
[blender.git] / source / blender / makesrna / RNA_types.h
index 4e60fb413db5f9813c6f67beb9cae1937b294452..ec213d6a496cbbe13b5e975a662d5ba5a5f96f28 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * Contributor(s): Blender Foundation (2008).
  *
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef RNA_TYPES
-#define RNA_TYPES
+/** \file blender/makesrna/RNA_types.h
+ *  \ingroup RNA
+ */
+
+
+#include "BLO_sys_types.h"
+
+#ifndef RNA_TYPES_H
+#define RNA_TYPES_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -32,13 +39,15 @@ extern "C" {
 struct ParameterList;
 struct FunctionRNA;
 struct PropertyRNA;
+struct EnumPropertyRNA;
 struct StructRNA;
 struct BlenderRNA;
 struct IDProperty;
 struct bContext;
+struct Main;
 struct ReportList;
 
-/* Pointer
+/** 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
@@ -78,7 +87,7 @@ typedef enum PropertyUnit {
        PROP_UNIT_AREA = (2<<16),                       /* m^2 */
        PROP_UNIT_VOLUME = (3<<16),                     /* m^3 */
        PROP_UNIT_MASS = (4<<16),                       /* kg */
-       PROP_UNIT_ROTATION = (5<<16),           /* rad */
+       PROP_UNIT_ROTATION = (5<<16),           /* radians */
        PROP_UNIT_TIME = (6<<16),                       /* frame */
        PROP_UNIT_VELOCITY = (7<<16),           /* m/s */
        PROP_UNIT_ACCELERATION = (8<<16)        /* m/(s^2) */
@@ -90,7 +99,7 @@ typedef enum PropertyUnit {
 
 #define RNA_ENUM_BITFLAG_SIZE 32
 
-/* also update rna_property_subtypename when you change this */
+/* also update enums in bpy_props.c when adding items here */
 typedef enum PropertySubType {
        PROP_NONE = 0,
 
@@ -118,13 +127,16 @@ typedef enum PropertySubType {
        PROP_QUATERNION = 27,
        PROP_AXISANGLE = 28,
        PROP_XYZ = 29,
+       PROP_XYZ_LENGTH = 29|PROP_UNIT_LENGTH,
        PROP_COLOR_GAMMA = 30,
+       PROP_COORDS = 31, /* generic array, no units applied, only that x/y/z/w are used (python vec) */
 
        /* booleans */
        PROP_LAYER = 40,
        PROP_LAYER_MEMBER = 41
 } PropertySubType;
 
+/* Make sure enums are updated with thses */
 typedef enum PropertyFlag {
        /* editable means the property is editable in the user
         * interface, properties are editable by default except
@@ -140,17 +152,19 @@ typedef enum PropertyFlag {
         * other input, be it animation curves, expressions, ..
         * properties are animateable by default except for pointers
         * and collections */
-       PROP_ANIMATEABLE = 1<<1,
+       PROP_ANIMATABLE = 1<<1,
 
        /* icon */
        PROP_ICONS_CONSECUTIVE = 1<<12,
 
        /* hidden in  the user interface */
        PROP_HIDDEN = 1<<19,
+       /* do not write in presets */
+       PROP_SKIP_SAVE = 1<<28,
 
        /* function paramater flags */
        PROP_REQUIRED = 1<<2,
-       PROP_RETURN = 1<<3,
+       PROP_OUTPUT = 1<<3,
        PROP_RNAPTR = 1<<11,
        /* registering */
        PROP_REGISTER = 1<<4,
@@ -163,6 +177,10 @@ typedef enum PropertyFlag {
         * only apply this to types that are derived from an ID ()*/
        PROP_ID_SELF_CHECK = 1<<20,
        PROP_NEVER_NULL = 1<<18,
+       /* currently only used for UI, this is similar to PROP_NEVER_NULL
+        * except that the value may be NULL at times, used for ObData, where an Empty's will be NULL
+        * but setting NULL on a mesh object is not possible. So, if its not NULL, setting NULL cant be done! */
+       PROP_NEVER_UNLINK = 1<<25,
 
        /* flag contains multiple enums.
         * note: not to be confused with prop->enumbitflags
@@ -174,11 +192,18 @@ typedef enum PropertyFlag {
 
        /* need context for update function */
        PROP_CONTEXT_UPDATE = 1<<22,
+       PROP_CONTEXT_PROPERTY_UPDATE = (1<<22)|(1<<27),
 
        /* Use for arrays or for any data that should not have a referene kept
         * most common case is functions that return arrays where the array */
        PROP_THICK_WRAP = 1<<23,
 
+       /* Reject values outside limits, use for python api only so far
+        * this is for use when silently clamping string length will give
+        * bad behavior later. Could also enforce this for INT's and other types.
+        * note: currently no support for function arguments or non utf8 paths (filepaths) */
+       PROP_NEVER_CLAMP = 1<<26,
+
        /* internal flags */
        PROP_BUILTIN = 1<<7,
        PROP_EXPORT = 1<<8,
@@ -187,7 +212,8 @@ typedef enum PropertyFlag {
        PROP_RAW_ACCESS = 1<<13,
        PROP_RAW_ARRAY = 1<<14,
        PROP_FREE_POINTERS = 1<<15,
-       PROP_DYNAMIC = 1<<17 /* for dynamic arrays, and retvals of type string */
+       PROP_DYNAMIC = 1<<17, /* for dynamic arrays, and retvals of type string */
+       PROP_ENUM_NO_CONTEXT = 1<<24 /* for enum that shouldn't be contextual */
 } PropertyFlag;
 
 typedef struct CollectionPropertyIterator {
@@ -233,7 +259,8 @@ typedef struct EnumPropertyItem {
        const char *description;
 } EnumPropertyItem;
 
-typedef EnumPropertyItem *(*EnumPropertyItemFunc)(struct bContext *C, PointerRNA *ptr, int *free);
+/* this is a copy of 'PropEnumItemFunc' defined in rna_internal_types.h */
+typedef EnumPropertyItem *(*EnumPropertyItemFunc)(struct bContext *C, PointerRNA *ptr, struct PropertyRNA *prop, int *free);
 
 typedef struct PropertyRNA PropertyRNA;
 
@@ -243,8 +270,10 @@ typedef struct ParameterList {
        /* storage for parameters */
        void *data;
 
-       /* store the parameter count */
-       int tot;
+       /* store the parameter size */
+       int alloc_size;
+
+       int arg_count, ret_count;
 
        /* function passed at creation time */
        struct FunctionRNA *func;
@@ -260,12 +289,19 @@ typedef struct ParameterIterator {
        int valid;
 } ParameterIterator;
 
+/* mainly to avoid confusing casts */
+typedef struct ParameterDynAlloc {
+       intptr_t array_tot; /* important, this breaks when set to an int */
+       void *array;
+} ParameterDynAlloc;
+
 /* Function */
 
 typedef enum FunctionFlag {
        FUNC_NO_SELF = 1, /* for static functions */
        FUNC_USE_CONTEXT = 2,
        FUNC_USE_REPORTS = 4,
+       FUNC_USE_SELF_ID = 2048,
 
        /* registering */
        FUNC_REGISTER = 8,
@@ -292,15 +328,17 @@ typedef enum StructFlag {
        /* internal flags */
        STRUCT_RUNTIME = 4,
        STRUCT_GENERATED = 8,
-       STRUCT_FREE_POINTERS = 16
+       STRUCT_FREE_POINTERS = 16,
+       STRUCT_NO_IDPROPERTIES = 32 /* Menu's and Panels don't need properties */
 } StructFlag;
 
 typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
-typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list);
+typedef int (*StructCallbackFunc)(struct bContext *C, struct PointerRNA *ptr, struct FunctionRNA *func, ParameterList *list);
 typedef void (*StructFreeFunc)(void *data);
-typedef struct StructRNA *(*StructRegisterFunc)(const struct bContext *C, struct ReportList *reports, void *data,
+typedef struct StructRNA *(*StructRegisterFunc)(struct Main *bmain, struct ReportList *reports, void *data,
        const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
-typedef void (*StructUnregisterFunc)(const struct bContext *C, struct StructRNA *type);
+typedef void (*StructUnregisterFunc)(struct Main *bmain, struct StructRNA *type);
+typedef void **(*StructInstanceFunc)(PointerRNA *ptr);
 
 typedef struct StructRNA StructRNA;
 
@@ -318,15 +356,13 @@ typedef struct BlenderRNA BlenderRNA;
 typedef struct ExtensionRNA {
        void *data;
        StructRNA *srna;
-
-       int (*call)(PointerRNA *, FunctionRNA *, ParameterList *);
-       void (*free)(void *data);
+       StructCallbackFunc call;
+       StructFreeFunc free;
+       
 } ExtensionRNA;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* RNA_TYPES */
-
-
+#endif /* RNA_TYPES_H */