Paint refactoring commit, non-disruptive (in theory :p)
[blender.git] / source / blender / makesrna / intern / rna_internal.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Blender Foundation (2008).
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/makesrna/intern/rna_internal.h
24  *  \ingroup RNA
25  */
26
27 #ifndef __RNA_INTERNAL_H__
28 #define __RNA_INTERNAL_H__
29
30 #include "BLI_utildefines.h"
31
32 #include "rna_internal_types.h"
33
34 #include "UI_resources.h"
35
36 #define RNA_MAGIC ((int)~0)
37
38 struct ColorBand;
39 struct ID;
40 struct IDProperty;
41 struct Main;
42 struct Mesh;
43 struct Object;
44 struct RenderEngine;
45 struct ReportList;
46 struct SDNA;
47 struct Sequence;
48
49 /* Data structures used during define */
50
51 typedef struct ContainerDefRNA {
52         void *next, *prev;
53
54         ContainerRNA *cont;
55         ListBase properties;
56 } ContainerDefRNA;
57
58 typedef struct FunctionDefRNA {
59         ContainerDefRNA cont;
60
61         FunctionRNA *func;
62         const char *srna;
63         const char *call;
64         const char *gencall;
65 } FunctionDefRNA;
66
67 typedef struct PropertyDefRNA {
68         struct PropertyDefRNA *next, *prev;
69
70         struct ContainerRNA *cont;
71         struct PropertyRNA *prop;
72
73         /* struct */
74         const char *dnastructname;
75         const char *dnastructfromname;
76         const char *dnastructfromprop;
77
78         /* property */
79         const char *dnaname;
80         const char *dnatype;
81         int dnaarraylength;
82         int dnapointerlevel;
83
84         /* for finding length of array collections */
85         const char *dnalengthstructname;
86         const char *dnalengthname;
87         int dnalengthfixed;
88
89         int booleanbit, booleannegative;
90
91         /* not to be confused with PROP_ENUM_FLAG
92          * this only allows one of the flags to be set at a time, clearing all others */
93         int enumbitflags;
94 } PropertyDefRNA;
95
96 typedef struct StructDefRNA {
97         ContainerDefRNA cont;
98
99         struct StructRNA *srna;
100         const char *filename;
101
102         const char *dnaname;
103
104         /* for derived structs to find data in some property */
105         const char *dnafromname;
106         const char *dnafromprop;
107
108         ListBase functions;
109 } StructDefRNA;
110
111 typedef struct AllocDefRNA {
112         struct AllocDefRNA *next, *prev;
113         void *mem;
114 } AllocDefRNA;
115
116 typedef struct BlenderDefRNA {
117         struct SDNA *sdna;
118         ListBase structs;
119         ListBase allocs;
120         struct StructRNA *laststruct;
121         int error, silent, preprocess, verify, animate;
122 } BlenderDefRNA;
123
124 extern BlenderDefRNA DefRNA;
125
126 /* Define functions for all types */
127
128 extern BlenderRNA BLENDER_RNA;
129
130 void RNA_def_ID(struct BlenderRNA *brna);
131 void RNA_def_action(struct BlenderRNA *brna);
132 void RNA_def_animation(struct BlenderRNA *brna);
133 void RNA_def_animviz(struct BlenderRNA *brna);
134 void RNA_def_armature(struct BlenderRNA *brna);
135 void RNA_def_actuator(struct BlenderRNA *brna);
136 void RNA_def_boid(struct BlenderRNA *brna);
137 void RNA_def_brush(struct BlenderRNA *brna);
138 void RNA_def_camera(struct BlenderRNA *brna);
139 void RNA_def_cloth(struct BlenderRNA *brna);
140 void RNA_def_color(struct BlenderRNA *brna);
141 void RNA_def_constraint(struct BlenderRNA *brna);
142 void RNA_def_context(struct BlenderRNA *brna);
143 void RNA_def_controller(struct BlenderRNA *brna);
144 void RNA_def_curve(struct BlenderRNA *brna);
145 void RNA_def_dynamic_paint(struct BlenderRNA *brna);
146 void RNA_def_fluidsim(struct BlenderRNA *brna);
147 void RNA_def_fcurve(struct BlenderRNA *brna);
148 void RNA_def_gameproperty(struct BlenderRNA *brna);
149 void RNA_def_gpencil(struct BlenderRNA *brna);
150 void RNA_def_group(struct BlenderRNA *brna);
151 void RNA_def_image(struct BlenderRNA *brna);
152 void RNA_def_key(struct BlenderRNA *brna);
153 void RNA_def_lamp(struct BlenderRNA *brna);
154 void RNA_def_lattice(struct BlenderRNA *brna);
155 void RNA_def_linestyle(struct BlenderRNA *brna);
156 void RNA_def_main(struct BlenderRNA *brna);
157 void RNA_def_material(struct BlenderRNA *brna);
158 void RNA_def_mesh(struct BlenderRNA *brna);
159 void RNA_def_meta(struct BlenderRNA *brna);
160 void RNA_def_modifier(struct BlenderRNA *brna);
161 void RNA_def_nla(struct BlenderRNA *brna);
162 void RNA_def_nodetree(struct BlenderRNA *brna);
163 void RNA_def_object(struct BlenderRNA *brna);
164 void RNA_def_object_force(struct BlenderRNA *brna);
165 void RNA_def_packedfile(struct BlenderRNA *brna);
166 void RNA_def_particle(struct BlenderRNA *brna);
167 void RNA_def_pose(struct BlenderRNA *brna);
168 void RNA_def_render(struct BlenderRNA *brna);
169 void RNA_def_rigidbody(struct BlenderRNA *brna);
170 void RNA_def_rna(struct BlenderRNA *brna);
171 void RNA_def_scene(struct BlenderRNA *brna);
172 void RNA_def_screen(struct BlenderRNA *brna);
173 void RNA_def_sculpt_paint(struct BlenderRNA *brna);
174 void RNA_def_sensor(struct BlenderRNA *brna);
175 void RNA_def_sequencer(struct BlenderRNA *brna);
176 void RNA_def_smoke(struct BlenderRNA *brna);
177 void RNA_def_space(struct BlenderRNA *brna);
178 void RNA_def_speaker(struct BlenderRNA *brna);
179 void RNA_def_test(struct BlenderRNA *brna);
180 void RNA_def_text(struct BlenderRNA *brna);
181 void RNA_def_texture(struct BlenderRNA *brna);
182 void RNA_def_timeline_marker(struct BlenderRNA *brna);
183 void RNA_def_sound(struct BlenderRNA *brna);
184 void RNA_def_ui(struct BlenderRNA *brna);
185 void RNA_def_userdef(struct BlenderRNA *brna);
186 void RNA_def_vfont(struct BlenderRNA *brna);
187 void RNA_def_wm(struct BlenderRNA *brna);
188 void RNA_def_world(struct BlenderRNA *brna);
189 void RNA_def_movieclip(struct BlenderRNA *brna);
190 void RNA_def_tracking(struct BlenderRNA *brna);
191 void RNA_def_mask(struct BlenderRNA *brna);
192
193 /* Common Define functions */
194
195 void rna_def_animdata_common(struct StructRNA *srna);
196
197 void rna_def_animviz_common(struct StructRNA *srna);
198 void rna_def_motionpath_common(struct StructRNA *srna);
199
200 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
201 void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const char *begin, const char *activeget,
202                          const char *activeset, const char *activeeditable, const char *structname,
203                          const char *structname_slots, const char *update);
204 void rna_def_render_layer_common(struct StructRNA *srna, int scene);
205
206 void rna_def_actionbone_group_common(struct StructRNA *srna, int update_flag, const char *update_cb);
207 void rna_ActionGroup_colorset_set(struct PointerRNA *ptr, int value);
208
209 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
210 int rna_ID_name_length(struct PointerRNA *ptr);
211 void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
212 struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
213 struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, bool create);
214 void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
215 struct IDProperty *rna_PropertyGroup_idprops(struct PointerRNA *ptr, bool create);
216 void rna_PropertyGroup_unregister(struct Main *bmain, struct StructRNA *type);
217 struct StructRNA *rna_PropertyGroup_register(struct Main *bmain, struct ReportList *reports, void *data,
218                                              const char *identifier, StructValidateFunc validate,
219                                              StructCallbackFunc call, StructFreeFunc free);
220 struct StructRNA *rna_PropertyGroup_refine(struct PointerRNA *ptr);
221
222 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
223 int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
224 void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index);
225 void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
226 void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
227 void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
228 PointerRNA rna_object_shapekey_index_get(struct ID *id, int value);
229 int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
230
231 /* named internal so as not to conflict with obj.update() rna func */
232 void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
233 void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
234 void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
235 void rna_TextureSlot_brush_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
236
237 /* basic poll functions for object types */
238 int rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
239 int rna_Camera_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
240 int rna_Curve_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
241 int rna_Lattice_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
242 int rna_Mesh_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
243
244 /* basic poll functions for actions (to prevent actions getting set in wrong places) */
245 int rna_Action_id_poll(struct PointerRNA *ptr, struct PointerRNA value);
246 int rna_Action_actedit_assign_poll(struct PointerRNA *ptr, struct PointerRNA value);
247
248 char *rna_TextureSlot_path(struct PointerRNA *ptr);
249
250 /* API functions */
251
252 void RNA_api_action(StructRNA *srna);
253 void RNA_api_armature_edit_bone(StructRNA *srna);
254 void RNA_api_bone(StructRNA *srna);
255 void RNA_api_camera(StructRNA *srna);
256 void RNA_api_drivers(StructRNA *srna);
257 void RNA_api_image(struct StructRNA *srna);
258 void RNA_api_operator(struct StructRNA *srna);
259 void RNA_api_macro(struct StructRNA *srna);
260 void RNA_api_keyconfig(struct StructRNA *srna);
261 void RNA_api_keyconfigs(struct StructRNA *srna);
262 void RNA_api_keyingset(struct StructRNA *srna);
263 void RNA_api_keymap(struct StructRNA *srna);
264 void RNA_api_keymaps(struct StructRNA *srna);
265 void RNA_api_keymapitem(struct StructRNA *srna);
266 void RNA_api_keymapitems(struct StructRNA *srna);
267 void RNA_api_main(struct StructRNA *srna);
268 void RNA_api_material(StructRNA *srna);
269 void RNA_api_mesh(struct StructRNA *srna);
270 void RNA_api_meta(struct StructRNA *srna);
271 void RNA_api_object(struct StructRNA *srna);
272 void RNA_api_object_base(struct StructRNA *srna);
273 void RNA_api_pose(struct StructRNA *srna);
274 void RNA_api_pose_channel(struct StructRNA *srna);
275 void RNA_api_scene(struct StructRNA *srna);
276 void RNA_api_scene_render(struct StructRNA *srna);
277 void RNA_api_sequence_strip(StructRNA *srna);
278 void RNA_api_text(struct StructRNA *srna);
279 void RNA_api_ui_layout(struct StructRNA *srna);
280 void RNA_api_wm(struct StructRNA *srna);
281 void RNA_api_sensor(struct StructRNA *srna);
282 void RNA_api_controller(struct StructRNA *srna);
283 void RNA_api_actuator(struct StructRNA *srna);
284 void RNA_api_texture(struct StructRNA *srna);
285 void RNA_api_environment_map(struct StructRNA *srna);
286 void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop);
287 void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop);
288
289 /* main collection functions */
290 void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop);
291 void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop);
292 void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop);
293 void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop);
294 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop);
295 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop);
296 void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop);
297 void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop);
298 void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop);
299 void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop);
300 void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop);
301 void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop);
302 void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop);
303 void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop);
304 void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop);
305 void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop);
306 void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop);
307 void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop);
308 void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop);
309 void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop);
310 void RNA_def_main_speakers(BlenderRNA *brna, PropertyRNA *cprop);
311 void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop);
312 void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop);
313 void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop);
314 void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop);
315 void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop);
316 void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop);
317 void RNA_def_main_masks(BlenderRNA *brna, PropertyRNA *cprop);
318 void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop);
319
320 /* ID Properties */
321
322 extern StringPropertyRNA rna_PropertyGroupItem_string;
323 extern IntPropertyRNA rna_PropertyGroupItem_int;
324 extern IntPropertyRNA rna_PropertyGroupItem_int_array;
325 extern FloatPropertyRNA rna_PropertyGroupItem_float;
326 extern FloatPropertyRNA rna_PropertyGroupItem_float_array;
327 extern PointerPropertyRNA rna_PropertyGroupItem_group;
328 extern CollectionPropertyRNA rna_PropertyGroupItem_collection;
329 extern CollectionPropertyRNA rna_PropertyGroupItem_idp_array;
330 extern FloatPropertyRNA rna_PropertyGroupItem_double;
331 extern FloatPropertyRNA rna_PropertyGroupItem_double_array;
332
333 extern StructRNA RNA_PropertyGroupItem;
334 extern StructRNA RNA_PropertyGroup;
335
336 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
337
338 /* Builtin Property Callbacks */
339
340 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
341 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
342 PointerRNA rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
343 PointerRNA rna_builtin_type_get(struct PointerRNA *ptr);
344 int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr);
345
346 /* Iterators */
347
348 typedef int (*IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data);
349
350 typedef struct ListBaseIterator {
351         Link *link;
352         int flag;
353         IteratorSkipFunc skip;
354 } ListBaseIterator;
355
356 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
357 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
358 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
359 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
360 PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, struct ListBase *lb, int index);
361
362 typedef struct ArrayIterator {
363         char *ptr;
364         char *endptr;  /* past the last valid pointer, only for comparisons, ignores skipped values */
365         void *free_ptr; /* will be freed if set */
366         int itemsize;
367
368         /* array length with no skip functions applied, take care not to compare against index from animsys
369          * or python indices */
370         int length;
371
372         /* optional skip function, when set the array as viewed by rna can contain only a subset of the members.
373          * this changes indices so quick array index lookups are not possible when skip function is used. */
374         IteratorSkipFunc skip;
375 } ArrayIterator;
376
377 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length,
378                               int free_ptr, IteratorSkipFunc skip);
379 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
380 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
381 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
382 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
383 PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, int itemsize, int length, int index);
384
385 /* Duplicated code since we can't link in blenlib */
386
387 void rna_addtail(struct ListBase *listbase, void *vlink);
388 void rna_freelinkN(struct ListBase *listbase, void *vlink);
389 void rna_freelistN(struct ListBase *listbase);
390 PropertyDefRNA *rna_findlink(ListBase *listbase, const char *identifier);
391
392 StructDefRNA *rna_find_struct_def(StructRNA *srna);
393 FunctionDefRNA *rna_find_function_def(FunctionRNA *func);
394 PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm);
395 PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop);
396
397 /* Pointer Handling */
398
399 PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *type, void *data);
400
401 /* Functions */
402
403 int rna_parameter_size(struct PropertyRNA *parm);
404 int rna_parameter_size_alloc(struct PropertyRNA *parm);
405
406 struct Mesh *rna_Main_meshes_new_from_object(
407         struct Main *bmain, struct ReportList *reports, struct Scene *sce,
408         struct Object *ob, int apply_modifiers, int settings, int calc_tessface);
409
410 /* XXX, these should not need to be defined here~! */
411 struct MTex *rna_mtex_texture_slots_add(struct ID *self, struct bContext *C, struct ReportList *reports);
412 struct MTex *rna_mtex_texture_slots_create(struct ID *self, struct bContext *C, struct ReportList *reports, int index);
413 void rna_mtex_texture_slots_clear(struct ID *self, struct bContext *C, struct ReportList *reports, int index);
414
415
416 int rna_IDMaterials_assign_int(struct PointerRNA *ptr, int key, const struct PointerRNA *assign_ptr);
417
418
419 /* Internal functions that cycles uses so we need to declare (tsk tsk) */
420 void rna_RenderLayer_rect_set(PointerRNA *ptr, const float *values);
421 void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values);
422
423 #endif  /* __RNA_INTERNAL_H__ */