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