Merge with trunk r37677
[blender.git] / source / blender / makesrna / RNA_types.h
index 1f066a7209d64e45bd025c5f7ecd8f58f51e7763..ec213d6a496cbbe13b5e975a662d5ba5a5f96f28 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
  * ***** 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
@@ -118,7 +127,9 @@ 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,
@@ -148,6 +159,8 @@ typedef enum PropertyFlag {
 
        /* 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,
@@ -164,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
@@ -175,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,
@@ -189,7 +213,7 @@ typedef enum PropertyFlag {
        PROP_RAW_ARRAY = 1<<14,
        PROP_FREE_POINTERS = 1<<15,
        PROP_DYNAMIC = 1<<17, /* for dynamic arrays, and retvals of type string */
-       PROP_ENUM_NO_CONTEXT = 1<<18 /* for enum that shouldn't be contextual */
+       PROP_ENUM_NO_CONTEXT = 1<<24 /* for enum that shouldn't be contextual */
 } PropertyFlag;
 
 typedef struct CollectionPropertyIterator {
@@ -235,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;
 
@@ -264,6 +289,12 @@ 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 {
@@ -297,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;
 
@@ -323,43 +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;
 
-/* fake struct definitions, needed otherwise collections end up owning the C
- * structs like 'Object' when defined first */
-#define MainActions            Main
-#define MainArmatures          Main
-#define MainBrushes            Main
-#define MainCameras            Main
-#define MainCurves             Main
-#define MainFonts              Main
-#define MainGreasePencils      Main
-#define MainGroups             Main
-#define MainImages             Main
-#define MainLamps              Main
-#define MainLattices           Main
-#define MainLibraries          Main
-#define MainMaterials          Main
-#define MainMeshes             Main
-#define MainMetaBalls          Main
-#define MainNodeTrees          Main
-#define MainObjects            Main
-#define MainParticles          Main
-#define MainScenes             Main
-#define MainScreens            Main
-#define MainSounds             Main
-#define MainTexts              Main
-#define MainTextures           Main
-#define MainWindowManagers     Main
-#define MainWorlds             Main
-
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* RNA_TYPES */
-
-
+#endif /* RNA_TYPES_H */