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