Py/RNA: support to load and remove sounds
[blender.git] / source / blender / makesrna / intern / rna_main_api.c
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  * The Original Code is Copyright (C) 2009 Blender Foundation.
19  * All rights reserved.
20  *
21  *
22  * Contributor(s): Blender Foundation
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file blender/makesrna/intern/rna_main_api.c
28  *  \ingroup RNA
29  */
30
31
32 #include <stdlib.h>
33 #include <stdio.h>
34 #include <errno.h>
35
36 #include "DNA_ID.h"
37 #include "DNA_modifier_types.h"
38
39 #include "BLI_utildefines.h"
40 #include "BLI_path_util.h"
41
42 #include "RNA_define.h"
43 #include "RNA_access.h"
44 #include "RNA_enum_types.h"
45
46 #include "rna_internal.h"
47
48 #ifdef RNA_RUNTIME
49
50 #include "BKE_main.h"
51 #include "BKE_camera.h"
52 #include "BKE_curve.h"
53 #include "BKE_DerivedMesh.h"
54 #include "BKE_displist.h"
55 #include "BKE_mesh.h"
56 #include "BKE_armature.h"
57 #include "BKE_lamp.h"
58 #include "BKE_library.h"
59 #include "BKE_object.h"
60 #include "BKE_material.h"
61 #include "BKE_image.h"
62 #include "BKE_texture.h"
63 #include "BKE_scene.h"
64 #include "BKE_sound.h"
65 #include "BKE_text.h"
66 #include "BKE_action.h"
67 #include "BKE_group.h"
68 #include "BKE_brush.h"
69 #include "BKE_lattice.h"
70 #include "BKE_mball.h"
71 #include "BKE_world.h"
72 #include "BKE_particle.h"
73 #include "BKE_paint.h"
74 #include "BKE_font.h"
75 #include "BKE_node.h"
76 #include "BKE_depsgraph.h"
77 #include "BKE_speaker.h"
78 #include "BKE_movieclip.h"
79 #include "BKE_mask.h"
80 #include "BKE_gpencil.h"
81 #include "BKE_linestyle.h"
82
83 #include "DNA_armature_types.h"
84 #include "DNA_camera_types.h"
85 #include "DNA_curve_types.h"
86 #include "DNA_lamp_types.h"
87 #include "DNA_material_types.h"
88 #include "DNA_mesh_types.h"
89 #include "DNA_object_types.h"
90 #include "DNA_speaker_types.h"
91 #include "DNA_sound_types.h"
92 #include "DNA_text_types.h"
93 #include "DNA_texture_types.h"
94 #include "DNA_group_types.h"
95 #include "DNA_brush_types.h"
96 #include "DNA_lattice_types.h"
97 #include "DNA_meta_types.h"
98 #include "DNA_world_types.h"
99 #include "DNA_particle_types.h"
100 #include "DNA_vfont_types.h"
101 #include "DNA_node_types.h"
102 #include "DNA_movieclip_types.h"
103 #include "DNA_mask_types.h"
104 #include "DNA_gpencil_types.h"
105
106 #include "ED_screen.h"
107
108 #include "BLF_translation.h"
109
110 #ifdef WITH_PYTHON
111 #  include "BPY_extern.h"
112 #endif
113
114 static Camera *rna_Main_cameras_new(Main *bmain, const char *name)
115 {
116         ID *id = BKE_camera_add(bmain, name);
117         id_us_min(id);
118         return (Camera *)id;
119 }
120 static void rna_Main_cameras_remove(Main *bmain, ReportList *reports, PointerRNA *camera_ptr)
121 {
122         Camera *camera = camera_ptr->data;
123         if (ID_REAL_USERS(camera) <= 0) {
124                 BKE_libblock_free(bmain, camera);
125                 RNA_POINTER_INVALIDATE(camera_ptr);
126         }
127         else {
128                 BKE_reportf(reports, RPT_ERROR, "Camera '%s' must have zero users to be removed, found %d",
129                             camera->id.name + 2, ID_REAL_USERS(camera));
130         }
131 }
132
133 static Scene *rna_Main_scenes_new(Main *bmain, const char *name)
134 {
135         return BKE_scene_add(bmain, name);
136 }
137 static void rna_Main_scenes_remove(Main *bmain, bContext *C, ReportList *reports, PointerRNA *scene_ptr)
138 {
139         /* don't call BKE_libblock_free(...) directly */
140         Scene *scene = scene_ptr->data;
141         Scene *scene_new;
142
143         if ((scene_new = scene->id.prev) ||
144             (scene_new = scene->id.next))
145         {
146                 bScreen *sc = CTX_wm_screen(C);
147                 if (sc->scene == scene) {
148
149 #ifdef WITH_PYTHON
150                         BPy_BEGIN_ALLOW_THREADS;
151 #endif
152
153                         ED_screen_set_scene(C, sc, scene_new);
154
155 #ifdef WITH_PYTHON
156                         BPy_END_ALLOW_THREADS;
157 #endif
158
159                 }
160
161                 BKE_scene_unlink(bmain, scene, scene_new);
162                 RNA_POINTER_INVALIDATE(scene_ptr);
163         }
164         else {
165                 BKE_reportf(reports, RPT_ERROR, "Scene '%s' is the last, cannot be removed", scene->id.name + 2);
166         }
167 }
168
169 static Object *rna_Main_objects_new(Main *bmain, ReportList *reports, const char *name, ID *data)
170 {
171         Object *ob;
172         int type = OB_EMPTY;
173         if (data) {
174                 /* keep in sync with OB_DATA_SUPPORT_ID() macro */
175                 switch (GS(data->name)) {
176                         case ID_ME:
177                                 type = OB_MESH;
178                                 break;
179                         case ID_CU:
180                                 type = BKE_curve_type_get((Curve *)data);
181                                 break;
182                         case ID_MB:
183                                 type = OB_MBALL;
184                                 break;
185                         case ID_LA:
186                                 type = OB_LAMP;
187                                 break;
188                         case ID_SPK:
189                                 type = OB_SPEAKER;
190                                 break;
191                         case ID_CA:
192                                 type = OB_CAMERA;
193                                 break;
194                         case ID_LT:
195                                 type = OB_LATTICE;
196                                 break;
197                         case ID_AR:
198                                 type = OB_ARMATURE;
199                                 break;
200                         default:
201                         {
202                                 const char *idname;
203                                 if (RNA_enum_id_from_value(id_type_items, GS(data->name), &idname) == 0)
204                                         idname = "UNKNOWN";
205
206                                 BKE_reportf(reports, RPT_ERROR, "ID type '%s' is not valid for an object", idname);
207                                 return NULL;
208                         }
209                 }
210
211                 id_us_plus(data);
212         }
213
214         ob = BKE_object_add_only_object(bmain, type, name);
215         id_us_min(&ob->id);
216
217         ob->data = data;
218         test_object_materials(bmain, ob->data);
219         
220         return ob;
221 }
222
223 static void rna_Main_objects_remove(Main *bmain, ReportList *reports, PointerRNA *object_ptr)
224 {
225         Object *object = object_ptr->data;
226         if (ID_REAL_USERS(object) <= 0) {
227                 BKE_object_unlink(object); /* needed or ID pointers to this are not cleared */
228                 BKE_libblock_free(bmain, object);
229                 RNA_POINTER_INVALIDATE(object_ptr);
230         }
231         else {
232                 BKE_reportf(reports, RPT_ERROR, "Object '%s' must have zero users to be removed, found %d",
233                             object->id.name + 2, ID_REAL_USERS(object));
234         }
235 }
236
237 static Material *rna_Main_materials_new(Main *bmain, const char *name)
238 {
239         ID *id = (ID *)BKE_material_add(bmain, name);
240         id_us_min(id);
241         return (Material *)id;
242 }
243 static void rna_Main_materials_remove(Main *bmain, ReportList *reports, PointerRNA *material_ptr)
244 {
245         Material *material = material_ptr->data;
246         if (ID_REAL_USERS(material) <= 0) {
247                 BKE_libblock_free(bmain, material);
248                 RNA_POINTER_INVALIDATE(material_ptr);
249         }
250         else {
251                 BKE_reportf(reports, RPT_ERROR, "Material '%s' must have zero users to be removed, found %d",
252                             material->id.name + 2, ID_REAL_USERS(material));
253         }
254 }
255
256 static EnumPropertyItem *rna_Main_nodetree_type_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
257 {
258         return rna_node_tree_type_itemf(NULL, NULL, r_free);
259 }
260 static struct bNodeTree *rna_Main_nodetree_new(Main *bmain, const char *name, int type)
261 {
262         bNodeTreeType *typeinfo = rna_node_tree_type_from_enum(type);
263         if (typeinfo) {
264                 bNodeTree *ntree = ntreeAddTree(bmain, name, typeinfo->idname);
265                 
266                 id_us_min(&ntree->id);
267                 return ntree;
268         }
269         else
270                 return NULL;
271 }
272 static void rna_Main_nodetree_remove(Main *bmain, ReportList *reports, PointerRNA *ntree_ptr)
273 {
274         bNodeTree *ntree = ntree_ptr->data;
275         if (ID_REAL_USERS(ntree) <= 0) {
276                 BKE_libblock_free(bmain, ntree);
277                 RNA_POINTER_INVALIDATE(ntree_ptr);
278         }
279         else {
280                 BKE_reportf(reports, RPT_ERROR, "Node tree '%s' must have zero users to be removed, found %d",
281                             ntree->id.name + 2, ID_REAL_USERS(ntree));
282         }
283 }
284
285 static Mesh *rna_Main_meshes_new(Main *bmain, const char *name)
286 {
287         Mesh *me = BKE_mesh_add(bmain, name);
288         id_us_min(&me->id);
289         return me;
290 }
291
292 /* copied from Mesh_getFromObject and adapted to RNA interface */
293 /* settings: 1 - preview, 2 - render */
294 Mesh *rna_Main_meshes_new_from_object(
295         Main *bmain, ReportList *reports, Scene *sce,
296         Object *ob, int apply_modifiers, int settings, int calc_tessface, int calc_undeformed)
297 {
298         switch (ob->type) {
299                 case OB_FONT:
300                 case OB_CURVE:
301                 case OB_SURF:
302                 case OB_MBALL:
303                 case OB_MESH:
304                         break;
305                 default:
306                         BKE_report(reports, RPT_ERROR, "Object does not have geometry data");
307                         return NULL;
308         }
309
310         return BKE_mesh_new_from_object(bmain, sce, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
311 }
312
313 static void rna_Main_meshes_remove(Main *bmain, ReportList *reports, PointerRNA *mesh_ptr)
314 {
315         Mesh *mesh = mesh_ptr->data;
316         if (ID_REAL_USERS(mesh) <= 0) {
317                 BKE_libblock_free(bmain, mesh);
318                 RNA_POINTER_INVALIDATE(mesh_ptr);
319         }
320         else {
321                 BKE_reportf(reports, RPT_ERROR, "Mesh '%s' must have zero users to be removed, found %d",
322                             mesh->id.name + 2, ID_REAL_USERS(mesh));
323         }
324 }
325
326 static Lamp *rna_Main_lamps_new(Main *bmain, const char *name, int type)
327 {
328         Lamp *lamp = BKE_lamp_add(bmain, name);
329         lamp->type = type;
330         id_us_min(&lamp->id);
331         return lamp;
332 }
333 static void rna_Main_lamps_remove(Main *bmain, ReportList *reports, PointerRNA *lamp_ptr)
334 {
335         Lamp *lamp = lamp_ptr->data;
336         if (ID_REAL_USERS(lamp) <= 0) {
337                 BKE_libblock_free(bmain, lamp);
338                 RNA_POINTER_INVALIDATE(lamp_ptr);
339         }
340         else {
341                 BKE_reportf(reports, RPT_ERROR, "Lamp '%s' must have zero users to be removed, found %d",
342                             lamp->id.name + 2, ID_REAL_USERS(lamp));
343         }
344 }
345
346 static Image *rna_Main_images_new(Main *bmain, const char *name, int width, int height, int alpha, int float_buffer, int stereo3d)
347 {
348         float color[4] = {0.0, 0.0, 0.0, 1.0};
349         Image *image = BKE_image_add_generated(bmain, width, height, name, alpha ? 32 : 24, float_buffer, 0, color, stereo3d);
350         id_us_min(&image->id);
351         return image;
352 }
353 static Image *rna_Main_images_load(Main *bmain, ReportList *reports, const char *filepath)
354 {
355         Image *ima;
356
357         errno = 0;
358         ima = BKE_image_load(bmain, filepath);
359
360         if (!ima) {
361                 BKE_reportf(reports, RPT_ERROR, "Cannot read '%s': %s", filepath,
362                             errno ? strerror(errno) : TIP_("unsupported image format"));
363         }
364
365         return ima;
366 }
367 static void rna_Main_images_remove(Main *bmain, ReportList *reports, PointerRNA *image_ptr)
368 {
369         Image *image = image_ptr->data;
370         if (ID_REAL_USERS(image) <= 0) {
371                 BKE_libblock_free(bmain, image);
372                 RNA_POINTER_INVALIDATE(image_ptr);
373         }
374         else {
375                 BKE_reportf(reports, RPT_ERROR, "Image '%s' must have zero users to be removed, found %d",
376                             image->id.name + 2, ID_REAL_USERS(image));
377         }
378 }
379
380 static Lattice *rna_Main_lattices_new(Main *bmain, const char *name)
381 {
382         Lattice *lt = BKE_lattice_add(bmain, name);
383         id_us_min(&lt->id);
384         return lt;
385 }
386 static void rna_Main_lattices_remove(Main *bmain, ReportList *reports, PointerRNA *lt_ptr)
387 {
388         Lattice *lt = lt_ptr->data;
389         if (ID_REAL_USERS(lt) <= 0) {
390                 BKE_libblock_free(bmain, lt);
391                 RNA_POINTER_INVALIDATE(lt_ptr);
392         }
393         else {
394                 BKE_reportf(reports, RPT_ERROR, "Lattice '%s' must have zero users to be removed, found %d",
395                             lt->id.name + 2, ID_REAL_USERS(lt));
396         }
397 }
398
399 static Curve *rna_Main_curves_new(Main *bmain, const char *name, int type)
400 {
401         Curve *cu = BKE_curve_add(bmain, name, type);
402         id_us_min(&cu->id);
403         return cu;
404 }
405 static void rna_Main_curves_remove(Main *bmain, ReportList *reports, PointerRNA *cu_ptr)
406 {
407         Curve *cu = cu_ptr->data;
408         if (ID_REAL_USERS(cu) <= 0) {
409                 BKE_libblock_free(bmain, cu);
410                 RNA_POINTER_INVALIDATE(cu_ptr);
411         }
412         else {
413                 BKE_reportf(reports, RPT_ERROR, "Curve '%s' must have zero users to be removed, found %d",
414                             cu->id.name + 2, ID_REAL_USERS(cu));
415         }
416 }
417
418 static MetaBall *rna_Main_metaballs_new(Main *bmain, const char *name)
419 {
420         MetaBall *mb = BKE_mball_add(bmain, name);
421         id_us_min(&mb->id);
422         return mb;
423 }
424 static void rna_Main_metaballs_remove(Main *bmain, ReportList *reports, PointerRNA *mb_ptr)
425 {
426         MetaBall *mb = mb_ptr->data;
427         if (ID_REAL_USERS(mb) <= 0) {
428                 BKE_libblock_free(bmain, mb);
429                 RNA_POINTER_INVALIDATE(mb_ptr);
430         }
431         else {
432                 BKE_reportf(reports, RPT_ERROR, "Metaball '%s' must have zero users to be removed, found %d",
433                             mb->id.name + 2, ID_REAL_USERS(mb));
434         }
435 }
436
437 static VFont *rna_Main_fonts_load(Main *bmain, ReportList *reports, const char *filepath)
438 {
439         VFont *font;
440
441         errno = 0;
442         font = BKE_vfont_load(bmain, filepath);
443
444         if (!font)
445                 BKE_reportf(reports, RPT_ERROR, "Cannot read '%s': %s", filepath,
446                             errno ? strerror(errno) : TIP_("unsupported font format"));
447
448         return font;
449
450 }
451 static void rna_Main_fonts_remove(Main *bmain, ReportList *reports, PointerRNA *vfont_ptr)
452 {
453         VFont *vfont = vfont_ptr->data;
454         if (ID_REAL_USERS(vfont) <= 0) {
455                 BKE_libblock_free(bmain, vfont);
456                 RNA_POINTER_INVALIDATE(vfont_ptr);
457         }
458         else {
459                 BKE_reportf(reports, RPT_ERROR, "Font '%s' must have zero users to be removed, found %d",
460                             vfont->id.name + 2, ID_REAL_USERS(vfont));
461         }
462 }
463
464 static Tex *rna_Main_textures_new(Main *bmain, const char *name, int type)
465 {
466         Tex *tex = BKE_texture_add(bmain, name);
467         BKE_texture_type_set(tex, type);
468         id_us_min(&tex->id);
469         return tex;
470 }
471 static void rna_Main_textures_remove(Main *bmain, ReportList *reports, PointerRNA *tex_ptr)
472 {
473         Tex *tex = tex_ptr->data;
474         if (ID_REAL_USERS(tex) <= 0) {
475                 BKE_libblock_free(bmain, tex);
476                 RNA_POINTER_INVALIDATE(tex_ptr);
477         }
478         else {
479                 BKE_reportf(reports, RPT_ERROR, "Texture '%s' must have zero users to be removed, found %d",
480                             tex->id.name + 2, ID_REAL_USERS(tex));
481         }
482 }
483
484 static Brush *rna_Main_brushes_new(Main *bmain, const char *name)
485 {
486         Brush *brush = BKE_brush_add(bmain, name);
487         id_us_min(&brush->id);
488         return brush;
489 }
490 static void rna_Main_brushes_remove(Main *bmain, ReportList *reports, PointerRNA *brush_ptr)
491 {
492         Brush *brush = brush_ptr->data;
493         if (ID_REAL_USERS(brush) <= 0) {
494                 BKE_libblock_free(bmain, brush);
495                 RNA_POINTER_INVALIDATE(brush_ptr);
496         }
497         else {
498                 BKE_reportf(reports, RPT_ERROR, "Brush '%s' must have zero users to be removed, found %d",
499                             brush->id.name + 2, ID_REAL_USERS(brush));
500         }
501 }
502
503 static World *rna_Main_worlds_new(Main *bmain, const char *name)
504 {
505         World *world = add_world(bmain, name);
506         id_us_min(&world->id);
507         return world;
508 }
509 static void rna_Main_worlds_remove(Main *bmain, ReportList *reports, PointerRNA *world_ptr)
510 {
511         Group *world = world_ptr->data;
512         if (ID_REAL_USERS(world) <= 0) {
513                 BKE_libblock_free(bmain, world);
514                 RNA_POINTER_INVALIDATE(world_ptr);
515         }
516         else {
517                 BKE_reportf(reports, RPT_ERROR, "World '%s' must have zero users to be removed, found %d",
518                             world->id.name + 2, ID_REAL_USERS(world));
519         }
520 }
521
522 static Group *rna_Main_groups_new(Main *bmain, const char *name)
523 {
524         return BKE_group_add(bmain, name);
525 }
526 static void rna_Main_groups_remove(Main *bmain, PointerRNA *group_ptr)
527 {
528         Group *group = group_ptr->data;
529         BKE_group_unlink(group);
530         BKE_libblock_free(bmain, group);
531         RNA_POINTER_INVALIDATE(group_ptr);
532 }
533
534 static Speaker *rna_Main_speakers_new(Main *bmain, const char *name)
535 {
536         Speaker *speaker = BKE_speaker_add(bmain, name);
537         id_us_min(&speaker->id);
538         return speaker;
539 }
540 static void rna_Main_speakers_remove(Main *bmain, ReportList *reports, PointerRNA *speaker_ptr)
541 {
542         Speaker *speaker = speaker_ptr->data;
543         if (ID_REAL_USERS(speaker) <= 0) {
544                 BKE_libblock_free(bmain, speaker);
545                 RNA_POINTER_INVALIDATE(speaker_ptr);
546         }
547         else {
548                 BKE_reportf(reports, RPT_ERROR, "Speaker '%s' must have zero users to be removed, found %d",
549                             speaker->id.name + 2, ID_REAL_USERS(speaker));
550         }
551 }
552
553 static bSound *rna_Main_sounds_load(Main *bmain, const char *name)
554 {
555         bSound *sound = BKE_sound_new_file(bmain, name);
556         id_us_min(&sound->id);
557         return sound;
558 }
559 static void rna_Main_sounds_remove(Main *bmain, ReportList *reports, PointerRNA *sound_ptr)
560 {
561         Speaker *sound = sound_ptr->data;
562         if (ID_REAL_USERS(sound) <= 0) {
563                 BKE_libblock_free(bmain, sound);
564                 RNA_POINTER_INVALIDATE(sound_ptr);
565         }
566         else {
567                 BKE_reportf(reports, RPT_ERROR, "Sound '%s' must have zero users to be removed, found %d",
568                             sound->id.name + 2, ID_REAL_USERS(sound));
569         }
570 }
571
572 static Text *rna_Main_texts_new(Main *bmain, const char *name)
573 {
574         return BKE_text_add(bmain, name);
575 }
576 static void rna_Main_texts_remove(Main *bmain, PointerRNA *text_ptr)
577 {
578         Text *text = text_ptr->data;
579         BKE_text_unlink(bmain, text);
580         BKE_libblock_free(bmain, text);
581         RNA_POINTER_INVALIDATE(text_ptr);
582 }
583
584 static Text *rna_Main_texts_load(Main *bmain, ReportList *reports, const char *filepath, int is_internal)
585 {
586         Text *txt;
587
588         errno = 0;
589         txt = BKE_text_load_ex(bmain, filepath, bmain->name, is_internal);
590
591         if (!txt)
592                 BKE_reportf(reports, RPT_ERROR, "Cannot read '%s': %s", filepath,
593                             errno ? strerror(errno) : TIP_("unable to load text"));
594
595         return txt;
596 }
597
598 static bArmature *rna_Main_armatures_new(Main *bmain, const char *name)
599 {
600         bArmature *arm = BKE_armature_add(bmain, name);
601         id_us_min(&arm->id);
602         return arm;
603 }
604 static void rna_Main_armatures_remove(Main *bmain, ReportList *reports, PointerRNA *arm_ptr)
605 {
606         bArmature *arm = arm_ptr->data;
607         if (ID_REAL_USERS(arm) <= 0) {
608                 BKE_libblock_free(bmain, arm);
609                 RNA_POINTER_INVALIDATE(arm_ptr);
610         }
611         else {
612                 BKE_reportf(reports, RPT_ERROR, "Armature '%s' must have zero users to be removed, found %d",
613                             arm->id.name + 2, ID_REAL_USERS(arm));
614         }
615 }
616
617 static bAction *rna_Main_actions_new(Main *bmain, const char *name)
618 {
619         bAction *act = add_empty_action(bmain, name);
620         id_us_min(&act->id);
621         act->id.flag &= ~LIB_FAKEUSER;
622         return act;
623 }
624 static void rna_Main_actions_remove(Main *bmain, ReportList *reports, PointerRNA *act_ptr)
625 {
626         bAction *act = act_ptr->data;
627         if (ID_REAL_USERS(act) <= 0) {
628                 BKE_libblock_free(bmain, act);
629                 RNA_POINTER_INVALIDATE(act_ptr);
630         }
631         else {
632                 BKE_reportf(reports, RPT_ERROR, "Action '%s' must have zero users to be removed, found %d",
633                             act->id.name + 2, ID_REAL_USERS(act));
634         }
635 }
636
637 static ParticleSettings *rna_Main_particles_new(Main *bmain, const char *name)
638 {
639         ParticleSettings *part = psys_new_settings(name, bmain);
640         id_us_min(&part->id);
641         return part;
642 }
643 static void rna_Main_particles_remove(Main *bmain, ReportList *reports, PointerRNA *part_ptr)
644 {
645         ParticleSettings *part = part_ptr->data;
646         if (ID_REAL_USERS(part) <= 0) {
647                 BKE_libblock_free(bmain, part);
648                 RNA_POINTER_INVALIDATE(part_ptr);
649         }
650         else {
651                 BKE_reportf(reports, RPT_ERROR, "Particle settings '%s' must have zero users to be removed, found %d",
652                             part->id.name + 2, ID_REAL_USERS(part));
653         }
654 }
655
656 static Palette *rna_Main_palettes_new(Main *bmain, const char *name)
657 {
658         Palette *palette = BKE_palette_add(bmain, name);
659         id_us_min(&palette->id);
660         return (Palette *)palette;
661 }
662 static void rna_Main_palettes_remove(Main *bmain, ReportList *reports, PointerRNA *palette_ptr)
663 {
664         Palette *palette = palette_ptr->data;
665         if (ID_REAL_USERS(palette) <= 0) {
666                 BKE_libblock_free(bmain, palette);
667                 RNA_POINTER_INVALIDATE(palette_ptr);
668         }
669         else {
670                 BKE_reportf(reports, RPT_ERROR, "Palette settings '%s' must have zero users to be removed, found %d",
671                             palette->id.name + 2, ID_REAL_USERS(palette));
672         }
673 }
674
675 static MovieClip *rna_Main_movieclip_load(Main *bmain, ReportList *reports, const char *filepath)
676 {
677         MovieClip *clip;
678
679         errno = 0;
680         clip = BKE_movieclip_file_add(bmain, filepath);
681
682         if (!clip)
683                 BKE_reportf(reports, RPT_ERROR, "Cannot read '%s': %s", filepath,
684                             errno ? strerror(errno) : TIP_("unable to load movie clip"));
685
686         return clip;
687 }
688
689 static void rna_Main_movieclips_remove(Main *bmain, PointerRNA *clip_ptr)
690 {
691         MovieClip *clip = clip_ptr->data;
692         BKE_movieclip_unlink(bmain, clip);
693         BKE_libblock_free(bmain, clip);
694         RNA_POINTER_INVALIDATE(clip_ptr);
695 }
696
697 static Mask *rna_Main_mask_new(Main *bmain, const char *name)
698 {
699         Mask *mask;
700
701         mask = BKE_mask_new(bmain, name);
702
703         return mask;
704 }
705
706 static void rna_Main_masks_remove(Main *bmain, PointerRNA *mask_ptr)
707 {
708         Mask *mask = mask_ptr->data;
709         BKE_mask_free(bmain, mask);
710         BKE_libblock_free(bmain, mask);
711         RNA_POINTER_INVALIDATE(mask_ptr);
712 }
713
714 static void rna_Main_grease_pencil_remove(Main *bmain, ReportList *reports, PointerRNA *gpd_ptr)
715 {
716         bGPdata *gpd = gpd_ptr->data;
717         if (ID_REAL_USERS(gpd) <= 0) {
718                 BKE_gpencil_free(gpd);
719                 BKE_libblock_free(bmain, gpd);
720                 RNA_POINTER_INVALIDATE(gpd_ptr);
721         }
722         else
723                 BKE_reportf(reports, RPT_ERROR, "Grease pencil '%s' must have zero users to be removed, found %d",
724                             gpd->id.name + 2, ID_REAL_USERS(gpd));
725 }
726
727 static FreestyleLineStyle *rna_Main_linestyles_new(Main *bmain, const char *name)
728 {
729         FreestyleLineStyle *linestyle = BKE_linestyle_new(bmain, name);
730         id_us_min(&linestyle->id);
731         return linestyle;
732 }
733
734 static void rna_Main_linestyles_remove(Main *bmain, ReportList *reports, FreestyleLineStyle *linestyle)
735 {
736         if (ID_REAL_USERS(linestyle) <= 0)
737                 BKE_libblock_free(bmain, linestyle);
738         else
739                 BKE_reportf(reports, RPT_ERROR, "Line style '%s' must have zero users to be removed, found %d",
740                             linestyle->id.name + 2, ID_REAL_USERS(linestyle));
741
742         /* XXX python now has invalid pointer? */
743 }
744
745 /* tag functions, all the same */
746 static void rna_Main_cameras_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->camera, value); }
747 static void rna_Main_scenes_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->scene, value); }
748 static void rna_Main_objects_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->object, value); }
749 static void rna_Main_materials_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->mat, value); }
750 static void rna_Main_node_groups_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->nodetree, value); }
751 static void rna_Main_meshes_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->mesh, value); }
752 static void rna_Main_lamps_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->lamp, value); }
753 static void rna_Main_libraries_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->library, value); }
754 static void rna_Main_screens_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->screen, value); }
755 static void rna_Main_window_managers_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->wm, value); }
756 static void rna_Main_images_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->image, value); }
757 static void rna_Main_lattices_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->latt, value); }
758 static void rna_Main_curves_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->curve, value); }
759 static void rna_Main_metaballs_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->mball, value); }
760 static void rna_Main_fonts_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->vfont, value); }
761 static void rna_Main_textures_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->tex, value); }
762 static void rna_Main_brushes_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->brush, value); }
763 static void rna_Main_worlds_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->world, value); }
764 static void rna_Main_groups_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->group, value); }
765 // static void rna_Main_shape_keys_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->key, value); }
766 // static void rna_Main_scripts_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->script, value); }
767 static void rna_Main_texts_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->text, value); }
768 static void rna_Main_speakers_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->speaker, value); }
769 static void rna_Main_sounds_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->sound, value); }
770 static void rna_Main_armatures_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->armature, value); }
771 static void rna_Main_actions_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->action, value); }
772 static void rna_Main_particles_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->particle, value); }
773 static void rna_Main_palettes_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->palettes, value); }
774 static void rna_Main_gpencil_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->gpencil, value); }
775 static void rna_Main_movieclips_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->movieclip, value); }
776 static void rna_Main_masks_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->mask, value); }
777 static void rna_Main_linestyle_tag(Main *bmain, int value) { BKE_main_id_tag_listbase(&bmain->linestyle, value); }
778
779 static int rna_Main_cameras_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_CA) != 0; }
780 static int rna_Main_scenes_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_SCE) != 0; }
781 static int rna_Main_objects_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_OB) != 0; }
782 static int rna_Main_materials_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_MA) != 0; }
783 static int rna_Main_node_groups_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_NT) != 0; }
784 static int rna_Main_meshes_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_ME) != 0; }
785 static int rna_Main_lamps_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_LA) != 0; }
786 static int rna_Main_libraries_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_LI) != 0; }
787 static int rna_Main_screens_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_SCR) != 0; }
788 static int rna_Main_window_managers_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_WM) != 0; }
789 static int rna_Main_images_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_IM) != 0; }
790 static int rna_Main_lattices_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_LT) != 0; }
791 static int rna_Main_curves_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_CU) != 0; }
792 static int rna_Main_metaballs_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_MB) != 0; }
793 static int rna_Main_fonts_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_VF) != 0; }
794 static int rna_Main_textures_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_TE) != 0; }
795 static int rna_Main_brushes_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_BR) != 0; }
796 static int rna_Main_worlds_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_WO) != 0; }
797 static int rna_Main_groups_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_GR) != 0; }
798 static int rna_Main_texts_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_TXT) != 0; }
799 static int rna_Main_speakers_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_SPK) != 0; }
800 static int rna_Main_sounds_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_SO) != 0; }
801 static int rna_Main_armatures_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_AR) != 0; }
802 static int rna_Main_actions_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_AC) != 0; }
803 static int rna_Main_particles_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_PA) != 0; }
804 static int rna_Main_palettes_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_PAL) != 0; }
805 static int rna_Main_gpencil_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_GD) != 0; }
806 static int rna_Main_linestyle_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_LS) != 0; }
807
808 #else
809
810 void RNA_api_main(StructRNA *srna)
811 {
812 #if 0
813         FunctionRNA *func;
814         PropertyRNA *parm;
815         /* maybe we want to add functions in 'bpy.data' still?
816          * for now they are all in collections bpy.data.images.new(...) */
817         func = RNA_def_function(srna, "add_image", "rna_Main_add_image");
818         RNA_def_function_ui_description(func, "Add a new image");
819         parm = RNA_def_string_file_path(func, "filepath", NULL, 0, "", "File path to load image from");
820         RNA_def_property_flag(parm, PROP_REQUIRED);
821         parm = RNA_def_pointer(func, "image", "Image", "", "New image");
822         RNA_def_function_return(func, parm);
823 #else
824         (void)srna;
825 #endif
826 }
827
828 void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop)
829 {
830         StructRNA *srna;
831         FunctionRNA *func;
832         PropertyRNA *parm;
833         PropertyRNA *prop;
834
835         RNA_def_property_srna(cprop, "BlendDataCameras");
836         srna = RNA_def_struct(brna, "BlendDataCameras", NULL);
837         RNA_def_struct_sdna(srna, "Main");
838         RNA_def_struct_ui_text(srna, "Main Cameras", "Collection of cameras");
839
840         func = RNA_def_function(srna, "new", "rna_Main_cameras_new");
841         RNA_def_function_ui_description(func, "Add a new camera to the main database");
842         parm = RNA_def_string(func, "name", "Camera", 0, "", "New name for the datablock");
843         RNA_def_property_flag(parm, PROP_REQUIRED);
844         /* return type */
845         parm = RNA_def_pointer(func, "camera", "Camera", "", "New camera datablock");
846         RNA_def_function_return(func, parm);
847
848         func = RNA_def_function(srna, "remove", "rna_Main_cameras_remove");
849         RNA_def_function_flag(func, FUNC_USE_REPORTS);
850         RNA_def_function_ui_description(func, "Remove a camera from the current blendfile");
851         parm = RNA_def_pointer(func, "camera", "Camera", "", "Camera to remove");
852         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
853         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
854
855         func = RNA_def_function(srna, "tag", "rna_Main_cameras_tag");
856         parm = RNA_def_boolean(func, "value", 0, "Value", "");
857         RNA_def_property_flag(parm, PROP_REQUIRED);
858
859         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
860         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
861         RNA_def_property_boolean_funcs(prop, "rna_Main_cameras_is_updated_get", NULL);
862 }
863
864 void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
865 {
866         StructRNA *srna;
867         FunctionRNA *func;
868         PropertyRNA *parm;
869         PropertyRNA *prop;
870
871         RNA_def_property_srna(cprop, "BlendDataScenes");
872         srna = RNA_def_struct(brna, "BlendDataScenes", NULL);
873         RNA_def_struct_sdna(srna, "Main");
874         RNA_def_struct_ui_text(srna, "Main Scenes", "Collection of scenes");
875
876         func = RNA_def_function(srna, "new", "rna_Main_scenes_new");
877         RNA_def_function_ui_description(func, "Add a new scene to the main database");
878         parm = RNA_def_string(func, "name", "Scene", 0, "", "New name for the datablock");
879         RNA_def_property_flag(parm, PROP_REQUIRED);
880         /* return type */
881         parm = RNA_def_pointer(func, "scene", "Scene", "", "New scene datablock");
882         RNA_def_function_return(func, parm);
883
884         func = RNA_def_function(srna, "remove", "rna_Main_scenes_remove");
885         RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
886         RNA_def_function_ui_description(func, "Remove a scene from the current blendfile");
887         parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene to remove");
888         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
889         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
890
891         func = RNA_def_function(srna, "tag", "rna_Main_scenes_tag");
892         parm = RNA_def_boolean(func, "value", 0, "Value", "");
893         RNA_def_property_flag(parm, PROP_REQUIRED);
894
895         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
896         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
897         RNA_def_property_boolean_funcs(prop, "rna_Main_scenes_is_updated_get", NULL);
898 }
899
900 void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
901 {
902         StructRNA *srna;
903         FunctionRNA *func;
904         PropertyRNA *parm;
905         PropertyRNA *prop;
906
907         RNA_def_property_srna(cprop, "BlendDataObjects");
908         srna = RNA_def_struct(brna, "BlendDataObjects", NULL);
909         RNA_def_struct_sdna(srna, "Main");
910         RNA_def_struct_ui_text(srna, "Main Objects", "Collection of objects");
911
912         func = RNA_def_function(srna, "new", "rna_Main_objects_new");
913         RNA_def_function_flag(func, FUNC_USE_REPORTS);
914         RNA_def_function_ui_description(func, "Add a new object to the main database");
915         parm = RNA_def_string(func, "name", "Object", 0, "", "New name for the datablock");
916         RNA_def_property_flag(parm, PROP_REQUIRED);
917         parm = RNA_def_pointer(func, "object_data", "ID", "", "Object data or None for an empty object");
918         RNA_def_property_flag(parm, PROP_REQUIRED);
919
920         /* return type */
921         parm = RNA_def_pointer(func, "object", "Object", "", "New object datablock");
922         RNA_def_function_return(func, parm);
923
924         func = RNA_def_function(srna, "remove", "rna_Main_objects_remove");
925         RNA_def_function_ui_description(func, "Remove a object from the current blendfile");
926         RNA_def_function_flag(func, FUNC_USE_REPORTS);
927         parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove");
928         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
929         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
930
931         func = RNA_def_function(srna, "tag", "rna_Main_objects_tag");
932         parm = RNA_def_boolean(func, "value", 0, "Value", "");
933         RNA_def_property_flag(parm, PROP_REQUIRED);
934
935         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
936         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
937         RNA_def_property_boolean_funcs(prop, "rna_Main_objects_is_updated_get", NULL);
938 }
939
940 void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
941 {
942         StructRNA *srna;
943         FunctionRNA *func;
944         PropertyRNA *parm;
945         PropertyRNA *prop;
946
947         RNA_def_property_srna(cprop, "BlendDataMaterials");
948         srna = RNA_def_struct(brna, "BlendDataMaterials", NULL);
949         RNA_def_struct_sdna(srna, "Main");
950         RNA_def_struct_ui_text(srna, "Main Materials", "Collection of materials");
951
952         func = RNA_def_function(srna, "new", "rna_Main_materials_new");
953         RNA_def_function_ui_description(func, "Add a new material to the main database");
954         parm = RNA_def_string(func, "name", "Material", 0, "", "New name for the datablock");
955         RNA_def_property_flag(parm, PROP_REQUIRED);
956         /* return type */
957         parm = RNA_def_pointer(func, "material", "Material", "", "New material datablock");
958         RNA_def_function_return(func, parm);
959
960         func = RNA_def_function(srna, "remove", "rna_Main_materials_remove");
961         RNA_def_function_flag(func, FUNC_USE_REPORTS);
962         RNA_def_function_ui_description(func, "Remove a material from the current blendfile");
963         parm = RNA_def_pointer(func, "material", "Material", "", "Material to remove");
964         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
965         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
966
967         func = RNA_def_function(srna, "tag", "rna_Main_materials_tag");
968         parm = RNA_def_boolean(func, "value", 0, "Value", "");
969         RNA_def_property_flag(parm, PROP_REQUIRED);
970
971         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
972         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
973         RNA_def_property_boolean_funcs(prop, "rna_Main_materials_is_updated_get", NULL);
974 }
975 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
976 {
977         StructRNA *srna;
978         FunctionRNA *func;
979         PropertyRNA *parm;
980         PropertyRNA *prop;
981
982         static EnumPropertyItem dummy_items[] = {
983                 {0, "DUMMY", 0, "", ""},
984                 {0, NULL, 0, NULL, NULL}
985         };
986
987         RNA_def_property_srna(cprop, "BlendDataNodeTrees");
988         srna = RNA_def_struct(brna, "BlendDataNodeTrees", NULL);
989         RNA_def_struct_sdna(srna, "Main");
990         RNA_def_struct_ui_text(srna, "Main Node Trees", "Collection of node trees");
991
992         func = RNA_def_function(srna, "new", "rna_Main_nodetree_new");
993         RNA_def_function_ui_description(func, "Add a new node tree to the main database");
994         parm = RNA_def_string(func, "name", "NodeGroup", 0, "", "New name for the datablock");
995         RNA_def_property_flag(parm, PROP_REQUIRED);
996         parm = RNA_def_enum(func, "type", dummy_items, 0, "Type", "The type of node_group to add");
997         RNA_def_property_enum_funcs(parm, NULL, NULL, "rna_Main_nodetree_type_itemf");
998         RNA_def_property_flag(parm, PROP_REQUIRED);
999         /* return type */
1000         parm = RNA_def_pointer(func, "tree", "NodeTree", "", "New node tree datablock");
1001         RNA_def_function_return(func, parm);
1002
1003         func = RNA_def_function(srna, "remove", "rna_Main_nodetree_remove");
1004         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1005         RNA_def_function_ui_description(func, "Remove a node tree from the current blendfile");
1006         parm = RNA_def_pointer(func, "tree", "NodeTree", "", "Node tree to remove");
1007         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1008         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1009
1010         func = RNA_def_function(srna, "tag", "rna_Main_node_groups_tag");
1011         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1012         RNA_def_property_flag(parm, PROP_REQUIRED);
1013
1014         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1015         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1016         RNA_def_property_boolean_funcs(prop, "rna_Main_node_groups_is_updated_get", NULL);
1017 }
1018 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
1019 {
1020         StructRNA *srna;
1021         FunctionRNA *func;
1022         PropertyRNA *parm;
1023         PropertyRNA *prop;
1024
1025         static EnumPropertyItem mesh_type_items[] = {
1026                 {eModifierMode_Realtime, "PREVIEW", 0, "Preview", "Apply modifier preview settings"},
1027                 {eModifierMode_Render, "RENDER", 0, "Render", "Apply modifier render settings"},
1028                 {0, NULL, 0, NULL, NULL}
1029         };
1030
1031         RNA_def_property_srna(cprop, "BlendDataMeshes");
1032         srna = RNA_def_struct(brna, "BlendDataMeshes", NULL);
1033         RNA_def_struct_sdna(srna, "Main");
1034         RNA_def_struct_ui_text(srna, "Main Meshes", "Collection of meshes");
1035
1036         func = RNA_def_function(srna, "new", "rna_Main_meshes_new");
1037         RNA_def_function_ui_description(func, "Add a new mesh to the main database");
1038         parm = RNA_def_string(func, "name", "Mesh", 0, "", "New name for the datablock");
1039         RNA_def_property_flag(parm, PROP_REQUIRED);
1040         /* return type */
1041         parm = RNA_def_pointer(func, "mesh", "Mesh", "", "New mesh datablock");
1042         RNA_def_function_return(func, parm);
1043
1044         func = RNA_def_function(srna, "new_from_object", "rna_Main_meshes_new_from_object");
1045         RNA_def_function_ui_description(func, "Add a new mesh created from object with modifiers applied");
1046         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1047         parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate modifiers");
1048         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
1049         parm = RNA_def_pointer(func, "object", "Object", "", "Object to create mesh from");
1050         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
1051         parm = RNA_def_boolean(func, "apply_modifiers", 0, "", "Apply modifiers");
1052         RNA_def_property_flag(parm, PROP_REQUIRED);
1053         parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
1054         RNA_def_property_flag(parm, PROP_REQUIRED);
1055         RNA_def_boolean(func, "calc_tessface", true, "Calculate Tessellation", "Calculate tessellation faces");
1056         RNA_def_boolean(func, "calc_undeformed", false, "Calculate Undeformed", "Calculate undeformed vertex coordinates");
1057         parm = RNA_def_pointer(func, "mesh", "Mesh", "",
1058                                "Mesh created from object, remove it if it is only used for export");
1059         RNA_def_function_return(func, parm);
1060
1061         func = RNA_def_function(srna, "remove", "rna_Main_meshes_remove");
1062         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1063         RNA_def_function_ui_description(func, "Remove a mesh from the current blendfile");
1064         parm = RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh to remove");
1065         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1066         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1067
1068         func = RNA_def_function(srna, "tag", "rna_Main_meshes_tag");
1069         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1070         RNA_def_property_flag(parm, PROP_REQUIRED);
1071
1072         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1073         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1074         RNA_def_property_boolean_funcs(prop, "rna_Main_meshes_is_updated_get", NULL);
1075 }
1076 void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
1077 {
1078         StructRNA *srna;
1079         FunctionRNA *func;
1080         PropertyRNA *parm;
1081         PropertyRNA *prop;
1082
1083         RNA_def_property_srna(cprop, "BlendDataLamps");
1084         srna = RNA_def_struct(brna, "BlendDataLamps", NULL);
1085         RNA_def_struct_sdna(srna, "Main");
1086         RNA_def_struct_ui_text(srna, "Main Lamps", "Collection of lamps");
1087
1088         func = RNA_def_function(srna, "new", "rna_Main_lamps_new");
1089         RNA_def_function_ui_description(func, "Add a new lamp to the main database");
1090         parm = RNA_def_string(func, "name", "Lamp", 0, "", "New name for the datablock");
1091         RNA_def_property_flag(parm, PROP_REQUIRED);
1092         parm = RNA_def_enum(func, "type", lamp_type_items, 0, "Type", "The type of texture to add");
1093         RNA_def_property_flag(parm, PROP_REQUIRED);
1094         /* return type */
1095         parm = RNA_def_pointer(func, "lamp", "Lamp", "", "New lamp datablock");
1096         RNA_def_function_return(func, parm);
1097
1098         func = RNA_def_function(srna, "remove", "rna_Main_lamps_remove");
1099         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1100         RNA_def_function_ui_description(func, "Remove a lamp from the current blendfile");
1101         parm = RNA_def_pointer(func, "lamp", "Lamp", "", "Lamp to remove");
1102         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1103         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1104
1105         func = RNA_def_function(srna, "tag", "rna_Main_lamps_tag");
1106         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1107         RNA_def_property_flag(parm, PROP_REQUIRED);
1108
1109         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1110         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1111         RNA_def_property_boolean_funcs(prop, "rna_Main_lamps_is_updated_get", NULL);
1112 }
1113
1114 void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop)
1115 {
1116         StructRNA *srna;
1117         FunctionRNA *func;
1118         PropertyRNA *parm;
1119         PropertyRNA *prop;
1120
1121         RNA_def_property_srna(cprop, "BlendDataLibraries");
1122         srna = RNA_def_struct(brna, "BlendDataLibraries", NULL);
1123         RNA_def_struct_sdna(srna, "Main");
1124         RNA_def_struct_ui_text(srna, "Main Libraries", "Collection of libraries");
1125
1126         func = RNA_def_function(srna, "tag", "rna_Main_libraries_tag");
1127         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1128         RNA_def_property_flag(parm, PROP_REQUIRED);
1129
1130         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1131         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1132         RNA_def_property_boolean_funcs(prop, "rna_Main_libraries_is_updated_get", NULL);
1133 }
1134
1135 void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop)
1136 {
1137         StructRNA *srna;
1138         FunctionRNA *func;
1139         PropertyRNA *parm;
1140         PropertyRNA *prop;
1141
1142         RNA_def_property_srna(cprop, "BlendDataScreens");
1143         srna = RNA_def_struct(brna, "BlendDataScreens", NULL);
1144         RNA_def_struct_sdna(srna, "Main");
1145         RNA_def_struct_ui_text(srna, "Main Screens", "Collection of screens");
1146
1147         func = RNA_def_function(srna, "tag", "rna_Main_screens_tag");
1148         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1149         RNA_def_property_flag(parm, PROP_REQUIRED);
1150
1151         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1152         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1153         RNA_def_property_boolean_funcs(prop, "rna_Main_screens_is_updated_get", NULL);
1154 }
1155
1156 void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop)
1157 {
1158         StructRNA *srna;
1159         FunctionRNA *func;
1160         PropertyRNA *parm;
1161         PropertyRNA *prop;
1162
1163         RNA_def_property_srna(cprop, "BlendDataWindowManagers");
1164         srna = RNA_def_struct(brna, "BlendDataWindowManagers", NULL);
1165         RNA_def_struct_sdna(srna, "Main");
1166         RNA_def_struct_ui_text(srna, "Main Window Managers", "Collection of window managers");
1167
1168         func = RNA_def_function(srna, "tag", "rna_Main_window_managers_tag");
1169         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1170         RNA_def_property_flag(parm, PROP_REQUIRED);
1171
1172         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1173         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1174         RNA_def_property_boolean_funcs(prop, "rna_Main_window_managers_is_updated_get", NULL);
1175 }
1176 void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
1177 {
1178         StructRNA *srna;
1179         FunctionRNA *func;
1180         PropertyRNA *parm;
1181         PropertyRNA *prop;
1182
1183         RNA_def_property_srna(cprop, "BlendDataImages");
1184         srna = RNA_def_struct(brna, "BlendDataImages", NULL);
1185         RNA_def_struct_sdna(srna, "Main");
1186         RNA_def_struct_ui_text(srna, "Main Images", "Collection of images");
1187
1188         func = RNA_def_function(srna, "new", "rna_Main_images_new");
1189         RNA_def_function_ui_description(func, "Add a new image to the main database");
1190         parm = RNA_def_string(func, "name", "Image", 0, "", "New name for the datablock");
1191         RNA_def_property_flag(parm, PROP_REQUIRED);
1192         parm = RNA_def_int(func, "width", 1024, 1, INT_MAX, "", "Width of the image", 1, INT_MAX);
1193         RNA_def_property_flag(parm, PROP_REQUIRED);
1194         parm = RNA_def_int(func, "height", 1024, 1, INT_MAX, "", "Height of the image", 1, INT_MAX);
1195         RNA_def_property_flag(parm, PROP_REQUIRED);
1196         RNA_def_boolean(func, "alpha", 0, "Alpha", "Use alpha channel");
1197         RNA_def_boolean(func, "float_buffer", 0, "Float Buffer", "Create an image with floating point color");
1198         RNA_def_boolean(func, "stereo3d", 0, "Stereo 3D", "Create left and right views");
1199         /* return type */
1200         parm = RNA_def_pointer(func, "image", "Image", "", "New image datablock");
1201         RNA_def_function_return(func, parm);
1202
1203         func = RNA_def_function(srna, "load", "rna_Main_images_load");
1204         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1205         RNA_def_function_ui_description(func, "Load a new image into the main database");
1206         parm = RNA_def_string_file_path(func, "filepath", "File Path", 0, "", "path of the file to load");
1207         RNA_def_property_flag(parm, PROP_REQUIRED);
1208         /* return type */
1209         parm = RNA_def_pointer(func, "image", "Image", "", "New image datablock");
1210         RNA_def_function_return(func, parm);
1211
1212         func = RNA_def_function(srna, "remove", "rna_Main_images_remove");
1213         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1214         RNA_def_function_ui_description(func, "Remove an image from the current blendfile");
1215         parm = RNA_def_pointer(func, "image", "Image", "", "Image to remove");
1216         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1217         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1218
1219         func = RNA_def_function(srna, "tag", "rna_Main_images_tag");
1220         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1221         RNA_def_property_flag(parm, PROP_REQUIRED);
1222
1223         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1224         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1225         RNA_def_property_boolean_funcs(prop, "rna_Main_images_is_updated_get", NULL);
1226 }
1227
1228 void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
1229 {
1230         StructRNA *srna;
1231         FunctionRNA *func;
1232         PropertyRNA *parm;
1233         PropertyRNA *prop;
1234
1235         RNA_def_property_srna(cprop, "BlendDataLattices");
1236         srna = RNA_def_struct(brna, "BlendDataLattices", NULL);
1237         RNA_def_struct_sdna(srna, "Main");
1238         RNA_def_struct_ui_text(srna, "Main Lattices", "Collection of lattices");
1239
1240         func = RNA_def_function(srna, "new", "rna_Main_lattices_new");
1241         RNA_def_function_ui_description(func, "Add a new lattice to the main database");
1242         parm = RNA_def_string(func, "name", "Lattice", 0, "", "New name for the datablock");
1243         RNA_def_property_flag(parm, PROP_REQUIRED);
1244         /* return type */
1245         parm = RNA_def_pointer(func, "lattice", "Lattice", "", "New lattices datablock");
1246         RNA_def_function_return(func, parm);
1247
1248         func = RNA_def_function(srna, "remove", "rna_Main_lattices_remove");
1249         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1250         RNA_def_function_ui_description(func, "Remove a lattice from the current blendfile");
1251         parm = RNA_def_pointer(func, "lattice", "Lattice", "", "Lattice to remove");
1252         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1253         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1254
1255         func = RNA_def_function(srna, "tag", "rna_Main_lattices_tag");
1256         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1257         RNA_def_property_flag(parm, PROP_REQUIRED);
1258
1259         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1260         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1261         RNA_def_property_boolean_funcs(prop, "rna_Main_lattices_is_updated_get", NULL);
1262 }
1263 void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
1264 {
1265         StructRNA *srna;
1266         FunctionRNA *func;
1267         PropertyRNA *parm;
1268         PropertyRNA *prop;
1269
1270         RNA_def_property_srna(cprop, "BlendDataCurves");
1271         srna = RNA_def_struct(brna, "BlendDataCurves", NULL);
1272         RNA_def_struct_sdna(srna, "Main");
1273         RNA_def_struct_ui_text(srna, "Main Curves", "Collection of curves");
1274
1275         func = RNA_def_function(srna, "new", "rna_Main_curves_new");
1276         RNA_def_function_ui_description(func, "Add a new curve to the main database");
1277         parm = RNA_def_string(func, "name", "Curve", 0, "", "New name for the datablock");
1278         RNA_def_property_flag(parm, PROP_REQUIRED);
1279         parm = RNA_def_enum(func, "type", object_type_curve_items, 0, "Type", "The type of curve to add");
1280         RNA_def_property_flag(parm, PROP_REQUIRED);
1281         /* return type */
1282         parm = RNA_def_pointer(func, "curve", "Curve", "", "New curve datablock");
1283         RNA_def_function_return(func, parm);
1284
1285         func = RNA_def_function(srna, "remove", "rna_Main_curves_remove");
1286         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1287         RNA_def_function_ui_description(func, "Remove a curve from the current blendfile");
1288         parm = RNA_def_pointer(func, "curve", "Curve", "", "Curve to remove");
1289         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1290         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1291
1292         func = RNA_def_function(srna, "tag", "rna_Main_curves_tag");
1293         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1294         RNA_def_property_flag(parm, PROP_REQUIRED);
1295
1296         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1297         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1298         RNA_def_property_boolean_funcs(prop, "rna_Main_curves_is_updated_get", NULL);
1299 }
1300 void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
1301 {
1302         StructRNA *srna;
1303         FunctionRNA *func;
1304         PropertyRNA *parm;
1305         PropertyRNA *prop;
1306
1307         RNA_def_property_srna(cprop, "BlendDataMetaBalls");
1308         srna = RNA_def_struct(brna, "BlendDataMetaBalls", NULL);
1309         RNA_def_struct_sdna(srna, "Main");
1310         RNA_def_struct_ui_text(srna, "Main Metaballs", "Collection of metaballs");
1311
1312         func = RNA_def_function(srna, "new", "rna_Main_metaballs_new");
1313         RNA_def_function_ui_description(func, "Add a new metaball to the main database");
1314         parm = RNA_def_string(func, "name", "MetaBall", 0, "", "New name for the datablock");
1315         RNA_def_property_flag(parm, PROP_REQUIRED);
1316         /* return type */
1317         parm = RNA_def_pointer(func, "metaball", "MetaBall", "", "New metaball datablock");
1318         RNA_def_function_return(func, parm);
1319
1320         func = RNA_def_function(srna, "remove", "rna_Main_metaballs_remove");
1321         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1322         RNA_def_function_ui_description(func, "Remove a metaball from the current blendfile");
1323         parm = RNA_def_pointer(func, "metaball", "MetaBall", "", "Metaball to remove");
1324         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1325         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1326
1327         func = RNA_def_function(srna, "tag", "rna_Main_metaballs_tag");
1328         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1329         RNA_def_property_flag(parm, PROP_REQUIRED);
1330
1331         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1332         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1333         RNA_def_property_boolean_funcs(prop, "rna_Main_metaballs_is_updated_get", NULL);
1334 }
1335 void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
1336 {
1337         StructRNA *srna;
1338         FunctionRNA *func;
1339         PropertyRNA *parm;
1340         PropertyRNA *prop;
1341
1342         RNA_def_property_srna(cprop, "BlendDataFonts");
1343         srna = RNA_def_struct(brna, "BlendDataFonts", NULL);
1344         RNA_def_struct_sdna(srna, "Main");
1345         RNA_def_struct_ui_text(srna, "Main Fonts", "Collection of fonts");
1346
1347         func = RNA_def_function(srna, "load", "rna_Main_fonts_load");
1348         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1349         RNA_def_function_ui_description(func, "Load a new font into the main database");
1350         parm = RNA_def_string_file_path(func, "filepath", "File Path", 0, "", "path of the font to load");
1351         RNA_def_property_flag(parm, PROP_REQUIRED);
1352         /* return type */
1353         parm = RNA_def_pointer(func, "vfont", "VectorFont", "", "New font datablock");
1354         RNA_def_function_return(func, parm);
1355
1356         func = RNA_def_function(srna, "remove", "rna_Main_fonts_remove");
1357         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1358         RNA_def_function_ui_description(func, "Remove a font from the current blendfile");
1359         parm = RNA_def_pointer(func, "vfont", "VectorFont", "", "Font to remove");
1360         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1361         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1362
1363         func = RNA_def_function(srna, "tag", "rna_Main_fonts_tag");
1364         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1365         RNA_def_property_flag(parm, PROP_REQUIRED);
1366
1367         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1368         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1369         RNA_def_property_boolean_funcs(prop, "rna_Main_fonts_is_updated_get", NULL);
1370 }
1371 void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
1372 {
1373         StructRNA *srna;
1374         FunctionRNA *func;
1375         PropertyRNA *parm;
1376         PropertyRNA *prop;
1377
1378         RNA_def_property_srna(cprop, "BlendDataTextures");
1379         srna = RNA_def_struct(brna, "BlendDataTextures", NULL);
1380         RNA_def_struct_sdna(srna, "Main");
1381         RNA_def_struct_ui_text(srna, "Main Textures", "Collection of groups");
1382
1383         func = RNA_def_function(srna, "new", "rna_Main_textures_new");
1384         RNA_def_function_ui_description(func, "Add a new texture to the main database");
1385         parm = RNA_def_string(func, "name", "Texture", 0, "", "New name for the datablock");
1386         RNA_def_property_flag(parm, PROP_REQUIRED);
1387         parm = RNA_def_enum(func, "type", texture_type_items, 0, "Type", "The type of texture to add");
1388         RNA_def_property_flag(parm, PROP_REQUIRED);
1389         /* return type */
1390         parm = RNA_def_pointer(func, "texture", "Texture", "", "New texture datablock");
1391         RNA_def_function_return(func, parm);
1392
1393         func = RNA_def_function(srna, "remove", "rna_Main_textures_remove");
1394         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1395         RNA_def_function_ui_description(func, "Remove a texture from the current blendfile");
1396         parm = RNA_def_pointer(func, "texture", "Texture", "", "Texture to remove");
1397         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1398         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1399
1400         func = RNA_def_function(srna, "tag", "rna_Main_textures_tag");
1401         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1402         RNA_def_property_flag(parm, PROP_REQUIRED);
1403
1404         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1405         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1406         RNA_def_property_boolean_funcs(prop, "rna_Main_textures_is_updated_get", NULL);
1407 }
1408 void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
1409 {
1410         StructRNA *srna;
1411         FunctionRNA *func;
1412         PropertyRNA *parm;
1413         PropertyRNA *prop;
1414
1415         RNA_def_property_srna(cprop, "BlendDataBrushes");
1416         srna = RNA_def_struct(brna, "BlendDataBrushes", NULL);
1417         RNA_def_struct_sdna(srna, "Main");
1418         RNA_def_struct_ui_text(srna, "Main Brushes", "Collection of brushes");
1419
1420         func = RNA_def_function(srna, "new", "rna_Main_brushes_new");
1421         RNA_def_function_ui_description(func, "Add a new brush to the main database");
1422         parm = RNA_def_string(func, "name", "Brush", 0, "", "New name for the datablock");
1423         RNA_def_property_flag(parm, PROP_REQUIRED);
1424         /* return type */
1425         parm = RNA_def_pointer(func, "brush", "Brush", "", "New brush datablock");
1426         RNA_def_function_return(func, parm);
1427
1428         func = RNA_def_function(srna, "remove", "rna_Main_brushes_remove");
1429         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1430         RNA_def_function_ui_description(func, "Remove a brush from the current blendfile");
1431         parm = RNA_def_pointer(func, "brush", "Brush", "", "Brush to remove");
1432         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1433         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1434
1435         func = RNA_def_function(srna, "tag", "rna_Main_brushes_tag");
1436         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1437         RNA_def_property_flag(parm, PROP_REQUIRED);
1438
1439         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1440         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1441         RNA_def_property_boolean_funcs(prop, "rna_Main_brushes_is_updated_get", NULL);
1442 }
1443
1444 void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
1445 {
1446         StructRNA *srna;
1447         FunctionRNA *func;
1448         PropertyRNA *parm;
1449         PropertyRNA *prop;
1450
1451         RNA_def_property_srna(cprop, "BlendDataWorlds");
1452         srna = RNA_def_struct(brna, "BlendDataWorlds", NULL);
1453         RNA_def_struct_sdna(srna, "Main");
1454         RNA_def_struct_ui_text(srna, "Main Worlds", "Collection of worlds");
1455
1456         func = RNA_def_function(srna, "new", "rna_Main_worlds_new");
1457         RNA_def_function_ui_description(func, "Add a new world to the main database");
1458         parm = RNA_def_string(func, "name", "World", 0, "", "New name for the datablock");
1459         RNA_def_property_flag(parm, PROP_REQUIRED);
1460         /* return type */
1461         parm = RNA_def_pointer(func, "world", "World", "", "New world datablock");
1462         RNA_def_function_return(func, parm);
1463
1464         func = RNA_def_function(srna, "remove", "rna_Main_worlds_remove");
1465         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1466         RNA_def_function_ui_description(func, "Remove a world from the current blendfile");
1467         parm = RNA_def_pointer(func, "world", "World", "", "World to remove");
1468         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1469         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1470
1471         func = RNA_def_function(srna, "tag", "rna_Main_worlds_tag");
1472         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1473         RNA_def_property_flag(parm, PROP_REQUIRED);
1474
1475         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1476         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1477         RNA_def_property_boolean_funcs(prop, "rna_Main_worlds_is_updated_get", NULL);
1478 }
1479
1480 void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
1481 {
1482         StructRNA *srna;
1483         FunctionRNA *func;
1484         PropertyRNA *parm;
1485         PropertyRNA *prop;
1486
1487         RNA_def_property_srna(cprop, "BlendDataGroups");
1488         srna = RNA_def_struct(brna, "BlendDataGroups", NULL);
1489         RNA_def_struct_sdna(srna, "Main");
1490         RNA_def_struct_ui_text(srna, "Main Groups", "Collection of groups");
1491
1492         func = RNA_def_function(srna, "new", "rna_Main_groups_new");
1493         RNA_def_function_ui_description(func, "Add a new group to the main database");
1494         parm = RNA_def_string(func, "name", "Group", 0, "", "New name for the datablock");
1495         RNA_def_property_flag(parm, PROP_REQUIRED);
1496         /* return type */
1497         parm = RNA_def_pointer(func, "group", "Group", "", "New group datablock");
1498         RNA_def_function_return(func, parm);
1499
1500         func = RNA_def_function(srna, "remove", "rna_Main_groups_remove");
1501         RNA_def_function_ui_description(func, "Remove a group from the current blendfile");
1502         parm = RNA_def_pointer(func, "group", "Group", "", "Group to remove");
1503         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1504         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1505
1506         func = RNA_def_function(srna, "tag", "rna_Main_groups_tag");
1507         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1508         RNA_def_property_flag(parm, PROP_REQUIRED);
1509
1510         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1511         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1512         RNA_def_property_boolean_funcs(prop, "rna_Main_groups_is_updated_get", NULL);
1513 }
1514
1515 void RNA_def_main_speakers(BlenderRNA *brna, PropertyRNA *cprop)
1516 {
1517         StructRNA *srna;
1518         FunctionRNA *func;
1519         PropertyRNA *parm;
1520         PropertyRNA *prop;
1521
1522         RNA_def_property_srna(cprop, "BlendDataSpeakers");
1523         srna = RNA_def_struct(brna, "BlendDataSpeakers", NULL);
1524         RNA_def_struct_sdna(srna, "Main");
1525         RNA_def_struct_ui_text(srna, "Main Speakers", "Collection of speakers");
1526
1527         func = RNA_def_function(srna, "new", "rna_Main_speakers_new");
1528         RNA_def_function_ui_description(func, "Add a new speaker to the main database");
1529         parm = RNA_def_string(func, "name", "Speaker", 0, "", "New name for the datablock");
1530         RNA_def_property_flag(parm, PROP_REQUIRED);
1531         /* return type */
1532         parm = RNA_def_pointer(func, "speaker", "Speaker", "", "New speaker datablock");
1533         RNA_def_function_return(func, parm);
1534
1535         func = RNA_def_function(srna, "remove", "rna_Main_speakers_remove");
1536         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1537         RNA_def_function_ui_description(func, "Remove a speaker from the current blendfile");
1538         parm = RNA_def_pointer(func, "speaker", "Speaker", "", "Speaker to remove");
1539         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1540         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1541
1542         func = RNA_def_function(srna, "tag", "rna_Main_speakers_tag");
1543         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1544         RNA_def_property_flag(parm, PROP_REQUIRED);
1545
1546         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1547         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1548         RNA_def_property_boolean_funcs(prop, "rna_Main_speakers_is_updated_get", NULL);
1549 }
1550
1551 void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
1552 {
1553         StructRNA *srna;
1554         FunctionRNA *func;
1555         PropertyRNA *parm;
1556         PropertyRNA *prop;
1557
1558         RNA_def_property_srna(cprop, "BlendDataTexts");
1559         srna = RNA_def_struct(brna, "BlendDataTexts", NULL);
1560         RNA_def_struct_sdna(srna, "Main");
1561         RNA_def_struct_ui_text(srna, "Main Texts", "Collection of texts");
1562
1563         func = RNA_def_function(srna, "new", "rna_Main_texts_new");
1564         RNA_def_function_ui_description(func, "Add a new text to the main database");
1565         parm = RNA_def_string(func, "name", "Text", 0, "", "New name for the datablock");
1566         RNA_def_property_flag(parm, PROP_REQUIRED);
1567         /* return type */
1568         parm = RNA_def_pointer(func, "text", "Text", "", "New text datablock");
1569         RNA_def_function_return(func, parm);
1570
1571         func = RNA_def_function(srna, "remove", "rna_Main_texts_remove");
1572         RNA_def_function_ui_description(func, "Remove a text from the current blendfile");
1573         parm = RNA_def_pointer(func, "text", "Text", "", "Text to remove");
1574         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1575         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1576
1577         /* load func */
1578         func = RNA_def_function(srna, "load", "rna_Main_texts_load");
1579         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1580         RNA_def_function_ui_description(func, "Add a new text to the main database from a file");
1581         parm = RNA_def_string_file_path(func, "filepath", "Path", FILE_MAX, "", "path for the datablock");
1582         RNA_def_property_flag(parm, PROP_REQUIRED);
1583         parm = RNA_def_boolean(func, "internal", 0, "Make internal", "Make text file internal after loading");
1584         /* return type */
1585         parm = RNA_def_pointer(func, "text", "Text", "", "New text datablock");
1586         RNA_def_function_return(func, parm);
1587
1588         func = RNA_def_function(srna, "tag", "rna_Main_texts_tag");
1589         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1590         RNA_def_property_flag(parm, PROP_REQUIRED);
1591
1592         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1593         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1594         RNA_def_property_boolean_funcs(prop, "rna_Main_texts_is_updated_get", NULL);
1595 }
1596
1597 void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop)
1598 {
1599         StructRNA *srna;
1600         FunctionRNA *func;
1601         PropertyRNA *parm;
1602         PropertyRNA *prop;
1603
1604         RNA_def_property_srna(cprop, "BlendDataSounds");
1605         srna = RNA_def_struct(brna, "BlendDataSounds", NULL);
1606         RNA_def_struct_sdna(srna, "Main");
1607         RNA_def_struct_ui_text(srna, "Main Sounds", "Collection of sounds");
1608
1609         /* load func */
1610         func = RNA_def_function(srna, "load", "rna_Main_sounds_load");
1611         RNA_def_function_ui_description(func, "Add a new sound to the main database from a file");
1612         parm = RNA_def_string_file_path(func, "filepath", "Path", FILE_MAX, "", "path for the datablock");
1613         RNA_def_property_flag(parm, PROP_REQUIRED);
1614         /* return type */
1615         parm = RNA_def_pointer(func, "sound", "Sound", "", "New text datablock");
1616         RNA_def_function_return(func, parm);
1617
1618         func = RNA_def_function(srna, "remove", "rna_Main_sounds_remove");
1619         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1620         RNA_def_function_ui_description(func, "Remove a sound from the current blendfile");
1621         parm = RNA_def_pointer(func, "sound", "Sound", "", "Sound to remove");
1622         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1623         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1624
1625         func = RNA_def_function(srna, "tag", "rna_Main_sounds_tag");
1626         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1627         RNA_def_property_flag(parm, PROP_REQUIRED);
1628
1629         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1630         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1631         RNA_def_property_boolean_funcs(prop, "rna_Main_sounds_is_updated_get", NULL);
1632 }
1633
1634 void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop)
1635 {
1636         StructRNA *srna;
1637         FunctionRNA *func;
1638         PropertyRNA *parm;
1639         PropertyRNA *prop;
1640
1641         RNA_def_property_srna(cprop, "BlendDataArmatures");
1642         srna = RNA_def_struct(brna, "BlendDataArmatures", NULL);
1643         RNA_def_struct_sdna(srna, "Main");
1644         RNA_def_struct_ui_text(srna, "Main Armatures", "Collection of armatures");
1645
1646         func = RNA_def_function(srna, "new", "rna_Main_armatures_new");
1647         RNA_def_function_ui_description(func, "Add a new armature to the main database");
1648         parm = RNA_def_string(func, "name", "Armature", 0, "", "New name for the datablock");
1649         RNA_def_property_flag(parm, PROP_REQUIRED);
1650         /* return type */
1651         parm = RNA_def_pointer(func, "armature", "Armature", "", "New armature datablock");
1652         RNA_def_function_return(func, parm);
1653
1654         func = RNA_def_function(srna, "remove", "rna_Main_armatures_remove");
1655         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1656         RNA_def_function_ui_description(func, "Remove a armature from the current blendfile");
1657         parm = RNA_def_pointer(func, "armature", "Armature", "", "Armature to remove");
1658         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1659         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1660
1661         func = RNA_def_function(srna, "tag", "rna_Main_armatures_tag");
1662         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1663         RNA_def_property_flag(parm, PROP_REQUIRED);
1664
1665         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1666         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1667         RNA_def_property_boolean_funcs(prop, "rna_Main_armatures_is_updated_get", NULL);
1668 }
1669 void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
1670 {
1671         StructRNA *srna;
1672         FunctionRNA *func;
1673         PropertyRNA *parm;
1674         PropertyRNA *prop;
1675
1676         RNA_def_property_srna(cprop, "BlendDataActions");
1677         srna = RNA_def_struct(brna, "BlendDataActions", NULL);
1678         RNA_def_struct_sdna(srna, "Main");
1679         RNA_def_struct_ui_text(srna, "Main Actions", "Collection of actions");
1680
1681         func = RNA_def_function(srna, "new", "rna_Main_actions_new");
1682         RNA_def_function_ui_description(func, "Add a new action to the main database");
1683         parm = RNA_def_string(func, "name", "Action", 0, "", "New name for the datablock");
1684         RNA_def_property_flag(parm, PROP_REQUIRED);
1685         /* return type */
1686         parm = RNA_def_pointer(func, "action", "Action", "", "New action datablock");
1687         RNA_def_function_return(func, parm);
1688
1689         func = RNA_def_function(srna, "remove", "rna_Main_actions_remove");
1690         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1691         RNA_def_function_ui_description(func, "Remove a action from the current blendfile");
1692         parm = RNA_def_pointer(func, "action", "Action", "", "Action to remove");
1693         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1694         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1695
1696         func = RNA_def_function(srna, "tag", "rna_Main_actions_tag");
1697         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1698         RNA_def_property_flag(parm, PROP_REQUIRED);
1699
1700         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1701         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1702         RNA_def_property_boolean_funcs(prop, "rna_Main_actions_is_updated_get", NULL);
1703 }
1704 void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
1705 {
1706         StructRNA *srna;
1707         FunctionRNA *func;
1708         PropertyRNA *parm;
1709         PropertyRNA *prop;
1710
1711         RNA_def_property_srna(cprop, "BlendDataParticles");
1712         srna = RNA_def_struct(brna, "BlendDataParticles", NULL);
1713         RNA_def_struct_sdna(srna, "Main");
1714         RNA_def_struct_ui_text(srna, "Main Particle Settings", "Collection of particle settings");
1715
1716         func = RNA_def_function(srna, "new", "rna_Main_particles_new");
1717         RNA_def_function_ui_description(func, "Add a new particle settings instance to the main database");
1718         parm = RNA_def_string(func, "name", "ParticleSettings", 0, "", "New name for the datablock");
1719         RNA_def_property_flag(parm, PROP_REQUIRED);
1720         /* return type */
1721         parm = RNA_def_pointer(func, "particle", "ParticleSettings", "", "New particle settings datablock");
1722         RNA_def_function_return(func, parm);
1723
1724         func = RNA_def_function(srna, "remove", "rna_Main_particles_remove");
1725         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1726         RNA_def_function_ui_description(func, "Remove a particle settings instance from the current blendfile");
1727         parm = RNA_def_pointer(func, "particle", "ParticleSettings", "", "Particle Settings to remove");
1728         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1729         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1730
1731         func = RNA_def_function(srna, "tag", "rna_Main_particles_tag");
1732         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1733         RNA_def_property_flag(parm, PROP_REQUIRED);
1734
1735         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1736         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1737         RNA_def_property_boolean_funcs(prop, "rna_Main_particles_is_updated_get", NULL);
1738 }
1739 void RNA_def_main_palettes(BlenderRNA *brna, PropertyRNA *cprop)
1740 {
1741         StructRNA *srna;
1742         FunctionRNA *func;
1743         PropertyRNA *parm;
1744         PropertyRNA *prop;
1745
1746         RNA_def_property_srna(cprop, "BlendDataPalettes");
1747         srna = RNA_def_struct(brna, "BlendDataPalettes", NULL);
1748         RNA_def_struct_sdna(srna, "Main");
1749         RNA_def_struct_ui_text(srna, "Main Palettes", "Collection of palettes");
1750
1751         func = RNA_def_function(srna, "new", "rna_Main_palettes_new");
1752         RNA_def_function_ui_description(func, "Add a new palette to the main database");
1753         parm = RNA_def_string(func, "name", "Palette", 0, "", "New name for the datablock");
1754         RNA_def_property_flag(parm, PROP_REQUIRED);
1755         /* return type */
1756         parm = RNA_def_pointer(func, "palette", "Palette", "", "New palette datablock");
1757         RNA_def_function_return(func, parm);
1758
1759         func = RNA_def_function(srna, "remove", "rna_Main_palettes_remove");
1760         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1761         RNA_def_function_ui_description(func, "Remove a palette from the current blendfile");
1762         parm = RNA_def_pointer(func, "palette", "Palette", "", "Palette to remove");
1763         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1764         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1765
1766         func = RNA_def_function(srna, "tag", "rna_Main_palettes_tag");
1767         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1768         RNA_def_property_flag(parm, PROP_REQUIRED);
1769
1770         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1771         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1772         RNA_def_property_boolean_funcs(prop, "rna_Main_palettes_is_updated_get", NULL);
1773 }
1774 void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop)
1775 {
1776         StructRNA *srna;
1777         FunctionRNA *func;
1778         PropertyRNA *parm;
1779         PropertyRNA *prop;
1780
1781         RNA_def_property_srna(cprop, "BlendDataGreasePencils");
1782         srna = RNA_def_struct(brna, "BlendDataGreasePencils", NULL);
1783         RNA_def_struct_sdna(srna, "Main");
1784         RNA_def_struct_ui_text(srna, "Main Grease Pencils", "Collection of grease pencils");
1785
1786         func = RNA_def_function(srna, "tag", "rna_Main_gpencil_tag");
1787         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1788         RNA_def_property_flag(parm, PROP_REQUIRED);
1789
1790         func = RNA_def_function(srna, "new", "gpencil_data_addnew");
1791         RNA_def_function_flag(func, FUNC_NO_SELF);
1792         parm = RNA_def_string(func, "name", "GreasePencil", 0, "", "New name for the datablock");
1793         RNA_def_property_flag(parm, PROP_REQUIRED);
1794         /* return type */
1795         parm = RNA_def_pointer(func, "grease_pencil", "GreasePencil", "", "New grease pencil datablock");
1796         RNA_def_function_return(func, parm);
1797
1798         func = RNA_def_function(srna, "remove", "rna_Main_grease_pencil_remove");
1799         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1800         RNA_def_function_ui_description(func, "Remove a grease pencil instance from the current blendfile");
1801         parm = RNA_def_pointer(func, "grease_pencil", "GreasePencil", "", "Grease Pencil to remove");
1802         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1803         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1804
1805         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1806         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1807         RNA_def_property_boolean_funcs(prop, "rna_Main_gpencil_is_updated_get", NULL);
1808 }
1809
1810 void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop)
1811 {
1812         StructRNA *srna;
1813         FunctionRNA *func;
1814         PropertyRNA *parm;
1815
1816         RNA_def_property_srna(cprop, "BlendDataMovieClips");
1817         srna = RNA_def_struct(brna, "BlendDataMovieClips", NULL);
1818         RNA_def_struct_sdna(srna, "Main");
1819         RNA_def_struct_ui_text(srna, "Main Movie Clips", "Collection of movie clips");
1820
1821         func = RNA_def_function(srna, "tag", "rna_Main_movieclips_tag");
1822         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1823         RNA_def_property_flag(parm, PROP_REQUIRED);
1824
1825         func = RNA_def_function(srna, "remove", "rna_Main_movieclips_remove");
1826         RNA_def_function_ui_description(func, "Remove a movie clip from the current blendfile.");
1827         parm = RNA_def_pointer(func, "clip", "MovieClip", "", "Movie clip to remove");
1828         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1829         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1830
1831         /* load func */
1832         func = RNA_def_function(srna, "load", "rna_Main_movieclip_load");
1833         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1834         RNA_def_function_ui_description(func, "Add a new movie clip to the main database from a file");
1835         parm = RNA_def_string_file_path(func, "filepath", "Path", FILE_MAX, "", "path for the datablock");
1836         RNA_def_property_flag(parm, PROP_REQUIRED);
1837         /* return type */
1838         parm = RNA_def_pointer(func, "clip", "MovieClip", "", "New movie clip datablock");
1839         RNA_def_function_return(func, parm);
1840 }
1841
1842 void RNA_def_main_masks(BlenderRNA *brna, PropertyRNA *cprop)
1843 {
1844         StructRNA *srna;
1845         FunctionRNA *func;
1846         PropertyRNA *parm;
1847
1848         RNA_def_property_srna(cprop, "BlendDataMasks");
1849         srna = RNA_def_struct(brna, "BlendDataMasks", NULL);
1850         RNA_def_struct_sdna(srna, "Main");
1851         RNA_def_struct_ui_text(srna, "Main Masks", "Collection of masks");
1852
1853         func = RNA_def_function(srna, "tag", "rna_Main_masks_tag");
1854         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1855         RNA_def_property_flag(parm, PROP_REQUIRED);
1856
1857         /* new func */
1858         func = RNA_def_function(srna, "new", "rna_Main_mask_new");
1859         RNA_def_function_ui_description(func, "Add a new mask with a given name to the main database");
1860         RNA_def_string_file_path(func, "name", NULL, MAX_ID_NAME - 2, "Mask", "Name of new mask datablock");
1861         /* return type */
1862         parm = RNA_def_pointer(func, "mask", "Mask", "", "New mask datablock");
1863         RNA_def_function_return(func, parm);
1864
1865         /* remove func */
1866         func = RNA_def_function(srna, "remove", "rna_Main_masks_remove");
1867         RNA_def_function_ui_description(func, "Remove a masks from the current blendfile.");
1868         parm = RNA_def_pointer(func, "mask", "Mask", "", "Mask to remove");
1869         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
1870         RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
1871 }
1872
1873 void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop)
1874 {
1875         StructRNA *srna;
1876         FunctionRNA *func;
1877         PropertyRNA *parm;
1878         PropertyRNA *prop;
1879
1880         RNA_def_property_srna(cprop, "BlendDataLineStyles");
1881         srna = RNA_def_struct(brna, "BlendDataLineStyles", NULL);
1882         RNA_def_struct_sdna(srna, "Main");
1883         RNA_def_struct_ui_text(srna, "Main Line Styles", "Collection of line styles");
1884
1885         func = RNA_def_function(srna, "tag", "rna_Main_linestyle_tag");
1886         parm = RNA_def_boolean(func, "value", 0, "Value", "");
1887         RNA_def_property_flag(parm, PROP_REQUIRED);
1888
1889         func = RNA_def_function(srna, "new", "rna_Main_linestyles_new");
1890         RNA_def_function_ui_description(func, "Add a new line style instance to the main database");
1891         parm = RNA_def_string(func, "name", "FreestyleLineStyle", 0, "", "New name for the datablock");
1892         RNA_def_property_flag(parm, PROP_REQUIRED);
1893         /* return type */
1894         parm = RNA_def_pointer(func, "linestyle", "FreestyleLineStyle", "", "New line style datablock");
1895         RNA_def_function_return(func, parm);
1896
1897         func = RNA_def_function(srna, "remove", "rna_Main_linestyles_remove");
1898         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1899         RNA_def_function_ui_description(func, "Remove a line style instance from the current blendfile");
1900         parm = RNA_def_pointer(func, "linestyle", "FreestyleLineStyle", "", "Line style to remove");
1901         RNA_def_property_flag(parm, PROP_REQUIRED);
1902
1903         prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
1904         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1905         RNA_def_property_boolean_funcs(prop, "rna_Main_linestyle_is_updated_get", NULL);
1906 }
1907
1908 #endif