py/rna access to setting the header text - can be used in modal operators.
[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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 "UI_resources.h"
29
30 #include "rna_internal_types.h"
31
32 #define RNA_MAGIC ((int)~0)
33
34 struct ID;
35 struct IDProperty;
36 struct SDNA;
37 struct Sequence;
38
39 /* Data structures used during define */
40
41 typedef struct ContainerDefRNA {
42         void *next, *prev;
43
44         ContainerRNA *cont;
45         ListBase properties;
46 } ContainerDefRNA;
47
48 typedef struct FunctionDefRNA {
49         ContainerDefRNA cont;
50
51         FunctionRNA *func;
52         const char *srna;
53         const char *call;
54         const char *gencall;
55 } FunctionDefRNA;
56
57 typedef struct PropertyDefRNA {
58         struct PropertyDefRNA *next, *prev;
59
60         struct ContainerRNA *cont;
61         struct PropertyRNA *prop;
62
63         /* struct */
64         const char *dnastructname;
65         const char *dnastructfromname;
66         const char *dnastructfromprop;
67
68         /* property */
69         const char *dnaname;
70         const char *dnatype;
71         int dnaarraylength;
72         int dnapointerlevel;
73
74         /* for finding length of array collections */
75         const char *dnalengthstructname;
76         const char *dnalengthname;
77         int dnalengthfixed;
78
79         int booleanbit, booleannegative;
80
81         /* not to be confused with PROP_ENUM_FLAG
82          * this only allows one of the flags to be set at a time, clearing all others */
83         int enumbitflags;
84 } PropertyDefRNA;
85
86 typedef struct StructDefRNA {
87         ContainerDefRNA cont;
88
89         struct StructRNA *srna;
90         const char *filename;
91
92         const char *dnaname;
93
94         /* for derived structs to find data in some property */
95         const char *dnafromname;
96         const char *dnafromprop;
97
98         ListBase functions;
99 } StructDefRNA;
100
101 typedef struct AllocDefRNA {
102         struct AllocDefRNA *next, *prev;
103         void *mem;
104 } AllocDefRNA;
105
106 typedef struct BlenderDefRNA {
107         struct SDNA *sdna;
108         ListBase structs;
109         ListBase allocs;
110         struct StructRNA *laststruct;
111         int error, silent, preprocess, verify;
112 } BlenderDefRNA;
113
114 extern BlenderDefRNA DefRNA;
115
116 /* Define functions for all types */
117
118 extern BlenderRNA BLENDER_RNA;
119
120 void RNA_def_ID(struct BlenderRNA *brna);
121 void RNA_def_action(struct BlenderRNA *brna);
122 void RNA_def_animation(struct BlenderRNA *brna);
123 void RNA_def_animviz(struct BlenderRNA *brna);
124 void RNA_def_armature(struct BlenderRNA *brna);
125 void RNA_def_actuator(struct BlenderRNA *brna);
126 void RNA_def_boid(struct BlenderRNA *brna);
127 void RNA_def_brush(struct BlenderRNA *brna);
128 void RNA_def_brushclone(struct BlenderRNA *brna);
129 void RNA_def_camera(struct BlenderRNA *brna);
130 void RNA_def_cloth(struct BlenderRNA *brna);
131 void RNA_def_color(struct BlenderRNA *brna);
132 void RNA_def_constraint(struct BlenderRNA *brna);
133 void RNA_def_context(struct BlenderRNA *brna);
134 void RNA_def_controller(struct BlenderRNA *brna);
135 void RNA_def_curve(struct BlenderRNA *brna);
136 void RNA_def_fluidsim(struct BlenderRNA *brna);
137 void RNA_def_fcurve(struct BlenderRNA *brna);
138 void RNA_def_gameproperty(struct BlenderRNA *brna);
139 void RNA_def_gpencil(struct BlenderRNA *brna);
140 void RNA_def_group(struct BlenderRNA *brna);
141 void RNA_def_image(struct BlenderRNA *brna);
142 void RNA_def_key(struct BlenderRNA *brna);
143 void RNA_def_lamp(struct BlenderRNA *brna);
144 void RNA_def_lattice(struct BlenderRNA *brna);
145 void RNA_def_main(struct BlenderRNA *brna);
146 void RNA_def_material(struct BlenderRNA *brna);
147 void RNA_def_mesh(struct BlenderRNA *brna);
148 void RNA_def_meta(struct BlenderRNA *brna);
149 void RNA_def_modifier(struct BlenderRNA *brna);
150 void RNA_def_nla(struct BlenderRNA *brna);
151 void RNA_def_nodetree(struct BlenderRNA *brna);
152 void RNA_def_object(struct BlenderRNA *brna);
153 void RNA_def_object_force(struct BlenderRNA *brna);
154 void RNA_def_packedfile(struct BlenderRNA *brna);
155 void RNA_def_particle(struct BlenderRNA *brna);
156 void RNA_def_pose(struct BlenderRNA *brna);
157 void RNA_def_render(struct BlenderRNA *brna);
158 void RNA_def_rna(struct BlenderRNA *brna);
159 void RNA_def_scene(struct BlenderRNA *brna);
160 void RNA_def_screen(struct BlenderRNA *brna);
161 void RNA_def_sculpt_paint(struct BlenderRNA *brna);
162 void RNA_def_sensor(struct BlenderRNA *brna);
163 void RNA_def_sequencer(struct BlenderRNA *brna);
164 void RNA_def_smoke(struct BlenderRNA *brna);
165 void RNA_def_space(struct BlenderRNA *brna);
166 void RNA_def_test(struct BlenderRNA *brna);
167 void RNA_def_text(struct BlenderRNA *brna);
168 void RNA_def_texture(struct BlenderRNA *brna);
169 void RNA_def_timeline_marker(struct BlenderRNA *brna);
170 void RNA_def_sound(struct BlenderRNA *brna);
171 void RNA_def_ui(struct BlenderRNA *brna);
172 void RNA_def_userdef(struct BlenderRNA *brna);
173 void RNA_def_vfont(struct BlenderRNA *brna);
174 void RNA_def_wm(struct BlenderRNA *brna);
175 void RNA_def_world(struct BlenderRNA *brna);
176
177 /* Common Define functions */
178
179 void rna_def_animdata_common(struct StructRNA *srna);
180
181 void rna_def_animviz_common(struct StructRNA *srna);
182 void rna_def_motionpath_common(struct StructRNA *srna);
183
184 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
185 void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *structname_slots, const char *update);
186 void rna_def_render_layer_common(struct StructRNA *srna, int scene);
187
188 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
189 int rna_ID_name_length(struct PointerRNA *ptr);
190 void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
191 struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
192 struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, int create);
193 void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
194 struct IDProperty *rna_IDPropertyGroup_idprops(struct PointerRNA *ptr, int create);
195 void rna_IDPropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
196 struct StructRNA *rna_IDPropertyGroup_register(const struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
197 struct StructRNA* rna_IDPropertyGroup_refine(struct PointerRNA *ptr);
198
199 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
200 int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
201 void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index);
202 void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
203 void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
204 void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
205 PointerRNA rna_object_shapekey_index_get(struct ID *id, int value);
206 int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
207
208 /* named internal so as not to conflict with obj.update() rna func */
209 void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
210 void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
211 void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
212
213 /* basic poll functions for object types */
214 int rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
215 int rna_Camera_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
216 int rna_Curve_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
217 int rna_Lattice_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
218 int rna_Mesh_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
219
220
221 char *rna_TextureSlot_path(struct PointerRNA *ptr);
222
223 /* API functions */
224
225 void RNA_api_action(StructRNA *srna);
226 void RNA_api_armature_edit_bone(StructRNA *srna);
227 void RNA_api_bone(StructRNA *srna);
228 void RNA_api_drivers(StructRNA *srna);
229 void RNA_api_image(struct StructRNA *srna);
230 void RNA_api_operator(struct StructRNA *srna);
231 void RNA_api_macro(struct StructRNA *srna);
232 void RNA_api_keyconfig(struct StructRNA *srna);
233 void RNA_api_keyingset(struct StructRNA *srna);
234 void RNA_api_keymap(struct StructRNA *srna);
235 void RNA_api_keymapitem(struct StructRNA *srna);
236 void RNA_api_area(struct StructRNA *srna);
237 void RNA_api_main(struct StructRNA *srna);
238 void RNA_api_material(StructRNA *srna);
239 void RNA_api_mesh(struct StructRNA *srna);
240 void RNA_api_object(struct StructRNA *srna);
241 void RNA_api_object_base(struct StructRNA *srna);
242 void RNA_api_pose_channel(struct StructRNA *srna);
243 void RNA_api_scene(struct StructRNA *srna);
244 void RNA_api_scene_render(struct StructRNA *srna);
245 void RNA_api_sequence_strip(StructRNA *srna);
246 void RNA_api_text(struct StructRNA *srna);
247 void RNA_api_ui_layout(struct StructRNA *srna);
248 void RNA_api_wm(struct StructRNA *srna);
249 void RNA_api_sensor(struct StructRNA *srna);
250 void RNA_api_controller(struct StructRNA *srna);
251 void RNA_api_actuator(struct StructRNA *srna);
252
253 /* main collection functions */
254 void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop);
255 void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop);
256 void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop);
257 void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop);
258 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop);
259 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop);
260 void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop);
261 void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop);
262 void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop);
263 void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop);
264 void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop);
265 void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop);
266 void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop);
267 void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop);
268 void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop);
269 void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop);
270 void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop);
271 void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop);
272 void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop);
273 void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop);
274 void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop);
275 void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop);
276 void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop);
277 void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop);
278 void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop);
279
280 /* ID Properties */
281
282 extern StringPropertyRNA rna_IDProperty_string;
283 extern IntPropertyRNA rna_IDProperty_int;
284 extern IntPropertyRNA rna_IDProperty_int_array;
285 extern FloatPropertyRNA rna_IDProperty_float;
286 extern FloatPropertyRNA rna_IDProperty_float_array;
287 extern PointerPropertyRNA rna_IDProperty_group;
288 extern CollectionPropertyRNA rna_IDProperty_collection;
289 extern CollectionPropertyRNA rna_IDProperty_idp_array;
290 extern FloatPropertyRNA rna_IDProperty_double;
291 extern FloatPropertyRNA rna_IDProperty_double_array;
292
293 extern StructRNA RNA_IDProperty;
294 extern StructRNA RNA_IDPropertyGroup;
295
296 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
297
298 /* Builtin Property Callbacks */
299
300 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
301 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
302 PointerRNA rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
303 PointerRNA rna_builtin_type_get(struct PointerRNA *ptr);
304 PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key);
305
306 /* Iterators */
307
308 typedef int (*IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data);
309
310 typedef struct ListBaseIterator {
311         Link *link;
312         int flag;
313         IteratorSkipFunc skip;
314 } ListBaseIterator;
315
316 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
317 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
318 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
319 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
320 PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, struct ListBase *lb, int index);
321
322 typedef struct ArrayIterator {
323         char *ptr;
324         char *endptr;
325         void *free_ptr; /* will be free'd if set */
326         int itemsize;
327         IteratorSkipFunc skip;
328 } ArrayIterator;
329
330 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, int free_ptr, IteratorSkipFunc skip);
331 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
332 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
333 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
334 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
335 PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, int itemsize, int length, int index);
336
337 /* Duplicated code since we can't link in blenlib */
338
339 void rna_addtail(struct ListBase *listbase, void *vlink);
340 void rna_freelinkN(struct ListBase *listbase, void *vlink);
341 void rna_freelistN(struct ListBase *listbase);
342 PropertyDefRNA *rna_findlink(ListBase *listbase, const char *identifier);
343
344 StructDefRNA *rna_find_struct_def(StructRNA *srna);
345 FunctionDefRNA *rna_find_function_def(FunctionRNA *func);
346 PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm);
347 PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop);
348
349 /* Pointer Handling */
350
351 PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *type, void *data);
352
353 /* Functions */
354
355 int rna_parameter_size(struct PropertyRNA *parm);
356 int rna_parameter_size_alloc(struct PropertyRNA *parm);
357
358 // XXX, these should not need to be defined here~!
359 struct MTex *rna_mtex_texture_slots_add(struct ID *self, struct ReportList *reports);
360 struct MTex *rna_mtex_texture_slots_create(struct ID *self, struct ReportList *reports, int index);
361 void rna_mtex_texture_slots_clear(struct ID *self, struct ReportList *reports, int index);
362
363 #endif /* RNA_INTERNAL_H */
364
365