RNA: brush wrapping
[blender-staging.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         int dnapointerlevel;
50
51         int booleanbit;
52         int enumbitflags;
53 } PropertyDefRNA;
54
55 typedef struct StructDefRNA {
56         struct StructDefRNA *next, *prev;
57
58         struct StructRNA *srna;
59
60         const char *dnaname;
61         ListBase properties;
62 } StructDefRNA;
63
64 typedef struct AllocDefRNA {
65         struct AllocDefRNA *next, *prev;
66         void *mem;
67 } AllocDefRNA;
68
69 typedef struct BlenderDefRNA {
70         struct SDNA *sdna;
71         ListBase structs;
72         ListBase allocs;
73         struct StructRNA *laststruct;
74         int error, silent, preprocess;
75 } BlenderDefRNA;
76
77 extern BlenderDefRNA DefRNA;
78
79 /* Define functions for all types */
80
81 extern BlenderRNA BLENDER_RNA;
82
83 void RNA_def_ID(struct BlenderRNA *brna);
84 void RNA_def_actuator(struct BlenderRNA *brna);
85 void RNA_def_brush(struct BlenderRNA *brna);
86 void RNA_def_brushclone(struct BlenderRNA *brna);
87 void RNA_def_camera(struct BlenderRNA *brna);
88 void RNA_def_color(struct BlenderRNA *brna);
89 void RNA_def_controller(struct BlenderRNA *brna);
90 void RNA_def_gameproperty(struct BlenderRNA *brna);
91 void RNA_def_group(struct BlenderRNA *brna);
92 void RNA_def_image(struct BlenderRNA *brna);
93 void RNA_def_ipo(struct BlenderRNA *brna);
94 void RNA_def_lamp(struct BlenderRNA *brna);
95 void RNA_def_lattice(struct BlenderRNA *brna);
96 void RNA_def_main(struct BlenderRNA *brna);
97 void RNA_def_material(struct BlenderRNA *brna);
98 void RNA_def_mesh(struct BlenderRNA *brna);
99 void RNA_def_metaball(struct BlenderRNA *brna);
100 void RNA_def_metaelem(struct BlenderRNA *brna);
101 void RNA_def_nodetree(struct BlenderRNA *brna);
102 void RNA_def_object(struct BlenderRNA *brna);
103 void RNA_def_radio(struct BlenderRNA *brna);
104 void RNA_def_rna(struct BlenderRNA *brna);
105 void RNA_def_scene(struct BlenderRNA *brna);
106 void RNA_def_screen(struct BlenderRNA *brna);
107 void RNA_def_sensor(struct BlenderRNA *brna);
108 void RNA_def_wm(struct BlenderRNA *brna);
109 void RNA_def_world(BlenderRNA *brna);
110
111 /* ID Properties */
112
113 extern StringPropertyRNA rna_IDProperty_string;
114 extern IntPropertyRNA rna_IDProperty_int;
115 extern IntPropertyRNA rna_IDProperty_intarray;
116 extern FloatPropertyRNA rna_IDProperty_float;
117 extern FloatPropertyRNA rna_IDProperty_floatarray;
118 extern PointerPropertyRNA rna_IDProperty_group;
119 extern FloatPropertyRNA rna_IDProperty_double;
120 extern FloatPropertyRNA rna_IDProperty_doublearray;
121
122 extern StructRNA RNA_IDProperty;
123 extern StructRNA RNA_IDPropertyGroup;
124
125 struct IDProperty *rna_idproperties_get(struct StructRNA *type, void *data, int create);
126 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
127
128 /* Builtin Property Callbacks */
129
130 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
131 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
132 void *rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
133 void *rna_builtin_type_get(struct PointerRNA *ptr);
134
135 /* Iterators */
136
137 typedef int (*IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data);
138
139 typedef struct ListBaseIterator {
140         Link *link;
141         int flag;
142         IteratorSkipFunc skip;
143 } ListBaseIterator;
144
145 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
146 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
147 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
148 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
149
150 typedef struct ArrayIterator {
151         char *ptr;
152         char *endptr;
153         int itemsize;
154         IteratorSkipFunc skip;
155 } ArrayIterator;
156
157 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip);
158 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
159 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
160 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
161 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
162
163 /* Duplicated code since we can't link in blenlib */
164
165 void rna_addtail(struct ListBase *listbase, void *vlink);
166 void rna_freelinkN(struct ListBase *listbase, void *vlink);
167 void rna_freelistN(struct ListBase *listbase);
168
169 #endif /* RNA_INTERNAL_H */
170