RNA
[blender.git] / source / blender / makesrna / intern / rna_internal.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #ifndef RNA_INTERNAL_H
26 #define RNA_INTERNAL_H
27
28 #include "rna_internal_types.h"
29
30 #define RNA_MAGIC ((int)~0)
31
32 struct IDProperty;
33 struct SDNA;
34
35 /* Data structures used during define */
36
37 typedef struct PropertyDefRNA {
38         struct PropertyDefRNA *next, *prev;
39
40         struct StructRNA *srna;
41         struct PropertyRNA *prop;
42
43         const char *dnastructname;
44         const char *dnaname;
45         const char *dnalengthstructname;
46         const char *dnalengthname;
47         const char *dnatype;
48         int dnaarraylength;
49
50         int booleanbit;
51 } PropertyDefRNA;
52
53 typedef struct StructDefRNA {
54         struct StructDefRNA *next, *prev;
55
56         struct StructRNA *srna;
57
58         const char *dnaname;
59         ListBase properties;
60 } StructDefRNA;
61
62 typedef struct AllocDefRNA {
63         struct AllocDefRNA *next, *prev;
64         void *mem;
65 } AllocDefRNA;
66
67 typedef struct BlenderDefRNA {
68         struct SDNA *sdna;
69         ListBase structs;
70         ListBase allocs;
71         int error, silent;
72 } BlenderDefRNA;
73
74 extern BlenderDefRNA DefRNA;
75
76 /* Define functions for all types */
77
78 extern StringPropertyRNA rna_IDProperty_string;
79 extern IntPropertyRNA rna_IDProperty_int;
80 extern IntPropertyRNA rna_IDProperty_intarray;
81 extern FloatPropertyRNA rna_IDProperty_float;
82 extern FloatPropertyRNA rna_IDProperty_floatarray;
83 extern PointerPropertyRNA rna_IDProperty_group;
84 extern FloatPropertyRNA rna_IDProperty_double;
85 extern FloatPropertyRNA rna_IDProperty_doublearray;
86
87 extern StructRNA RNA_Main;
88 extern StructRNA RNA_Mesh;
89 extern StructRNA RNA_Object;
90 extern StructRNA RNA_Scene;
91 extern StructRNA RNA_Struct;
92
93 void RNA_def_ID(struct StructRNA *srna);
94 void RNA_def_ID_types(struct BlenderRNA *brna);
95
96 void RNA_def_main(struct BlenderRNA *brna);
97 void RNA_def_mesh(struct BlenderRNA *brna);
98 void RNA_def_object(struct BlenderRNA *brna);
99 void RNA_def_rna(struct BlenderRNA *brna);
100 void RNA_def_scene(struct BlenderRNA *brna);
101
102 /* Internal Functions */
103
104 void rna_def_builtin_properties(struct StructRNA *srna);
105
106 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
107
108 typedef struct ListBaseIterator {
109         Link *link;
110         int flag;
111 } ListBaseIterator;
112
113 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb);
114 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
115 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
116 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
117
118 typedef struct ArrayIterator {
119         char *ptr;
120         char *endptr;
121         int itemsize;
122 } ArrayIterator;
123
124 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length);
125 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
126 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
127 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
128
129 /* Duplicated code since we can't link in blenlib */
130
131 void rna_addtail(struct ListBase *listbase, void *vlink);
132 void rna_freelistN(struct ListBase *listbase);
133
134 #endif /* RNA_INTERNAL_H */
135