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