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         /* struct */
44         const char *dnastructname;
45         const char *dnastructfromname;
46         const char *dnastructfromprop;
47
48         /* property */
49         const char *dnaname;
50         const char *dnatype;
51         int dnaarraylength;
52         int dnapointerlevel;
53
54         /* for finding length of array collections */
55         const char *dnalengthstructname;
56         const char *dnalengthname;
57         int dnalengthfixed;
58
59         int booleanbit, booleannegative;
60         int enumbitflags;
61 } PropertyDefRNA;
62
63 typedef struct StructDefRNA {
64         struct StructDefRNA *next, *prev;
65
66         struct StructRNA *srna;
67         const char *filename;
68
69         const char *dnaname;
70
71         /* for derived structs to find data in some property */
72         const char *dnafromname;
73         const char *dnafromprop;
74
75         ListBase properties;
76 } StructDefRNA;
77
78 typedef struct AllocDefRNA {
79         struct AllocDefRNA *next, *prev;
80         void *mem;
81 } AllocDefRNA;
82
83 typedef struct BlenderDefRNA {
84         struct SDNA *sdna;
85         ListBase structs;
86         ListBase allocs;
87         struct StructRNA *laststruct;
88         int error, silent, preprocess;
89 } BlenderDefRNA;
90
91 extern BlenderDefRNA DefRNA;
92
93 /* Define functions for all types */
94
95 extern BlenderRNA BLENDER_RNA;
96
97 void RNA_def_ID(struct BlenderRNA *brna);
98 void RNA_def_action(struct BlenderRNA *brna);
99 void RNA_def_armature(struct BlenderRNA *brna);
100 void RNA_def_actuator(struct BlenderRNA *brna);
101 void RNA_def_brush(struct BlenderRNA *brna);
102 void RNA_def_brushclone(struct BlenderRNA *brna);
103 void RNA_def_camera(struct BlenderRNA *brna);
104 void RNA_def_cloth(struct BlenderRNA *brna);
105 void RNA_def_color(struct BlenderRNA *brna);
106 void RNA_def_constraint(struct BlenderRNA *brna);
107 void RNA_def_controller(struct BlenderRNA *brna);
108 void RNA_def_curve(struct BlenderRNA *brna);
109 void RNA_def_fluidsim(struct BlenderRNA *brna);
110 void RNA_def_gameproperty(struct BlenderRNA *brna);
111 void RNA_def_group(struct BlenderRNA *brna);
112 void RNA_def_image(struct BlenderRNA *brna);
113 void RNA_def_ipo(struct BlenderRNA *brna);
114 void RNA_def_key(struct BlenderRNA *brna);
115 void RNA_def_lamp(struct BlenderRNA *brna);
116 void RNA_def_lattice(struct BlenderRNA *brna);
117 void RNA_def_main(struct BlenderRNA *brna);
118 void RNA_def_material(struct BlenderRNA *brna);
119 void RNA_def_mesh(struct BlenderRNA *brna);
120 void RNA_def_meta(struct BlenderRNA *brna);
121 void RNA_def_modifier(struct BlenderRNA *brna);
122 void RNA_def_nodetree(struct BlenderRNA *brna);
123 void RNA_def_object(struct BlenderRNA *brna);
124 void RNA_def_object_force(struct BlenderRNA *brna);
125 void RNA_def_packedfile(struct BlenderRNA *brna);
126 void RNA_def_particle(struct BlenderRNA *brna);
127 void RNA_def_pose(struct BlenderRNA *brna);
128 void RNA_def_radio(struct BlenderRNA *brna);
129 void RNA_def_rna(struct BlenderRNA *brna);
130 void RNA_def_scene(struct BlenderRNA *brna);
131 void RNA_def_screen(struct BlenderRNA *brna);
132 void RNA_def_scriptlink(struct BlenderRNA *brna);
133 void RNA_def_sensor(struct BlenderRNA *brna);
134 void RNA_def_sequence(struct BlenderRNA *brna);
135 void RNA_def_text(struct BlenderRNA *brna);
136 void RNA_def_texture(struct BlenderRNA *brna);
137 void RNA_def_sound(struct BlenderRNA *brna);
138 void RNA_def_userdef(struct BlenderRNA *brna);
139 void RNA_def_vfont(struct BlenderRNA *brna);
140 void RNA_def_wm(struct BlenderRNA *brna);
141 void RNA_def_world(struct BlenderRNA *brna);
142
143 void rna_def_ipo_common(struct StructRNA *srna);
144 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
145 void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *structname);
146
147 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
148 int rna_ID_name_length(struct PointerRNA *ptr);
149 void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
150 struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
151 void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
152
153 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
154 int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
155 void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index);
156 void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
157 void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
158 void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
159
160 /* ID Properties */
161
162 extern StringPropertyRNA rna_IDProperty_string;
163 extern IntPropertyRNA rna_IDProperty_int;
164 extern IntPropertyRNA rna_IDProperty_int_array;
165 extern FloatPropertyRNA rna_IDProperty_float;
166 extern FloatPropertyRNA rna_IDProperty_float_array;
167 extern PointerPropertyRNA rna_IDProperty_group;
168 extern CollectionPropertyRNA rna_IDProperty_collection;
169 extern FloatPropertyRNA rna_IDProperty_double;
170 extern FloatPropertyRNA rna_IDProperty_double_array;
171
172 extern StructRNA RNA_IDProperty;
173 extern StructRNA RNA_IDPropertyGroup;
174
175 struct IDProperty *rna_idproperties_get(struct PointerRNA *ptr, int create);
176 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
177
178 /* Builtin Property Callbacks */
179
180 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
181 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
182 void *rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
183 void *rna_builtin_type_get(struct PointerRNA *ptr);
184
185 /* Iterators */
186
187 typedef int (*IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data);
188
189 typedef struct ListBaseIterator {
190         Link *link;
191         int flag;
192         IteratorSkipFunc skip;
193 } ListBaseIterator;
194
195 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
196 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
197 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
198 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
199
200 typedef struct ArrayIterator {
201         char *ptr;
202         char *endptr;
203         int itemsize;
204         IteratorSkipFunc skip;
205 } ArrayIterator;
206
207 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, IteratorSkipFunc skip);
208 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
209 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
210 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
211 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
212
213 /* Duplicated code since we can't link in blenlib */
214
215 void rna_addtail(struct ListBase *listbase, void *vlink);
216 void rna_freelinkN(struct ListBase *listbase, void *vlink);
217 void rna_freelistN(struct ListBase *listbase);
218
219 #endif /* RNA_INTERNAL_H */
220
221