RNA: strict naming for types in bpy.types
[blender.git] / source / blender / makesrna / intern / rna_cachefile.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) 2016 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Kevin Dietrich.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 #include "DNA_cachefile_types.h"
27 #include "DNA_scene_types.h"
28
29 #include "RNA_access.h"
30 #include "RNA_define.h"
31 #include "RNA_enum_types.h"
32
33 #include "rna_internal.h"
34
35 #ifdef RNA_RUNTIME
36
37 #include "BKE_cachefile.h"
38 #include "BKE_depsgraph.h"
39
40 #include "BLI_string.h"
41
42 #include "DEG_depsgraph.h"
43
44 #include "WM_api.h"
45 #include "WM_types.h"
46
47 #ifdef WITH_ALEMBIC
48 #  include "../../../alembic/ABC_alembic.h"
49 #endif
50
51 static void rna_CacheFile_update(Main *bmain, Scene *scene, PointerRNA *ptr)
52 {
53         CacheFile *cache_file = (CacheFile *)ptr->data;
54
55         DAG_id_tag_update(&cache_file->id, 0);
56         WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
57
58         UNUSED_VARS(bmain, scene);
59 }
60
61 static void rna_CacheFile_update_handle(Main *bmain, Scene *scene, PointerRNA *ptr)
62 {
63         CacheFile *cache_file = ptr->data;
64
65         if ((cache_file->flag & CACHEFILE_DIRTY) != 0) {
66                 BKE_cachefile_clean(scene, cache_file);
67                 BLI_freelistN(&cache_file->object_paths);
68                 cache_file->flag &= ~CACHEFILE_DIRTY;
69         }
70
71         BKE_cachefile_reload(bmain, cache_file);
72
73         rna_CacheFile_update(bmain, scene, ptr);
74 }
75
76 static void rna_CacheFile_object_paths_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
77 {
78         CacheFile *cache_file = (CacheFile *)ptr->data;
79         rna_iterator_listbase_begin(iter, &cache_file->object_paths, NULL);
80 }
81
82 static void rna_CacheFile_filename_set(PointerRNA *ptr, const char *value)
83 {
84         CacheFile *cache_file = ptr->data;
85
86         if (STREQ(cache_file->filepath, value)) {
87                 return;
88         }
89
90         /* Different file is opened, close all readers. */
91         cache_file->flag |= CACHEFILE_DIRTY;
92
93         BLI_strncpy(cache_file->filepath, value, sizeof(cache_file->filepath));
94 }
95
96 #else
97
98 /* cachefile.object_paths */
99 static void rna_def_alembic_object_path(BlenderRNA *brna)
100 {
101         StructRNA *srna = RNA_def_struct(brna, "AlembicObjectPath", NULL);
102         RNA_def_struct_sdna(srna, "AlembicObjectPath");
103         RNA_def_struct_ui_text(srna, "Object Path", "Path of an object inside of an Alembic archive");
104         RNA_def_struct_ui_icon(srna, ICON_NONE);
105
106         PropertyRNA *prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
107         RNA_def_property_ui_text(prop, "Path", "Object path");
108         RNA_def_struct_name_property(srna, prop);
109 }
110
111 /* cachefile.object_paths */
112 static void rna_def_cachefile_object_paths(BlenderRNA *brna, PropertyRNA *cprop)
113 {
114         RNA_def_property_srna(cprop, "AlembicObjectPaths");
115         StructRNA *srna = RNA_def_struct(brna, "AlembicObjectPaths", NULL);
116         RNA_def_struct_sdna(srna, "CacheFile");
117         RNA_def_struct_ui_text(srna, "Object Paths", "Collection of object paths");
118 }
119
120 static void rna_def_cachefile(BlenderRNA *brna)
121 {
122         StructRNA *srna = RNA_def_struct(brna, "CacheFile", "ID");
123         RNA_def_struct_sdna(srna, "CacheFile");
124         RNA_def_struct_ui_text(srna, "CacheFile", "");
125         RNA_def_struct_ui_icon(srna, ICON_FILE);
126
127         PropertyRNA *prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
128         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_CacheFile_filename_set");
129         RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
130         RNA_def_property_update(prop, 0, "rna_CacheFile_update_handle");
131
132         prop = RNA_def_property(srna, "is_sequence", PROP_BOOLEAN, PROP_NONE);
133         RNA_def_property_ui_text(prop, "Sequence", "Whether the cache is separated in a series of files");
134         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
135
136         /* ----------------- For Scene time ------------------- */
137
138         prop = RNA_def_property(srna, "override_frame", PROP_BOOLEAN, PROP_NONE);
139         RNA_def_property_ui_text(prop, "Override Frame",
140                                  "Whether to use a custom frame for looking up data in the cache file,"
141                                  " instead of using the current scene frame");
142         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
143
144         prop = RNA_def_property(srna, "frame", PROP_FLOAT, PROP_NONE);
145         RNA_def_property_float_sdna(prop, NULL, "frame");
146         RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
147         RNA_def_property_ui_text(prop, "Frame", "The time to use for looking up the data in the cache file,"
148                                                 " or to determine which file to use in a file sequence");
149         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
150
151         /* ----------------- Axis Conversion ----------------- */
152
153         prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
154         RNA_def_property_enum_sdna(prop, NULL, "forward_axis");
155         RNA_def_property_enum_items(prop, rna_enum_object_axis_items);
156         RNA_def_property_ui_text(prop, "Forward", "");
157         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
158
159         prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
160         RNA_def_property_enum_sdna(prop, NULL, "up_axis");
161         RNA_def_property_enum_items(prop, rna_enum_object_axis_items);
162         RNA_def_property_ui_text(prop, "Up", "");
163         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
164
165         prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
166         RNA_def_property_float_sdna(prop, NULL, "scale");
167         RNA_def_property_range(prop, 0.0001f, 1000.0f);
168         RNA_def_property_ui_text(prop, "Scale", "Value by which to enlarge or shrink the object with respect to the world's origin"
169                                                 " (only applicable through a Transform Cache constraint)");
170         RNA_def_property_update(prop, 0, "rna_CacheFile_update");
171
172         /* object paths */
173         prop = RNA_def_property(srna, "object_paths", PROP_COLLECTION, PROP_NONE);
174         RNA_def_property_collection_sdna(prop, NULL, "object_paths", NULL);
175         RNA_def_property_collection_funcs(prop, "rna_CacheFile_object_paths_begin", "rna_iterator_listbase_next",
176                                           "rna_iterator_listbase_end", "rna_iterator_listbase_get",
177                                           NULL, NULL, NULL, NULL);
178         RNA_def_property_struct_type(prop, "AlembicObjectPath");
179         RNA_def_property_srna(prop, "AlembicObjectPaths");
180         RNA_def_property_ui_text(prop, "Object Paths", "Paths of the objects inside the Alembic archive");
181         rna_def_cachefile_object_paths(brna, prop);
182
183         rna_def_animdata_common(srna);
184 }
185
186 void RNA_def_cachefile(BlenderRNA *brna)
187 {
188         rna_def_cachefile(brna);
189         rna_def_alembic_object_path(brna);
190 }
191
192 #endif