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