4 * ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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.
20 * Contributor(s): Blender Foundation (2008).
22 * ***** END GPL LICENSE BLOCK *****
25 #ifndef RNA_INTERNAL_H
26 #define RNA_INTERNAL_H
28 #include "UI_resources.h"
30 #include "rna_internal_types.h"
32 #define RNA_MAGIC ((int)~0)
37 /* Data structures used during define */
39 typedef struct ContainerDefRNA {
46 typedef struct FunctionDefRNA {
55 typedef struct PropertyDefRNA {
56 struct PropertyDefRNA *next, *prev;
58 struct ContainerRNA *cont;
59 struct PropertyRNA *prop;
62 const char *dnastructname;
63 const char *dnastructfromname;
64 const char *dnastructfromprop;
72 /* for finding length of array collections */
73 const char *dnalengthstructname;
74 const char *dnalengthname;
77 int booleanbit, booleannegative;
81 typedef struct StructDefRNA {
84 struct StructRNA *srna;
89 /* for derived structs to find data in some property */
90 const char *dnafromname;
91 const char *dnafromprop;
96 typedef struct AllocDefRNA {
97 struct AllocDefRNA *next, *prev;
101 typedef struct BlenderDefRNA {
105 struct StructRNA *laststruct;
106 int error, silent, preprocess;
109 extern BlenderDefRNA DefRNA;
111 /* Define functions for all types */
113 extern BlenderRNA BLENDER_RNA;
115 void RNA_def_ID(struct BlenderRNA *brna);
116 void RNA_def_action(struct BlenderRNA *brna);
117 void RNA_def_animation(struct BlenderRNA *brna);
118 void RNA_def_armature(struct BlenderRNA *brna);
119 void RNA_def_actuator(struct BlenderRNA *brna);
120 void RNA_def_brush(struct BlenderRNA *brna);
121 void RNA_def_brushclone(struct BlenderRNA *brna);
122 void RNA_def_camera(struct BlenderRNA *brna);
123 void RNA_def_cloth(struct BlenderRNA *brna);
124 void RNA_def_color(struct BlenderRNA *brna);
125 void RNA_def_constraint(struct BlenderRNA *brna);
126 void RNA_def_context(struct BlenderRNA *brna);
127 void RNA_def_controller(struct BlenderRNA *brna);
128 void RNA_def_curve(struct BlenderRNA *brna);
129 void RNA_def_fluidsim(struct BlenderRNA *brna);
130 void RNA_def_fcurve(struct BlenderRNA *brna);
131 void RNA_def_gameproperty(struct BlenderRNA *brna);
132 void RNA_def_group(struct BlenderRNA *brna);
133 void RNA_def_image(struct BlenderRNA *brna);
134 void RNA_def_key(struct BlenderRNA *brna);
135 void RNA_def_lamp(struct BlenderRNA *brna);
136 void RNA_def_lattice(struct BlenderRNA *brna);
137 void RNA_def_main(struct BlenderRNA *brna);
138 void RNA_def_material(struct BlenderRNA *brna);
139 void RNA_def_mesh(struct BlenderRNA *brna);
140 void RNA_def_meta(struct BlenderRNA *brna);
141 void RNA_def_modifier(struct BlenderRNA *brna);
142 void RNA_def_nla(struct BlenderRNA *brna);
143 void RNA_def_nodetree(struct BlenderRNA *brna);
144 void RNA_def_object(struct BlenderRNA *brna);
145 void RNA_def_object_force(struct BlenderRNA *brna);
146 void RNA_def_packedfile(struct BlenderRNA *brna);
147 void RNA_def_particle(struct BlenderRNA *brna);
148 void RNA_def_pose(struct BlenderRNA *brna);
149 void RNA_def_rna(struct BlenderRNA *brna);
150 void RNA_def_scene(struct BlenderRNA *brna);
151 void RNA_def_screen(struct BlenderRNA *brna);
152 void RNA_def_scriptlink(struct BlenderRNA *brna);
153 void RNA_def_sensor(struct BlenderRNA *brna);
154 void RNA_def_sequence(struct BlenderRNA *brna);
155 void RNA_def_space(struct BlenderRNA *brna);
156 void RNA_def_text(struct BlenderRNA *brna);
157 void RNA_def_texture(struct BlenderRNA *brna);
158 void RNA_def_timeline_marker(struct BlenderRNA *brna);
159 void RNA_def_sound(struct BlenderRNA *brna);
160 void RNA_def_ui(struct BlenderRNA *brna);
161 void RNA_def_userdef(struct BlenderRNA *brna);
162 void RNA_def_vfont(struct BlenderRNA *brna);
163 void RNA_def_vpaint(struct BlenderRNA *brna);
164 void RNA_def_wm(struct BlenderRNA *brna);
165 void RNA_def_world(struct BlenderRNA *brna);
167 /* Common Define functions */
169 void rna_def_animdata_common(struct StructRNA *srna);
171 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
172 void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname);
174 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
175 int rna_ID_name_length(struct PointerRNA *ptr);
176 void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
177 struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
178 struct IDProperty *rna_ID_idproperties(struct PointerRNA *ptr, int create);
179 void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
180 struct IDProperty *rna_IDPropertyGroup_idproperties(struct PointerRNA *ptr, int create);
182 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
183 int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
184 void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index);
185 void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
186 void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
187 void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
189 void rna_Object_update(struct bContext *C, struct PointerRNA *ptr);
190 void rna_Object_update_data(struct bContext *C, struct PointerRNA *ptr);
194 void RNA_api_main(struct StructRNA *srna);
195 void RNA_api_mesh(struct StructRNA *srna);
196 void RNA_api_object(struct StructRNA *srna);
197 void RNA_api_ui_layout(struct StructRNA *srna);
198 void RNA_api_wm(struct StructRNA *srna);
202 extern StringPropertyRNA rna_IDProperty_string;
203 extern IntPropertyRNA rna_IDProperty_int;
204 extern IntPropertyRNA rna_IDProperty_int_array;
205 extern FloatPropertyRNA rna_IDProperty_float;
206 extern FloatPropertyRNA rna_IDProperty_float_array;
207 extern PointerPropertyRNA rna_IDProperty_group;
208 extern CollectionPropertyRNA rna_IDProperty_collection;
209 extern FloatPropertyRNA rna_IDProperty_double;
210 extern FloatPropertyRNA rna_IDProperty_double_array;
212 extern StructRNA RNA_IDProperty;
213 extern StructRNA RNA_IDPropertyGroup;
215 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
217 /* Builtin Property Callbacks */
219 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
220 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
221 PointerRNA rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
222 PointerRNA rna_builtin_type_get(struct PointerRNA *ptr);
223 PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key);
227 typedef int (*IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data);
229 typedef struct ListBaseIterator {
232 IteratorSkipFunc skip;
235 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
236 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
237 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
238 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
240 typedef struct ArrayIterator {
243 void *free_ptr; /* will be free'd if set */
245 IteratorSkipFunc skip;
248 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip);
249 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
250 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
251 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
252 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
254 /* Duplicated code since we can't link in blenlib */
256 void rna_addtail(struct ListBase *listbase, void *vlink);
257 void rna_freelinkN(struct ListBase *listbase, void *vlink);
258 void rna_freelistN(struct ListBase *listbase);
260 StructDefRNA *rna_find_struct_def(StructRNA *srna);
261 FunctionDefRNA *rna_find_function_def(FunctionRNA *func);
262 PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm);
263 PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop);
265 /* Pointer Handling */
267 PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *type, void *data);
271 int rna_parameter_size(struct PropertyRNA *parm);
273 #endif /* RNA_INTERNAL_H */