4344c936c9461832ad9e250ce0be0b03daa1812e
[blender.git] / source / blender / makesrna / intern / rna_sequence.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008)
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26 #include <limits.h>
27
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "DNA_object_types.h"
34 #include "DNA_scene_types.h"
35 #include "DNA_sequence_types.h"
36
37 #ifdef RNA_RUNTIME
38
39 /* name functions that ignore the first two characters */
40 static void rna_Sequence_name_get(PointerRNA *ptr, char *value)
41 {
42         Sequence *seq= (Sequence*)ptr->data;
43         BLI_strncpy(value, seq->name+2, sizeof(seq->name)-2);
44 }
45
46 static int rna_Sequence_name_length(PointerRNA *ptr)
47 {
48         Sequence *seq= (Sequence*)ptr->data;
49         return strlen(seq->name+2);
50 }
51
52 static void rna_Sequence_name_set(PointerRNA *ptr, const char *value)
53 {
54         Sequence *seq= (Sequence*)ptr->data;
55         BLI_strncpy(seq->name+2, value, sizeof(seq->name)-2);
56 }
57
58 static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr)
59 {
60         Sequence *seq= (Sequence*)ptr->data;
61
62         switch(seq->type) {
63                 case SEQ_IMAGE:
64                         return &RNA_ImageSequence;
65                 case SEQ_META:
66                         return &RNA_MetaSequence;
67                 case SEQ_SCENE:
68                         return &RNA_SceneSequence;
69                 case SEQ_MOVIE:
70                 case SEQ_MOVIE_AND_HD_SOUND:
71                         return &RNA_MovieSequence;
72                 case SEQ_RAM_SOUND:
73                 case SEQ_HD_SOUND:
74                         return &RNA_SoundSequence;
75                 case SEQ_CROSS:
76                 case SEQ_ADD:
77                 case SEQ_SUB:
78                 case SEQ_ALPHAOVER:
79                 case SEQ_ALPHAUNDER:
80                 case SEQ_GAMCROSS:
81                 case SEQ_MUL:
82                 case SEQ_OVERDROP:
83                         return &RNA_EffectSequence;
84                 case SEQ_PLUGIN:
85                         return &RNA_PluginSequence;
86                 case SEQ_WIPE:
87                         return &RNA_WipeSequence;
88                 case SEQ_GLOW:
89                         return &RNA_GlowSequence;
90                 case SEQ_TRANSFORM:
91                         return &RNA_TransformSequence;
92                 case SEQ_COLOR:
93                         return &RNA_ColorSequence;
94                 case SEQ_SPEED:
95                         return &RNA_SpeedControlSequence;
96                 default:
97                         return &RNA_Sequence;
98         }
99 }
100
101 static void *rna_SequenceEdtior_meta_stack_get(CollectionPropertyIterator *iter)
102 {
103         ListBaseIterator *internal= iter->internal;
104         MetaStack *ms= (MetaStack*)internal->link;
105
106         return (Sequence*)ms->parseq;
107 }
108
109 #else
110
111 static void rna_def_strip_element(BlenderRNA *brna)
112 {
113         StructRNA *srna;
114         PropertyRNA *prop;
115         
116         srna = RNA_def_struct(brna, "SequenceElement", NULL);
117         RNA_def_struct_ui_text(srna, "Sequence Element", "DOC_BROKEN");
118         RNA_def_struct_sdna(srna, "StripElem");
119         
120         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
121         RNA_def_property_string_sdna(prop, NULL, "name");
122         RNA_def_property_ui_text(prop, "Filename", "");
123 }
124
125 static void rna_def_strip_crop(BlenderRNA *brna)
126 {
127         StructRNA *srna;
128         PropertyRNA *prop;
129         
130         srna = RNA_def_struct(brna, "SequenceCrop", NULL);
131         RNA_def_struct_ui_text(srna, "Sequence Crop", "DOC_BROKEN");
132         RNA_def_struct_sdna(srna, "StripCrop");
133
134         prop= RNA_def_property(srna, "top", PROP_INT, PROP_UNSIGNED);
135         RNA_def_property_ui_text(prop, "Top", "");
136         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
137         
138         prop= RNA_def_property(srna, "bottom", PROP_INT, PROP_UNSIGNED);
139         RNA_def_property_ui_text(prop, "Bottom", "");
140         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
141         
142         prop= RNA_def_property(srna, "left", PROP_INT, PROP_UNSIGNED);
143         RNA_def_property_ui_text(prop, "Left", "");
144         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
145
146         prop= RNA_def_property(srna, "right", PROP_INT, PROP_UNSIGNED);
147         RNA_def_property_ui_text(prop, "Right", "");
148         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
149 }
150
151 static void rna_def_strip_transform(BlenderRNA *brna)
152 {
153         StructRNA *srna;
154         PropertyRNA *prop;
155         
156         srna = RNA_def_struct(brna, "SequenceTransform", NULL);
157         RNA_def_struct_ui_text(srna, "Sequence Transform", "DOC_BROKEN");
158         RNA_def_struct_sdna(srna, "StripTransform");
159
160         prop= RNA_def_property(srna, "offset_x", PROP_INT, PROP_NONE);
161         RNA_def_property_int_sdna(prop, NULL, "xofs");
162         RNA_def_property_ui_text(prop, "Offset Y", "");
163         RNA_def_property_ui_range(prop, -4096, 4096, 1, 0);
164
165         prop= RNA_def_property(srna, "offset_y", PROP_INT, PROP_NONE);
166         RNA_def_property_int_sdna(prop, NULL, "yofs");
167         RNA_def_property_ui_text(prop, "Offset Y", "");
168         RNA_def_property_ui_range(prop, -4096, 4096, 1, 0);
169 }
170
171 static void rna_def_strip_proxy(BlenderRNA *brna)
172 {
173         StructRNA *srna;
174         PropertyRNA *prop;
175         
176         srna = RNA_def_struct(brna, "SequenceProxy", NULL);
177         RNA_def_struct_ui_text(srna, "Sequence Proxy", "DOC_BROKEN");
178         RNA_def_struct_sdna(srna, "StripProxy");
179         
180         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
181         RNA_def_property_string_sdna(prop, NULL, "dir");
182         RNA_def_property_ui_text(prop, "Directory", "");
183 }
184
185 static void rna_def_strip_color_balance(BlenderRNA *brna)
186 {
187         StructRNA *srna;
188         PropertyRNA *prop;
189
190         srna = RNA_def_struct(brna, "SequenceColorBalance", NULL);
191         RNA_def_struct_ui_text(srna, "Sequence Color Balance", "DOC_BROKEN");
192         RNA_def_struct_sdna(srna, "StripColorBalance");
193
194         prop= RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR);
195         RNA_def_property_ui_text(prop, "Lift", "Color balance lift (shadows).");
196         
197         prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR);
198         RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones).");
199         
200         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR);
201         RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights).");
202         
203         prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE);
204         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN);
205         RNA_def_property_ui_text(prop, "Inverse Gain", "");
206
207         prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE);
208         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA);
209         RNA_def_property_ui_text(prop, "Inverse Gamma", "");
210
211         prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE);
212         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT);
213         RNA_def_property_ui_text(prop, "Inverse Lift", "");
214         
215         /* not yet used
216         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
217         RNA_def_property_range(prop, 0.0f, 1.0f);
218         RNA_def_property_ui_text(prop, "Exposure", "");
219         
220         prop= RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
221         RNA_def_property_range(prop, 0.0f, 1.0f);
222         RNA_def_property_ui_text(prop, "Saturation", "");*/
223 }
224
225 static void rna_def_sequence(BlenderRNA *brna)
226 {
227         StructRNA *srna;
228         PropertyRNA *prop;
229
230         static const EnumPropertyItem seq_type_items[]= {
231                 {SEQ_IMAGE, "IMAGE", "Image", ""}, 
232                 {SEQ_META, "META", "Meta", ""}, 
233                 {SEQ_SCENE, "SCENE", "Scene", ""}, 
234                 {SEQ_MOVIE, "MOVIE", "Movie", ""}, 
235                 {SEQ_RAM_SOUND, "RAM_SOUND", "Ram Sound", ""}, 
236                 {SEQ_HD_SOUND, "HD_SOUND", "HD Sound", ""}, 
237                 {SEQ_MOVIE_AND_HD_SOUND, "MOVIE_AND_HD_SOUND", "Movie and HD Sound", ""}, 
238                 {SEQ_EFFECT, "REPLACE", "Replace", ""}, 
239                 {SEQ_CROSS, "CROSS", "Cross", ""}, 
240                 {SEQ_ADD, "ADD", "Add", ""}, 
241                 {SEQ_SUB, "SUBTRACT", "Subtract", ""}, 
242                 {SEQ_ALPHAOVER, "ALPHAOVER", "Alpha Over", ""}, 
243                 {SEQ_ALPHAUNDER, "ALPHAUNDER", "Alpha Under", ""}, 
244                 {SEQ_GAMCROSS, "GAMMACROSS", "Gamma Cross", ""}, 
245                 {SEQ_MUL, "MULTIPLY", "Multiply", ""}, 
246                 {SEQ_OVERDROP, "OVERDROP", "Over Drop", ""}, 
247                 {SEQ_PLUGIN, "PLUGIN", "plugin", ""}, 
248                 {SEQ_WIPE, "WIPE", "Wipe", ""}, 
249                 {SEQ_GLOW, "GLOW", "Glow", ""}, 
250                 {SEQ_TRANSFORM, "TRANSFORM", "Transform", ""}, 
251                 {SEQ_COLOR, "COLOR", "Color", ""}, 
252                 {SEQ_SPEED, "SPEED", "Speed", ""}, 
253                 {0, NULL, NULL, NULL}
254         };
255
256         static const EnumPropertyItem blend_mode_items[]= {
257                         {SEQ_BLEND_REPLACE, "REPLACE", "Replace", ""}, 
258                         {SEQ_CROSS, "CROSS", "Cross", ""}, 
259                         {SEQ_ADD, "ADD", "Add", ""}, 
260                         {SEQ_SUB, "SUBTRACT", "Subtract", ""}, 
261                         {SEQ_ALPHAOVER, "ALPHAOVER", "Alpha Over", ""}, 
262                         {SEQ_ALPHAUNDER, "ALPHAUNDER", "Alpha Under", ""}, 
263                         {SEQ_GAMCROSS, "GAMCROSS", "Gamma Cross", ""}, 
264                         {SEQ_MUL, "MULTIPLY", "Multiply", ""}, 
265                         {SEQ_OVERDROP, "OVERDROP", "Over Drop", ""}, 
266                         {SEQ_PLUGIN, "PLUGIN", "plugin", ""}, 
267                         {SEQ_WIPE, "WIPE", "Wipe", ""}, 
268                         {SEQ_GLOW, "GLOW", "Glow", ""}, 
269                         {SEQ_TRANSFORM, "TRANSFORM", "Transform", ""}, 
270                         {SEQ_COLOR, "COLOR", "Color", ""}, 
271                         {SEQ_SPEED, "SPEED", "Speed", ""}, 
272                 {0, NULL, NULL, NULL}
273         };
274         
275         srna = RNA_def_struct(brna, "Sequence", NULL);
276         RNA_def_struct_ui_text(srna, "Sequence", "DOC_BROKEN");
277         RNA_def_struct_refine_func(srna, "rna_Sequence_refine");
278
279         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
280         RNA_def_property_string_funcs(prop, "rna_Sequence_name_get", "rna_Sequence_name_length", "rna_Sequence_name_set");
281         RNA_def_property_string_maxlength(prop, sizeof(((Sequence*)NULL)->name)-2);
282         RNA_def_property_ui_text(prop, "Name", "");
283         RNA_def_struct_name_property(srna, prop);
284
285         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
286         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
287         RNA_def_property_enum_items(prop, seq_type_items);
288         RNA_def_property_ui_text(prop, "Type", "");
289
290         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
291         RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by this sequence.");
292
293         /* flags */
294
295         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
296         RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
297         RNA_def_property_ui_text(prop, "Selected", "");
298
299         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
300         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_ACTIVE);
301         RNA_def_property_ui_text(prop, "Active", "");
302
303         prop= RNA_def_property(srna, "left_handle_selected", PROP_BOOLEAN, PROP_NONE);
304         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LEFTSEL);
305         RNA_def_property_ui_text(prop, "Left Handle Selected", "");
306
307         prop= RNA_def_property(srna, "right_handle_selected", PROP_BOOLEAN, PROP_NONE);
308         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_RIGHTSEL);
309         RNA_def_property_ui_text(prop, "Right Handle Selected", "");
310
311         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
312         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MUTE);
313         RNA_def_property_ui_text(prop, "Mute", "");
314
315         prop= RNA_def_property(srna, "ipo_frame_locked", PROP_BOOLEAN, PROP_NONE);
316         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_IPO_FRAME_LOCKED);
317         RNA_def_property_ui_text(prop, "IPO Frame Locked", "Lock the IPO coordinates to the global frame counter.");
318
319         prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
320         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LOCK);
321         RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it can't be transformed.");
322
323         /* strip positioning */
324
325         prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED);
326         RNA_def_property_int_sdna(prop, NULL, "len");
327         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // computed from other values
328         RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
329         
330         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_UNSIGNED);
331         RNA_def_property_int_sdna(prop, NULL, "start");
332         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
333         RNA_def_property_ui_text(prop, "Start Frame", "");
334         
335         prop= RNA_def_property(srna, "start_offset", PROP_INT, PROP_UNSIGNED);
336         RNA_def_property_int_sdna(prop, NULL, "startofs");
337         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
338         RNA_def_property_ui_text(prop, "Start Offset", "");
339         
340         prop= RNA_def_property(srna, "end_offset", PROP_INT, PROP_UNSIGNED);
341         RNA_def_property_int_sdna(prop, NULL, "endofs");
342         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
343         RNA_def_property_ui_text(prop, "End offset", "");
344         
345         prop= RNA_def_property(srna, "start_still", PROP_INT, PROP_UNSIGNED);
346         RNA_def_property_int_sdna(prop, NULL, "startstill");
347         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
348         RNA_def_property_range(prop, 0, MAXFRAME);
349         RNA_def_property_ui_text(prop, "Start Still", "");
350         
351         prop= RNA_def_property(srna, "end_still", PROP_INT, PROP_UNSIGNED);
352         RNA_def_property_int_sdna(prop, NULL, "endstill");
353         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
354         RNA_def_property_range(prop, 0, MAXFRAME);
355         RNA_def_property_ui_text(prop, "End Still", "");
356         
357         prop= RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED);
358         RNA_def_property_int_sdna(prop, NULL, "machine");
359         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
360         RNA_def_property_ui_text(prop, "Channel", "Y position of the sequence strip.");
361
362         /* blending */
363
364         prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
365         RNA_def_property_enum_items(prop, blend_mode_items);
366         RNA_def_property_ui_text(prop, "Blend Mode", "");
367         
368         prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_NONE);
369         RNA_def_property_range(prop, 0.0f, 100.0f);
370         RNA_def_property_ui_text(prop, "Blend Opacity", "");
371 }
372
373 void rna_def_editor(BlenderRNA *brna)
374 {
375         StructRNA *srna;
376         PropertyRNA *prop;
377         
378         srna = RNA_def_struct(brna, "SequenceEditor", NULL);
379         RNA_def_struct_ui_text(srna, "Sequence Editor", "DOC_BROKEN");
380         RNA_def_struct_sdna(srna, "Editing");
381
382         prop= RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
383         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
384         RNA_def_property_struct_type(prop, "Sequence");
385         RNA_def_property_ui_text(prop, "Sequences", "");
386
387         prop= RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE);
388         RNA_def_property_collection_sdna(prop, NULL, "metastack", NULL);
389         RNA_def_property_struct_type(prop, "Sequence");
390         RNA_def_property_ui_text(prop, "Meta Stack", "Meta strip stack, last is currently edited meta strip.");
391         RNA_def_property_collection_funcs(prop, 0, 0, 0, "rna_SequenceEdtior_meta_stack_get", 0, 0, 0, 0);
392 }
393
394 static void rna_def_filter_video(StructRNA *srna)
395 {
396         PropertyRNA *prop;
397
398         prop= RNA_def_property(srna, "de_interlace", PROP_BOOLEAN, PROP_NONE);
399         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FILTERY);
400         RNA_def_property_ui_text(prop, "De-Interlace", "For video movies to remove fields.");
401
402         prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
403         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL);
404         RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha.");
405
406         prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE);
407         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX);
408         RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis.");
409
410         prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE);
411         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY);
412         RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis.");
413
414         prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE);
415         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT);
416         RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data.");
417
418         prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
419         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES);
420         RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order.");
421
422         prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED);
423         RNA_def_property_float_sdna(prop, NULL, "mul");
424         RNA_def_property_range(prop, 0.0f, 20.0f);
425         RNA_def_property_ui_text(prop, "Multiply Colors", "");
426
427         prop= RNA_def_property(srna, "strobe", PROP_FLOAT, PROP_NONE);
428         RNA_def_property_range(prop, 1.0f, 30.0f);
429         RNA_def_property_ui_text(prop, "Strobe", "Only display every nth frame.");
430
431         prop= RNA_def_property(srna, "use_color_balance", PROP_BOOLEAN, PROP_NONE);
432         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_COLOR_BALANCE);
433         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate color balance
434         RNA_def_property_ui_text(prop, "Use Color Balance", "(3-Way color correction) on input.");
435
436         prop= RNA_def_property(srna, "color_balance", PROP_POINTER, PROP_NONE);
437         RNA_def_property_pointer_sdna(prop, NULL, "strip->color_balance");
438         RNA_def_property_ui_text(prop, "Color Balance", "");
439
440         prop= RNA_def_property(srna, "use_translation", PROP_BOOLEAN, PROP_NONE);
441         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_TRANSFORM);
442         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate transform
443         RNA_def_property_ui_text(prop, "Use Translation", "Translate image before processing.");
444         
445         prop= RNA_def_property(srna, "transform", PROP_POINTER, PROP_NONE);
446         RNA_def_property_pointer_sdna(prop, NULL, "strip->transform");
447         RNA_def_property_ui_text(prop, "Transform", "");
448
449         prop= RNA_def_property(srna, "use_crop", PROP_BOOLEAN, PROP_NONE);
450         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_CROP);
451         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate crop
452         RNA_def_property_ui_text(prop, "Use Crop", "Crop image before processing.");
453
454         prop= RNA_def_property(srna, "crop", PROP_POINTER, PROP_NONE);
455         RNA_def_property_pointer_sdna(prop, NULL, "strip->crop");
456         RNA_def_property_ui_text(prop, "Crop", "");
457 }
458
459 static void rna_def_filter_sound(StructRNA *srna)
460 {
461         PropertyRNA *prop;
462
463         prop= RNA_def_property(srna, "sound_gain", PROP_FLOAT, PROP_NONE);
464         RNA_def_property_float_sdna(prop, NULL, "level");
465         RNA_def_property_range(prop, -96.0f, 6.0f);
466         RNA_def_property_ui_text(prop, "Sound Gain", "Sound level in dB (0 = full volume).");
467         
468         prop= RNA_def_property(srna, "sound_pan", PROP_FLOAT, PROP_NONE);
469         RNA_def_property_float_sdna(prop, NULL, "pan");
470         RNA_def_property_range(prop, -1.0f, 1.0f);
471         RNA_def_property_ui_text(prop, "Sound Pan", "Stereo sound balance.");
472 }
473
474 static void rna_def_proxy(StructRNA *srna)
475 {
476         PropertyRNA *prop;
477
478         prop= RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE);
479         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY);
480         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate proxy
481         RNA_def_property_ui_text(prop, "Use Proxy", "Use a preview proxy for this strip.");
482
483         prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
484         RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy");
485         RNA_def_property_ui_text(prop, "Proxy", "");
486
487         prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
488         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR);
489         RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data.");
490 }
491
492 static void rna_def_input(StructRNA *srna)
493 {
494         PropertyRNA *prop;
495
496         prop= RNA_def_property(srna, "animation_start_offset", PROP_INT, PROP_UNSIGNED);
497         RNA_def_property_int_sdna(prop, NULL, "anim_startofs");
498         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
499         RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start).");
500         
501         prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED);
502         RNA_def_property_int_sdna(prop, NULL, "anim_endofs");
503         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
504         RNA_def_property_ui_text(prop, "Animation End Offset", "Animation end offset (trim end).");
505 }
506
507 static void rna_def_image(BlenderRNA *brna)
508 {
509         StructRNA *srna;
510         PropertyRNA *prop;
511         
512         srna = RNA_def_struct(brna, "ImageSequence", "Sequence");
513         RNA_def_struct_ui_text(srna, "Image Sequence", "DOC_BROKEN");
514         RNA_def_struct_sdna(srna, "Sequence");
515
516         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
517         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
518         RNA_def_property_ui_text(prop, "Directory", "");
519
520         prop= RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
521         RNA_def_property_collection_sdna(prop, NULL, "strip->stripdata", "strip->len");
522         RNA_def_property_struct_type(prop, "SequenceElement");
523         RNA_def_property_ui_text(prop, "Elements", "");
524
525
526         rna_def_filter_video(srna);
527         rna_def_proxy(srna);
528         rna_def_input(srna);
529 }
530
531 static void rna_def_meta(BlenderRNA *brna)
532 {
533         StructRNA *srna;
534         PropertyRNA *prop;
535         
536         srna = RNA_def_struct(brna, "MetaSequence", "Sequence");
537         RNA_def_struct_ui_text(srna, "Meta Sequence", "DOC_BROKEN");
538         RNA_def_struct_sdna(srna, "Sequence");
539
540         prop = RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
541         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
542         RNA_def_property_struct_type(prop, "Sequence");
543         RNA_def_property_ui_text(prop, "Sequences", "");
544
545         rna_def_filter_video(srna);
546         rna_def_proxy(srna);
547         rna_def_input(srna);
548 }
549
550 static void rna_def_scene(BlenderRNA *brna)
551 {
552         StructRNA *srna;
553         PropertyRNA *prop;
554         
555         srna = RNA_def_struct(brna, "SceneSequence", "Sequence");
556         RNA_def_struct_ui_text(srna, "Scene Sequence", "DOC_BROKEN");
557         RNA_def_struct_sdna(srna, "Sequence");
558
559         prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
560         RNA_def_property_ui_text(prop, "Scene", "Scene that this sequence uses.");
561
562         rna_def_filter_video(srna);
563         rna_def_proxy(srna);
564         rna_def_input(srna);
565 }
566
567 static void rna_def_movie(BlenderRNA *brna)
568 {
569         StructRNA *srna;
570         PropertyRNA *prop;
571         
572         srna = RNA_def_struct(brna, "MovieSequence", "Sequence");
573         RNA_def_struct_ui_text(srna, "Movie Sequence", "DOC_BROKEN");
574         RNA_def_struct_sdna(srna, "Sequence");
575
576         prop= RNA_def_property(srna, "mpeg_preseek", PROP_INT, PROP_NONE);
577         RNA_def_property_int_sdna(prop, NULL, "anim_preseek");
578         RNA_def_property_range(prop, 0, 50);
579         RNA_def_property_ui_text(prop, "MPEG Preseek", "For MPEG movies, preseek this many frames.");
580
581         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
582         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
583         RNA_def_property_ui_text(prop, "Filename", "");
584
585         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
586         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
587         RNA_def_property_ui_text(prop, "Directory", "");
588
589         rna_def_filter_video(srna);
590         rna_def_proxy(srna);
591         rna_def_input(srna);
592 }
593
594 static void rna_def_sound(BlenderRNA *brna)
595 {
596         StructRNA *srna;
597         PropertyRNA *prop;
598         
599         srna = RNA_def_struct(brna, "SoundSequence", "Sequence");
600         RNA_def_struct_ui_text(srna, "Sound Sequence", "DOC_BROKEN");
601         RNA_def_struct_sdna(srna, "Sequence");
602
603         prop= RNA_def_property(srna, "sound", PROP_POINTER, PROP_NONE);
604         RNA_def_property_struct_type(prop, "UnknownType");
605         RNA_def_property_ui_text(prop, "Sound", "Sound datablock used by this sequence (RAM audio only).");
606
607         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
608         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
609         RNA_def_property_ui_text(prop, "Filename", "");
610
611         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
612         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
613         RNA_def_property_ui_text(prop, "Directory", "");
614
615         rna_def_filter_sound(srna);
616         rna_def_input(srna);
617 }
618
619 static void rna_def_effect(BlenderRNA *brna)
620 {
621         StructRNA *srna;
622
623         srna = RNA_def_struct(brna, "EffectSequence", "Sequence");
624         RNA_def_struct_ui_text(srna, "Effect Sequence", "DOC_BROKEN");
625         RNA_def_struct_sdna(srna, "Sequence");
626
627         rna_def_proxy(srna);
628 }
629
630 static void rna_def_plugin(BlenderRNA *brna)
631 {
632         StructRNA *srna;
633         PropertyRNA *prop;
634         
635         srna = RNA_def_struct(brna, "PluginSequence", "EffectSequence");
636         RNA_def_struct_ui_text(srna, "Plugin Sequence", "DOC_BROKEN");
637         RNA_def_struct_sdna_from(srna, "PluginSeq", "plugin");
638
639         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
640         RNA_def_property_string_sdna(prop, NULL, "name");
641         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
642         RNA_def_property_ui_text(prop, "Filename", "");
643         
644         /* plugin properties need custom wrapping code like ID properties */
645 }
646
647 static void rna_def_wipe(BlenderRNA *brna)
648 {
649         StructRNA *srna;
650         PropertyRNA *prop;
651         
652         static const EnumPropertyItem wipe_type_items[]= {
653                 {0, "SINGLE", "Single", ""}, 
654                 {1, "DOUBLE", "Double", ""}, 
655                 /* not used yet {2, "BOX", "Box", ""}, */
656                 /* not used yet {3, "CROSS", "Cross", ""}, */
657                 {4, "IRIS", "Iris", ""}, 
658                 {5, "CLOCK", "Clock", ""},      
659                 {0, NULL, NULL, NULL}
660         };
661
662         static const EnumPropertyItem wipe_direction_items[]= {
663                 {0, "OUT", "Out", ""},
664                 {1, "IN", "In", ""},
665                 {0, NULL, NULL, NULL}
666         };
667
668         srna = RNA_def_struct(brna, "WipeSequence", "EffectSequence");
669         RNA_def_struct_ui_text(srna, "Wipe Sequence", "DOC_BROKEN");
670         RNA_def_struct_sdna_from(srna, "WipeVars", "effectdata");
671
672         prop= RNA_def_property(srna, "blur_width", PROP_FLOAT, PROP_UNSIGNED);
673         RNA_def_property_float_sdna(prop, NULL, "edgeWidth");
674         RNA_def_property_range(prop, 0.0f, 1.0f);
675         RNA_def_property_ui_text(prop, "Blur Width", "Width of the blur edge, in percentage relative to the image size.");
676         
677         prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
678         RNA_def_property_float_sdna(prop, NULL, "angle");
679         RNA_def_property_range(prop, -90.0f, 90.0f);
680         RNA_def_property_ui_text(prop, "Angle", "Edge angle.");
681         
682         prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
683         RNA_def_property_enum_sdna(prop, NULL, "forward");
684         RNA_def_property_enum_items(prop, wipe_direction_items);
685         RNA_def_property_ui_text(prop, "Direction", "Wipe direction.");
686         
687         prop= RNA_def_property(srna, "transition_type", PROP_ENUM, PROP_NONE);
688         RNA_def_property_enum_sdna(prop, NULL, "wipetype");
689         RNA_def_property_enum_items(prop, wipe_type_items);
690         RNA_def_property_ui_text(prop, "Transition Type", "");
691 }
692
693 static void rna_def_glow(BlenderRNA *brna)
694 {
695         StructRNA *srna;
696         PropertyRNA *prop;
697         
698         srna = RNA_def_struct(brna, "GlowSequence", "EffectSequence");
699         RNA_def_struct_ui_text(srna, "Glow Sequence", "DOC_BROKEN");
700         RNA_def_struct_sdna_from(srna, "GlowVars", "effectdata");
701         
702         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
703         RNA_def_property_float_sdna(prop, NULL, "fMini");
704         RNA_def_property_range(prop, 0.0f, 1.0f);
705         RNA_def_property_ui_text(prop, "Threshold", "Minimum intensity to trigger a glow");
706         
707         prop= RNA_def_property(srna, "clamp", PROP_FLOAT, PROP_NONE);
708         RNA_def_property_float_sdna(prop, NULL, "fClamp");
709         RNA_def_property_range(prop, 0.0f, 1.0f);
710         RNA_def_property_ui_text(prop, "Clamp", "rightness limit of intensity.");
711         
712         prop= RNA_def_property(srna, "boost_factor", PROP_FLOAT, PROP_NONE);
713         RNA_def_property_float_sdna(prop, NULL, "fBoost");
714         RNA_def_property_range(prop, 0.0f, 10.0f);
715         RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier.");
716         
717         prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE);
718         RNA_def_property_float_sdna(prop, NULL, "dDist");
719         RNA_def_property_range(prop, 0.5f, 20.0f);
720         RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect.");
721         
722         prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
723         RNA_def_property_int_sdna(prop, NULL, "dQuality");
724         RNA_def_property_range(prop, 1, 5);
725         RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect.");
726         
727         prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE);
728         RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0);
729         RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only.");
730 }
731
732 static void rna_def_transform(BlenderRNA *brna)
733 {
734         StructRNA *srna;
735         PropertyRNA *prop;
736
737         static const EnumPropertyItem interpolation_items[]= {
738                 {0, "NONE", "None", "No interpolation."},
739                 {1, "BILINEAR", "Bilinear", "Bilinear interpolation."},
740                 {2, "BICUBIC", "Bicubic", "Bicubic interpolation."},
741                 {0, NULL, NULL, NULL}
742         };
743
744         static const EnumPropertyItem translation_unit_items[]= {
745                 {0, "PIXELS", "Pixels", ""},
746                 {1, "PERCENT", "Percent", ""},
747                 {0, NULL, NULL, NULL}
748         };
749
750         srna = RNA_def_struct(brna, "TransformSequence", "EffectSequence");
751         RNA_def_struct_ui_text(srna, "Transform Sequence", "DOC_BROKEN");
752         RNA_def_struct_sdna_from(srna, "TransformVars", "effectdata");
753         
754         prop= RNA_def_property(srna, "scale_start_x", PROP_FLOAT, PROP_UNSIGNED);
755         RNA_def_property_float_sdna(prop, NULL, "ScalexIni");
756         RNA_def_property_ui_text(prop, "Scale Start X", "");
757         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
758         
759         prop= RNA_def_property(srna, "scale_start_y", PROP_FLOAT, PROP_UNSIGNED);
760         RNA_def_property_float_sdna(prop, NULL, "ScaleyIni");
761         RNA_def_property_ui_text(prop, "Scale Start Y", "");
762         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
763
764         prop= RNA_def_property(srna, "scale_end_x", PROP_FLOAT, PROP_UNSIGNED);
765         RNA_def_property_float_sdna(prop, NULL, "ScalexFin");
766         RNA_def_property_ui_text(prop, "Scale End X", "");
767         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
768         
769         prop= RNA_def_property(srna, "scale_end_y", PROP_FLOAT, PROP_UNSIGNED);
770         RNA_def_property_float_sdna(prop, NULL, "ScaleyFin");
771         RNA_def_property_ui_text(prop, "Scale End Y", "");
772         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
773         
774         prop= RNA_def_property(srna, "translate_start_x", PROP_FLOAT, PROP_NONE);
775         RNA_def_property_float_sdna(prop, NULL, "xIni");
776         RNA_def_property_ui_text(prop, "Translate Start X", "");
777         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
778
779         prop= RNA_def_property(srna, "translate_start_y", PROP_FLOAT, PROP_NONE);
780         RNA_def_property_float_sdna(prop, NULL, "yIni");
781         RNA_def_property_ui_text(prop, "Translate Start Y", "");
782         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
783
784         prop= RNA_def_property(srna, "translate_end_x", PROP_FLOAT, PROP_NONE);
785         RNA_def_property_float_sdna(prop, NULL, "xFin");
786         RNA_def_property_ui_text(prop, "Translate End X", "");
787         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
788
789         prop= RNA_def_property(srna, "translate_end_y", PROP_FLOAT, PROP_NONE);
790         RNA_def_property_float_sdna(prop, NULL, "yFin");
791         RNA_def_property_ui_text(prop, "Translate End Y", "");
792         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
793         
794         prop= RNA_def_property(srna, "rotation_start", PROP_FLOAT, PROP_NONE);
795         RNA_def_property_float_sdna(prop, NULL, "rotIni");
796         RNA_def_property_range(prop, 0.0f, 360.0f);
797         RNA_def_property_ui_text(prop, "Rotation Start", "");
798         
799         prop= RNA_def_property(srna, "rotation_end", PROP_FLOAT, PROP_NONE);
800         RNA_def_property_float_sdna(prop, NULL, "rotFin");
801         RNA_def_property_range(prop, 0.0f, 360.0f);
802         RNA_def_property_ui_text(prop, "Rotation End", "");
803         
804         prop= RNA_def_property(srna, "translation_unit", PROP_ENUM, PROP_NONE);
805         RNA_def_property_enum_sdna(prop, NULL, "percent");
806         RNA_def_property_enum_items(prop, translation_unit_items);
807         RNA_def_property_ui_text(prop, "Translation Unit", "");
808         
809         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
810         RNA_def_property_enum_items(prop, interpolation_items);
811         RNA_def_property_ui_text(prop, "Interpolation", "");
812 }
813
814 static void rna_def_solid_color(BlenderRNA *brna)
815 {
816         StructRNA *srna;
817         PropertyRNA *prop;
818         
819         srna = RNA_def_struct(brna, "ColorSequence", "EffectSequence");
820         RNA_def_struct_ui_text(srna, "Color Sequence", "DOC_BROKEN");
821         RNA_def_struct_sdna_from(srna, "SolidColorVars", "effectdata");
822         
823         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
824         RNA_def_property_float_sdna(prop, NULL, "col");
825         RNA_def_property_ui_text(prop, "Color", "");
826 }
827
828 static void rna_def_speed_control(BlenderRNA *brna)
829 {
830         StructRNA *srna;
831         PropertyRNA *prop;
832
833         srna = RNA_def_struct(brna, "SpeedControlSequence", "EffectSequence");
834         RNA_def_struct_ui_text(srna, "SpeedControl Sequence", "DOC_BROKEN");
835         RNA_def_struct_sdna_from(srna, "SpeedControlVars", "effectdata");
836         
837         prop= RNA_def_property(srna, "global_speed", PROP_FLOAT, PROP_UNSIGNED);
838         RNA_def_property_float_sdna(prop, NULL, "globalSpeed");
839         RNA_def_property_ui_text(prop, "Global Speed", "");
840         RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0);
841         
842         prop= RNA_def_property(srna, "ipo_velocity", PROP_BOOLEAN, PROP_NONE);
843         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE);
844         RNA_def_property_ui_text(prop, "IPO Velocity", "Interpret the IPO value as a velocity instead of a frame number.");
845
846         prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE);
847         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND);
848         RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result.");
849
850         prop= RNA_def_property(srna, "ipo_compress_y", PROP_BOOLEAN, PROP_NONE);
851         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y);
852         RNA_def_property_ui_text(prop, "IPO Compress Y", "Scale IPO value to get the target frame number, IPO value runs from 0.0 to 1.0.");
853 }
854
855 void RNA_def_sequence(BlenderRNA *brna)
856 {
857         rna_def_strip_element(brna);
858         rna_def_strip_proxy(brna);
859         rna_def_strip_color_balance(brna);
860         rna_def_strip_crop(brna);
861         rna_def_strip_transform(brna);
862
863         rna_def_sequence(brna);
864         rna_def_editor(brna);
865
866         rna_def_image(brna);
867         rna_def_meta(brna);
868         rna_def_scene(brna);
869         rna_def_movie(brna);
870         rna_def_sound(brna);
871         rna_def_effect(brna);
872         rna_def_plugin(brna);
873         rna_def_wipe(brna);
874         rna_def_glow(brna);
875         rna_def_transform(brna);
876         rna_def_solid_color(brna);
877         rna_def_speed_control(brna);
878 }
879
880 #endif
881