more sequence -> sequencer rename, also made sequencer swap strip update effects...
[blender-staging.git] / source / blender / makesrna / intern / rna_sequencer.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_access.h"
29 #include "RNA_define.h"
30 #include "RNA_types.h"
31
32 #include "rna_internal.h"
33
34 #include "DNA_object_types.h"
35 #include "DNA_scene_types.h"
36 #include "DNA_sequence_types.h"
37
38 #include "BKE_sequencer.h"
39
40 #include "MEM_guardedalloc.h"
41
42 #include "WM_types.h"
43
44 #ifdef RNA_RUNTIME
45
46 /* build a temp referene to the parent */
47 static void meta_tmp_ref(Sequence *seq_par, Sequence *seq)
48 {
49         for (; seq; seq= seq->next) {
50                 seq->tmp= seq_par;
51                 if(seq->type == SEQ_META) {
52                         meta_tmp_ref(seq, seq->seqbase.first);
53                 }
54         }
55 }
56
57 static void rna_SequenceEditor_sequences_all_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
58 {
59         Scene *sce= (Scene*)ptr->id.data;
60         Editing *ed= seq_give_editing(sce, FALSE);
61
62         meta_tmp_ref(NULL, ed->seqbase.first);
63
64         rna_iterator_listbase_begin(iter, &ed->seqbase, NULL);
65 }
66
67 static void rna_SequenceEditor_sequences_all_next(CollectionPropertyIterator *iter)
68 {
69         ListBaseIterator *internal= iter->internal;
70         Sequence *seq= (Sequence*)internal->link;
71
72         if(seq->seqbase.first)
73                 internal->link= (Link*)seq->seqbase.first;
74         else if(seq->next)
75                 internal->link= (Link*)seq->next;
76         else {
77                 internal->link= NULL;
78
79                 do {
80                         seq= seq->tmp; // XXX - seq's dont reference their parents!
81                         if(seq && seq->next) {
82                                 internal->link= (Link*)seq->next;
83                                 break;
84                         }
85                 } while(seq);
86         }
87
88         iter->valid= (internal->link != NULL);
89 }
90
91 static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
92 {
93         Sequence *seq= (Sequence*)ptr->data;
94         Scene *sce= (Scene*)ptr->id.data;
95         Editing *ed= seq_give_editing(sce, FALSE);
96         
97         seq->start= value;
98         calc_sequence_disp(seq);
99         
100         if( seq_test_overlap(ed->seqbasep, seq) ) {
101                 shuffle_seq(ed->seqbasep, seq);
102         }
103         sort_seq(sce);
104 }
105
106 static void rna_Sequence_length_set(PointerRNA *ptr, int value)
107 {
108         Sequence *seq= (Sequence*)ptr->data;
109         Scene *sce= (Scene*)ptr->id.data;
110         Editing *ed= seq_give_editing(sce, FALSE);
111         
112         seq_tx_set_final_right(seq, seq->start+value);
113         calc_sequence_disp(seq);
114         
115         if( seq_test_overlap(ed->seqbasep, seq) ) {
116                 shuffle_seq(ed->seqbasep, seq);
117         }
118         sort_seq(sce);
119 }
120
121 static int rna_Sequence_length_get(PointerRNA *ptr)
122 {
123         Sequence *seq= (Sequence*)ptr->data;
124         return seq_tx_get_final_right(seq, 0)-seq_tx_get_final_left(seq, 0);
125 }
126
127 static void rna_Sequence_channel_set(PointerRNA *ptr, int value)
128 {
129         Sequence *seq= (Sequence*)ptr->data;
130         Scene *sce= (Scene*)ptr->id.data;
131         Editing *ed= seq_give_editing(sce, FALSE);
132         
133         seq->machine= value;
134         
135         if( seq_test_overlap(ed->seqbasep, seq) ) {
136                 shuffle_seq(ed->seqbasep, seq);
137         }
138         sort_seq(sce);
139 }
140
141 /* properties that need to allocate structs */
142 static void rna_Sequence_use_color_balance_set(PointerRNA *ptr, int value)
143 {
144         Sequence *seq= (Sequence*)ptr->data;
145         int c;
146         
147         if(value) {
148                 seq->flag |= SEQ_USE_COLOR_BALANCE;
149                 if(seq->strip->color_balance == NULL) {
150                         seq->strip->color_balance = MEM_callocN(sizeof(struct StripColorBalance), "StripColorBalance");
151                         for (c=0; c<3; c++) {
152                                 seq->strip->color_balance->lift[c] = 1.0f;
153                                 seq->strip->color_balance->gamma[c] = 1.0f;
154                                 seq->strip->color_balance->gain[c] = 1.0f;
155                         }
156                 }
157         } else {
158                 seq->flag ^= SEQ_USE_COLOR_BALANCE;
159         }
160 }
161
162 static void rna_Sequence_use_proxy_set(PointerRNA *ptr, int value)
163 {
164         Sequence *seq= (Sequence*)ptr->data;
165         if(value) {
166                 seq->flag |= SEQ_USE_PROXY;
167                 if(seq->strip->proxy == NULL) {
168                         seq->strip->proxy = MEM_callocN(sizeof(struct StripProxy), "StripProxy");
169                 }
170         } else {
171                 seq->flag ^= SEQ_USE_PROXY;
172         }
173 }
174
175 static void rna_Sequence_use_translation_set(PointerRNA *ptr, int value)
176 {
177         Sequence *seq= (Sequence*)ptr->data;
178         if(value) {
179                 seq->flag |= SEQ_USE_TRANSFORM;
180                 if(seq->strip->transform == NULL) {
181                         seq->strip->transform = MEM_callocN(sizeof(struct StripTransform), "StripTransform");
182                 }
183         } else {
184                 seq->flag ^= SEQ_USE_TRANSFORM;
185         }
186 }
187
188 static void rna_Sequence_use_crop_set(PointerRNA *ptr, int value)
189 {
190         Sequence *seq= (Sequence*)ptr->data;
191         if(value) {
192                 seq->flag |= SEQ_USE_CROP;
193                 if(seq->strip->crop == NULL) {
194                         seq->strip->crop = MEM_callocN(sizeof(struct StripCrop), "StripCrop");
195                 }
196         } else {
197                 seq->flag ^= SEQ_USE_CROP;
198         }
199 }
200 /* name functions that ignore the first two characters */
201 static void rna_Sequence_name_get(PointerRNA *ptr, char *value)
202 {
203         Sequence *seq= (Sequence*)ptr->data;
204         BLI_strncpy(value, seq->name+2, sizeof(seq->name)-2);
205 }
206
207 static int rna_Sequence_name_length(PointerRNA *ptr)
208 {
209         Sequence *seq= (Sequence*)ptr->data;
210         return strlen(seq->name+2);
211 }
212
213 static void rna_Sequence_name_set(PointerRNA *ptr, const char *value)
214 {
215         Scene *sce= (Scene*)ptr->id.data;
216         Sequence *seq= (Sequence*)ptr->data;
217         BLI_strncpy(seq->name+2, value, sizeof(seq->name)-2);
218         seqUniqueName(&sce->ed->seqbase, seq);
219 }
220
221 static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr)
222 {
223         Sequence *seq= (Sequence*)ptr->data;
224
225         switch(seq->type) {
226                 case SEQ_IMAGE:
227                         return &RNA_ImageSequence;
228                 case SEQ_META:
229                         return &RNA_MetaSequence;
230                 case SEQ_SCENE:
231                         return &RNA_SceneSequence;
232                 case SEQ_MOVIE:
233                         return &RNA_MovieSequence;
234                 case SEQ_SOUND:
235                         return &RNA_SoundSequence;
236                 case SEQ_CROSS:
237                 case SEQ_ADD:
238                 case SEQ_SUB:
239                 case SEQ_ALPHAOVER:
240                 case SEQ_ALPHAUNDER:
241                 case SEQ_GAMCROSS:
242                 case SEQ_MUL:
243                 case SEQ_OVERDROP:
244                         return &RNA_EffectSequence;
245                 case SEQ_PLUGIN:
246                         return &RNA_PluginSequence;
247                 case SEQ_WIPE:
248                         return &RNA_WipeSequence;
249                 case SEQ_GLOW:
250                         return &RNA_GlowSequence;
251                 case SEQ_TRANSFORM:
252                         return &RNA_TransformSequence;
253                 case SEQ_COLOR:
254                         return &RNA_ColorSequence;
255                 case SEQ_SPEED:
256                         return &RNA_SpeedControlSequence;
257                 default:
258                         return &RNA_Sequence;
259         }
260 }
261
262 static char *rna_Sequence_path(PointerRNA *ptr)
263 {
264         Sequence *seq= (Sequence*)ptr->data;
265         
266         /* sequencer data comes from scene... 
267          * TODO: would be nice to make SequenceEditor data a datablock of its own (for shorter paths)
268          */
269         if (seq->name+2)
270                 return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", seq->name+2);
271         else
272                 return BLI_strdup("");
273 }
274
275 static PointerRNA rna_SequenceEditor_meta_stack_get(CollectionPropertyIterator *iter)
276 {
277         ListBaseIterator *internal= iter->internal;
278         MetaStack *ms= (MetaStack*)internal->link;
279
280         return rna_pointer_inherit_refine(&iter->parent, &RNA_Sequence, ms->parseq);
281 }
282
283 static void rna_MovieSequence_filename_set(PointerRNA *ptr, const char *value)
284 {
285         Sequence *seq= (Sequence*)(ptr->data);
286         char dir[FILE_MAX], name[FILE_MAX];
287
288         BLI_split_dirfile_basic(value, dir, name);
289         BLI_strncpy(seq->strip->dir, dir, sizeof(seq->strip->dir));
290         BLI_strncpy(seq->strip->stripdata->name, name, sizeof(seq->strip->stripdata->name));
291 }
292
293 static void rna_SoundSequence_filename_set(PointerRNA *ptr, const char *value)
294 {
295         Sequence *seq= (Sequence*)(ptr->data);
296         char dir[FILE_MAX], name[FILE_MAX];
297
298         BLI_split_dirfile_basic(value, dir, name);
299         BLI_strncpy(seq->strip->dir, dir, sizeof(seq->strip->dir));
300         BLI_strncpy(seq->strip->stripdata->name, name, sizeof(seq->strip->stripdata->name));
301 }
302
303 static void rna_SequenceElement_filename_set(PointerRNA *ptr, const char *value)
304 {
305         StripElem *elem= (StripElem*)(ptr->data);
306         char name[FILE_MAX];
307
308         BLI_split_dirfile_basic(value, NULL, name);
309         BLI_strncpy(elem->name, name, sizeof(elem->name));
310 }
311
312 static void rna_Sequence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
313 {
314         Editing *ed= seq_give_editing(scene, FALSE);
315
316         free_imbuf_seq(scene, &ed->seqbase, FALSE);
317
318         if(RNA_struct_is_a(ptr->type, &RNA_SoundSequence))
319                 seq_update_sound(ptr->data);
320 }
321
322 static void rna_Sequence_mute_update(Main *bmain, Scene *scene, PointerRNA *ptr)
323 {
324         Editing *ed= seq_give_editing(scene, FALSE);
325
326         seq_update_muting(ed);
327         rna_Sequence_update(bmain, scene, ptr);
328 }
329
330 #else
331
332 static void rna_def_strip_element(BlenderRNA *brna)
333 {
334         StructRNA *srna;
335         PropertyRNA *prop;
336         
337         srna = RNA_def_struct(brna, "SequenceElement", NULL);
338         RNA_def_struct_ui_text(srna, "Sequence Element", "Sequence strip data for a single frame.");
339         RNA_def_struct_sdna(srna, "StripElem");
340         
341         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
342         RNA_def_property_string_sdna(prop, NULL, "name");
343         RNA_def_property_ui_text(prop, "Filename", "");
344         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SequenceElement_filename_set");
345         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
346 }
347
348 static void rna_def_strip_crop(BlenderRNA *brna)
349 {
350         StructRNA *srna;
351         PropertyRNA *prop;
352         
353         srna = RNA_def_struct(brna, "SequenceCrop", NULL);
354         RNA_def_struct_ui_text(srna, "Sequence Crop", "Cropping parameters for a sequence strip.");
355         RNA_def_struct_sdna(srna, "StripCrop");
356
357         prop= RNA_def_property(srna, "top", PROP_INT, PROP_UNSIGNED);
358         RNA_def_property_ui_text(prop, "Top", "");
359         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
360         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
361         
362         prop= RNA_def_property(srna, "bottom", PROP_INT, PROP_UNSIGNED);
363         RNA_def_property_ui_text(prop, "Bottom", "");
364         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
365         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
366         
367         prop= RNA_def_property(srna, "left", PROP_INT, PROP_UNSIGNED);
368         RNA_def_property_ui_text(prop, "Left", "");
369         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
370         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
371
372         prop= RNA_def_property(srna, "right", PROP_INT, PROP_UNSIGNED);
373         RNA_def_property_ui_text(prop, "Right", "");
374         RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
375         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
376 }
377
378 static void rna_def_strip_transform(BlenderRNA *brna)
379 {
380         StructRNA *srna;
381         PropertyRNA *prop;
382         
383         srna = RNA_def_struct(brna, "SequenceTransform", NULL);
384         RNA_def_struct_ui_text(srna, "Sequence Transform", "Transform parameters for a sequence strip.");
385         RNA_def_struct_sdna(srna, "StripTransform");
386
387         prop= RNA_def_property(srna, "offset_x", PROP_INT, PROP_NONE);
388         RNA_def_property_int_sdna(prop, NULL, "xofs");
389         RNA_def_property_ui_text(prop, "Offset Y", "");
390         RNA_def_property_ui_range(prop, -4096, 4096, 1, 0);
391         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
392
393         prop= RNA_def_property(srna, "offset_y", PROP_INT, PROP_NONE);
394         RNA_def_property_int_sdna(prop, NULL, "yofs");
395         RNA_def_property_ui_text(prop, "Offset Y", "");
396         RNA_def_property_ui_range(prop, -4096, 4096, 1, 0);
397         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
398 }
399
400 static void rna_def_strip_proxy(BlenderRNA *brna)
401 {
402         StructRNA *srna;
403         PropertyRNA *prop;
404         
405         srna = RNA_def_struct(brna, "SequenceProxy", NULL);
406         RNA_def_struct_ui_text(srna, "Sequence Proxy", "Proxy parameters for a sequence strip.");
407         RNA_def_struct_sdna(srna, "StripProxy");
408         
409         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
410         RNA_def_property_string_sdna(prop, NULL, "dir");
411         RNA_def_property_ui_text(prop, "Directory", "Location to story the proxy file");
412         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
413         
414         prop= RNA_def_property(srna, "file", PROP_STRING, PROP_DIRPATH);
415         RNA_def_property_string_sdna(prop, NULL, "file");
416         RNA_def_property_ui_text(prop, "File", "Proxy file name");
417         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
418 }
419
420 static void rna_def_strip_color_balance(BlenderRNA *brna)
421 {
422         StructRNA *srna;
423         PropertyRNA *prop;
424
425         srna = RNA_def_struct(brna, "SequenceColorBalance", NULL);
426         RNA_def_struct_ui_text(srna, "Sequence Color Balance", "Color balance parameters for a sequence strip.");
427         RNA_def_struct_sdna(srna, "StripColorBalance");
428
429         prop= RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR);
430         RNA_def_property_ui_text(prop, "Lift", "Color balance lift (shadows).");
431         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
432         
433         prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR);
434         RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones).");
435         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
436         
437         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR);
438         RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights).");
439         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
440         
441         prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE);
442         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN);
443         RNA_def_property_ui_text(prop, "Inverse Gain", "");
444         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
445
446         prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE);
447         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA);
448         RNA_def_property_ui_text(prop, "Inverse Gamma", "");
449         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
450
451         prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE);
452         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT);
453         RNA_def_property_ui_text(prop, "Inverse Lift", "");
454         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
455         
456         /* not yet used
457         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
458         RNA_def_property_range(prop, 0.0f, 1.0f);
459         RNA_def_property_ui_text(prop, "Exposure", "");
460         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
461         
462         prop= RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
463         RNA_def_property_range(prop, 0.0f, 1.0f);
464         RNA_def_property_ui_text(prop, "Saturation", "");
465         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); */
466 }
467
468 static void rna_def_sequence(BlenderRNA *brna)
469 {
470         StructRNA *srna;
471         PropertyRNA *prop;
472         FunctionRNA *func;
473
474         static const EnumPropertyItem seq_type_items[]= {
475                 {SEQ_IMAGE, "IMAGE", 0, "Image", ""}, 
476                 {SEQ_META, "META", 0, "Meta", ""}, 
477                 {SEQ_SCENE, "SCENE", 0, "Scene", ""}, 
478                 {SEQ_MOVIE, "MOVIE", 0, "Movie", ""}, 
479                 {SEQ_SOUND, "SOUND", 0, "Sound", ""},
480                 {SEQ_CROSS, "CROSS", 0, "Cross", ""}, 
481                 {SEQ_ADD, "ADD", 0, "Add", ""}, 
482                 {SEQ_SUB, "SUBTRACT", 0, "Subtract", ""}, 
483                 {SEQ_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", ""}, 
484                 {SEQ_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", ""}, 
485                 {SEQ_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", ""}, 
486                 {SEQ_MUL, "MULTIPLY", 0, "Multiply", ""}, 
487                 {SEQ_OVERDROP, "OVER_DROP", 0, "Over Drop", ""}, 
488                 {SEQ_PLUGIN, "PLUGIN", 0, "plugin", ""}, 
489                 {SEQ_WIPE, "WIPE", 0, "Wipe", ""}, 
490                 {SEQ_GLOW, "GLOW", 0, "Glow", ""}, 
491                 {SEQ_TRANSFORM, "TRANSFORM", 0, "Transform", ""}, 
492                 {SEQ_COLOR, "COLOR", 0, "Color", ""}, 
493                 {SEQ_SPEED, "SPEED", 0, "Speed", ""}, 
494                 {0, NULL, 0, NULL, NULL}};
495
496         static const EnumPropertyItem blend_mode_items[]= {
497                 {SEQ_BLEND_REPLACE, "REPLACE", 0, "Replace", ""}, 
498                 {SEQ_CROSS, "CROSS", 0, "Cross", ""}, 
499                 {SEQ_ADD, "ADD", 0, "Add", ""}, 
500                 {SEQ_SUB, "SUBTRACT", 0, "Subtract", ""}, 
501                 {SEQ_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", ""}, 
502                 {SEQ_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", ""}, 
503                 {SEQ_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", ""}, 
504                 {SEQ_MUL, "MULTIPLY", 0, "Multiply", ""}, 
505                 {SEQ_OVERDROP, "OVER_DROP", 0, "Over Drop", ""}, 
506                 {0, NULL, 0, NULL, NULL}};
507         
508         srna = RNA_def_struct(brna, "Sequence", NULL);
509         RNA_def_struct_ui_text(srna, "Sequence", "Sequence strip in the sequence editor.");
510         RNA_def_struct_refine_func(srna, "rna_Sequence_refine");
511         RNA_def_struct_path_func(srna, "rna_Sequence_path");
512
513         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
514         RNA_def_property_string_funcs(prop, "rna_Sequence_name_get", "rna_Sequence_name_length", "rna_Sequence_name_set");
515         RNA_def_property_string_maxlength(prop, sizeof(((Sequence*)NULL)->name)-2);
516         RNA_def_property_ui_text(prop, "Name", "");
517         RNA_def_struct_name_property(srna, prop);
518         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL);
519
520         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
521         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
522         RNA_def_property_enum_items(prop, seq_type_items);
523         RNA_def_property_ui_text(prop, "Type", "");
524         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
525
526         //prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
527         //RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by this sequence.");
528
529         /* flags */
530
531         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
532         RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
533         RNA_def_property_ui_text(prop, "Selected", "");
534         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL);
535
536         prop= RNA_def_property(srna, "left_handle_selected", PROP_BOOLEAN, PROP_NONE);
537         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LEFTSEL);
538         RNA_def_property_ui_text(prop, "Left Handle Selected", "");
539         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL);
540
541         prop= RNA_def_property(srna, "right_handle_selected", PROP_BOOLEAN, PROP_NONE);
542         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_RIGHTSEL);
543         RNA_def_property_ui_text(prop, "Right Handle Selected", "");
544         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER_SELECT, NULL);
545
546         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
547         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MUTE);
548         RNA_def_property_ui_text(prop, "Mute", "");
549         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_mute_update");
550
551         prop= RNA_def_property(srna, "frame_locked", PROP_BOOLEAN, PROP_NONE);
552         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_IPO_FRAME_LOCKED);
553         RNA_def_property_ui_text(prop, "Frame Locked", "Lock the animation curve to the global frame counter.");
554         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
555
556         prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
557         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LOCK);
558         RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it can't be transformed.");
559         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL);
560
561         /* strip positioning */
562
563         prop= RNA_def_property(srna, "length", PROP_INT, PROP_TIME);
564         RNA_def_property_int_sdna(prop, NULL, "len");
565         RNA_def_property_range(prop, 1, MAXFRAME);
566         RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
567         RNA_def_property_int_funcs(prop, "rna_Sequence_length_get", "rna_Sequence_length_set",NULL);
568         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
569         
570         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_TIME);
571         RNA_def_property_int_sdna(prop, NULL, "start");
572         RNA_def_property_ui_text(prop, "Start Frame", "");
573         RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_set",NULL); // overlap tests and calc_seq_disp
574         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
575         
576         prop= RNA_def_property(srna, "start_offset", PROP_INT, PROP_TIME);
577         RNA_def_property_int_sdna(prop, NULL, "startofs");
578         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests
579         RNA_def_property_ui_text(prop, "Start Offset", "");
580         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
581         
582         prop= RNA_def_property(srna, "end_offset", PROP_INT, PROP_TIME);
583         RNA_def_property_int_sdna(prop, NULL, "endofs");
584         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests
585         RNA_def_property_ui_text(prop, "End offset", "");
586         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
587         
588         prop= RNA_def_property(srna, "start_still", PROP_INT, PROP_TIME);
589         RNA_def_property_int_sdna(prop, NULL, "startstill");
590         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests
591         RNA_def_property_range(prop, 0, MAXFRAME);
592         RNA_def_property_ui_text(prop, "Start Still", "");
593         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
594         
595         prop= RNA_def_property(srna, "end_still", PROP_INT, PROP_TIME);
596         RNA_def_property_int_sdna(prop, NULL, "endstill");
597         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap tests
598         RNA_def_property_range(prop, 0, MAXFRAME);
599         RNA_def_property_ui_text(prop, "End Still", "");
600         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
601         
602         prop= RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED);
603         RNA_def_property_int_sdna(prop, NULL, "machine");
604         RNA_def_property_range(prop, 0, MAXSEQ-1);
605         RNA_def_property_ui_text(prop, "Channel", "Y position of the sequence strip.");
606         RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_channel_set",NULL); // overlap test
607         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
608
609         /* blending */
610
611         prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
612         RNA_def_property_enum_items(prop, blend_mode_items);
613         RNA_def_property_ui_text(prop, "Blend Mode", "");
614         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
615         
616         prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_NONE);
617         RNA_def_property_range(prop, 0.0f, 100.0f);
618         RNA_def_property_ui_text(prop, "Blend Opacity", "");
619         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
620         
621         prop= RNA_def_property(srna, "effect_fader", PROP_FLOAT, PROP_NONE);
622         RNA_def_property_range(prop, 0.0f, 1.0f);
623         RNA_def_property_float_sdna(prop, NULL, "effect_fader");
624         RNA_def_property_ui_text(prop, "Effect fader position", "");
625         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
626
627         prop= RNA_def_property(srna, "use_effect_default_fade", PROP_BOOLEAN, PROP_NONE);
628         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_EFFECT_DEFAULT_FADE);
629         RNA_def_property_ui_text(prop, "Use Default Fade", "Fade effect using the builtin default (usually make transition as long as effect strip).");
630         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
631         
632
633         prop= RNA_def_property(srna, "speed_fader", PROP_FLOAT, PROP_NONE);
634         RNA_def_property_float_sdna(prop, NULL, "speed_fader");
635         RNA_def_property_ui_text(prop, "Speed effect fader position", "");
636         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
637
638         /* functions */
639         func= RNA_def_function(srna, "getStripElem", "give_stripelem");
640         RNA_def_function_ui_description(func, "Return the strip element from a given frame or None.");
641         prop= RNA_def_int(func, "frame", 0, -MAXFRAME, MAXFRAME, "Frame", "The frame to get the strip element from", -MAXFRAME, MAXFRAME);
642         RNA_def_property_flag(prop, PROP_REQUIRED);
643         RNA_def_function_return(func, RNA_def_pointer(func, "elem", "SequenceElement", "", "strip element of the current frame"));
644 }
645
646 static void rna_def_editor(BlenderRNA *brna)
647 {
648         StructRNA *srna;
649         PropertyRNA *prop;
650         
651         srna = RNA_def_struct(brna, "SequenceEditor", NULL);
652         RNA_def_struct_ui_text(srna, "Sequence Editor", "Sequence editing data for a Scene datablock.");
653         RNA_def_struct_ui_icon(srna, ICON_SEQUENCE);
654         RNA_def_struct_sdna(srna, "Editing");
655
656         prop= RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
657         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
658         RNA_def_property_struct_type(prop, "Sequence");
659         RNA_def_property_ui_text(prop, "Sequences", "");
660
661         prop= RNA_def_property(srna, "sequences_all", PROP_COLLECTION, PROP_NONE);
662         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
663         RNA_def_property_struct_type(prop, "Sequence");
664         RNA_def_property_ui_text(prop, "Sequences", "");
665         RNA_def_property_collection_funcs(prop, "rna_SequenceEditor_sequences_all_begin", "rna_SequenceEditor_sequences_all_next", 0, 0, 0, 0, 0);
666
667         prop= RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE);
668         RNA_def_property_collection_sdna(prop, NULL, "metastack", NULL);
669         RNA_def_property_struct_type(prop, "Sequence");
670         RNA_def_property_ui_text(prop, "Meta Stack", "Meta strip stack, last is currently edited meta strip.");
671         RNA_def_property_collection_funcs(prop, 0, 0, 0, "rna_SequenceEditor_meta_stack_get", 0, 0, 0);
672         
673         prop= RNA_def_property(srna, "active_strip", PROP_POINTER, PROP_NONE);
674         RNA_def_property_pointer_sdna(prop, NULL, "act_seq");
675         RNA_def_property_ui_text(prop, "Active Strip", "Sequencers active strip");
676 }
677
678 static void rna_def_filter_video(StructRNA *srna)
679 {
680         PropertyRNA *prop;
681
682         prop= RNA_def_property(srna, "de_interlace", PROP_BOOLEAN, PROP_NONE);
683         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FILTERY);
684         RNA_def_property_ui_text(prop, "De-Interlace", "For video movies to remove fields.");
685
686         prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
687         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL);
688         RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha.");
689         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL);
690
691         prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE);
692         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX);
693         RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis.");
694         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
695
696         prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE);
697         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY);
698         RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis.");
699         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
700
701         prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE);
702         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT);
703         RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data.");
704         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
705
706         prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
707         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES);
708         RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order.");
709         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
710
711         prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED);
712         RNA_def_property_float_sdna(prop, NULL, "mul");
713         RNA_def_property_range(prop, 0.0f, 20.0f);
714         RNA_def_property_ui_text(prop, "Multiply Colors", "");
715         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
716
717         prop= RNA_def_property(srna, "strobe", PROP_FLOAT, PROP_NONE);
718         RNA_def_property_range(prop, 1.0f, 30.0f);
719         RNA_def_property_ui_text(prop, "Strobe", "Only display every nth frame.");
720         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
721
722         prop= RNA_def_property(srna, "use_color_balance", PROP_BOOLEAN, PROP_NONE);
723         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_COLOR_BALANCE);
724         RNA_def_property_ui_text(prop, "Use Color Balance", "(3-Way color correction) on input.");
725         RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_color_balance_set");
726         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
727
728         prop= RNA_def_property(srna, "color_balance", PROP_POINTER, PROP_NONE);
729         RNA_def_property_pointer_sdna(prop, NULL, "strip->color_balance");
730         RNA_def_property_ui_text(prop, "Color Balance", "");
731
732         prop= RNA_def_property(srna, "use_translation", PROP_BOOLEAN, PROP_NONE);
733         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_TRANSFORM);
734         RNA_def_property_ui_text(prop, "Use Translation", "Translate image before processing.");
735         RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_translation_set");
736         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
737
738         prop= RNA_def_property(srna, "transform", PROP_POINTER, PROP_NONE);
739         RNA_def_property_pointer_sdna(prop, NULL, "strip->transform");
740         RNA_def_property_ui_text(prop, "Transform", "");
741
742         prop= RNA_def_property(srna, "use_crop", PROP_BOOLEAN, PROP_NONE);
743         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_CROP);
744         RNA_def_property_ui_text(prop, "Use Crop", "Crop image before processing.");
745         RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_crop_set");
746         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
747
748         prop= RNA_def_property(srna, "crop", PROP_POINTER, PROP_NONE);
749         RNA_def_property_pointer_sdna(prop, NULL, "strip->crop");
750         RNA_def_property_ui_text(prop, "Crop", "");
751 }
752
753 static void rna_def_proxy(StructRNA *srna)
754 {
755         PropertyRNA *prop;
756
757         prop= RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE);
758         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY);
759         RNA_def_property_ui_text(prop, "Use Proxy", "Use a preview proxy for this strip.");
760         RNA_def_property_boolean_funcs(prop, NULL, "rna_Sequence_use_proxy_set");
761
762         prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
763         RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy");
764         RNA_def_property_ui_text(prop, "Proxy", "");
765
766         prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
767         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR);
768         RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data.");
769         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
770 }
771
772 static void rna_def_input(StructRNA *srna)
773 {
774         PropertyRNA *prop;
775
776         prop= RNA_def_property(srna, "animation_start_offset", PROP_INT, PROP_UNSIGNED);
777         RNA_def_property_int_sdna(prop, NULL, "anim_startofs");
778         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap test
779         RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start).");
780         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
781         
782         prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED);
783         RNA_def_property_int_sdna(prop, NULL, "anim_endofs");
784         RNA_def_property_clear_flag(prop, PROP_EDITABLE); // overlap test
785         RNA_def_property_ui_text(prop, "Animation End Offset", "Animation end offset (trim end).");
786         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
787 }
788
789 static void rna_def_image(BlenderRNA *brna)
790 {
791         StructRNA *srna;
792         PropertyRNA *prop;
793         
794         srna = RNA_def_struct(brna, "ImageSequence", "Sequence");
795         RNA_def_struct_ui_text(srna, "Image Sequence", "Sequence strip to load one or more images.");
796         RNA_def_struct_sdna(srna, "Sequence");
797
798         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
799         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
800         RNA_def_property_ui_text(prop, "Directory", "");
801         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
802
803         prop= RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
804         RNA_def_property_collection_sdna(prop, NULL, "strip->stripdata", "strip->len");
805         RNA_def_property_struct_type(prop, "SequenceElement");
806         RNA_def_property_ui_text(prop, "Elements", "");
807
808         rna_def_filter_video(srna);
809         rna_def_proxy(srna);
810         rna_def_input(srna);
811 }
812
813 static void rna_def_meta(BlenderRNA *brna)
814 {
815         StructRNA *srna;
816         PropertyRNA *prop;
817         
818         srna = RNA_def_struct(brna, "MetaSequence", "Sequence");
819         RNA_def_struct_ui_text(srna, "Meta Sequence", "Sequence strip to group other strips as a single sequence strip.");
820         RNA_def_struct_sdna(srna, "Sequence");
821
822         prop = RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
823         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
824         RNA_def_property_struct_type(prop, "Sequence");
825         RNA_def_property_ui_text(prop, "Sequences", "");
826
827         rna_def_filter_video(srna);
828         rna_def_proxy(srna);
829         rna_def_input(srna);
830 }
831
832 static void rna_def_scene(BlenderRNA *brna)
833 {
834         StructRNA *srna;
835         PropertyRNA *prop;
836         
837         srna = RNA_def_struct(brna, "SceneSequence", "Sequence");
838         RNA_def_struct_ui_text(srna, "Scene Sequence", "Sequence strip to used the rendered image of a scene.");
839         RNA_def_struct_sdna(srna, "Sequence");
840
841         prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
842         RNA_def_property_flag(prop, PROP_EDITABLE);
843         RNA_def_property_ui_text(prop, "Scene", "Scene that this sequence uses.");
844         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
845
846         rna_def_filter_video(srna);
847         rna_def_proxy(srna);
848         rna_def_input(srna);
849 }
850
851 static void rna_def_movie(BlenderRNA *brna)
852 {
853         StructRNA *srna;
854         PropertyRNA *prop;
855         
856         srna = RNA_def_struct(brna, "MovieSequence", "Sequence");
857         RNA_def_struct_ui_text(srna, "Movie Sequence", "Sequence strip to load a video.");
858         RNA_def_struct_sdna(srna, "Sequence");
859
860         prop= RNA_def_property(srna, "mpeg_preseek", PROP_INT, PROP_NONE);
861         RNA_def_property_int_sdna(prop, NULL, "anim_preseek");
862         RNA_def_property_range(prop, 0, 50);
863         RNA_def_property_ui_text(prop, "MPEG Preseek", "For MPEG movies, preseek this many frames.");
864         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
865
866         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
867         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
868         RNA_def_property_ui_text(prop, "Filename", "");
869         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MovieSequence_filename_set");
870         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
871
872         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
873         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
874         RNA_def_property_ui_text(prop, "Directory", "");
875         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
876
877         rna_def_filter_video(srna);
878         rna_def_proxy(srna);
879         rna_def_input(srna);
880 }
881
882 static void rna_def_sound(BlenderRNA *brna)
883 {
884         StructRNA *srna;
885         PropertyRNA *prop;
886         
887         srna = RNA_def_struct(brna, "SoundSequence", "Sequence");
888         RNA_def_struct_ui_text(srna, "Sound Sequence", "Sequence strip defining a sound to be played over a period of time.");
889         RNA_def_struct_sdna(srna, "Sequence");
890
891         prop= RNA_def_property(srna, "sound", PROP_POINTER, PROP_NONE);
892         RNA_def_property_struct_type(prop, "Sound");
893         RNA_def_property_ui_text(prop, "Sound", "Sound datablock used by this sequence.");
894         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
895
896         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
897         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
898         RNA_def_property_ui_text(prop, "Filename", "");
899         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoundSequence_filename_set");
900         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
901
902         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
903         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
904         RNA_def_property_ui_text(prop, "Directory", "");
905         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
906         
907         rna_def_input(srna);
908         
909         RNA_def_struct_sdna_from(srna, "SoundHandle", "sound_handle");
910         
911         prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE);
912         RNA_def_property_float_sdna(prop, NULL, "volume");
913         RNA_def_property_range(prop, 0.0f, 1.0f);
914         RNA_def_property_ui_text(prop, "Volume", "Playback volume of the sound");
915         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
916 }
917
918 static void rna_def_effect(BlenderRNA *brna)
919 {
920         StructRNA *srna;
921
922         srna = RNA_def_struct(brna, "EffectSequence", "Sequence");
923         RNA_def_struct_ui_text(srna, "Effect Sequence", "Sequence strip applying an effect on the images created by other strips.");
924         RNA_def_struct_sdna(srna, "Sequence");
925
926         rna_def_proxy(srna);
927 }
928
929 static void rna_def_plugin(BlenderRNA *brna)
930 {
931         StructRNA *srna;
932         PropertyRNA *prop;
933         
934         srna = RNA_def_struct(brna, "PluginSequence", "EffectSequence");
935         RNA_def_struct_ui_text(srna, "Plugin Sequence", "Sequence strip applying an effect, loaded from an external plugin.");
936         RNA_def_struct_sdna_from(srna, "PluginSeq", "plugin");
937
938         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
939         RNA_def_property_string_sdna(prop, NULL, "name");
940         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
941         RNA_def_property_ui_text(prop, "Filename", "");
942         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
943         
944         /* plugin properties need custom wrapping code like ID properties */
945 }
946
947 static void rna_def_wipe(BlenderRNA *brna)
948 {
949         StructRNA *srna;
950         PropertyRNA *prop;
951         
952         static const EnumPropertyItem wipe_type_items[]= {
953                 {0, "SINGLE", 0, "Single", ""}, 
954                 {1, "DOUBLE", 0, "Double", ""}, 
955                 /* not used yet {2, "BOX", 0, "Box", ""}, */
956                 /* not used yet {3, "CROSS", 0, "Cross", ""}, */
957                 {4, "IRIS", 0, "Iris", ""}, 
958                 {5, "CLOCK", 0, "Clock", ""},   
959                 {0, NULL, 0, NULL, NULL}
960         };
961
962         static const EnumPropertyItem wipe_direction_items[]= {
963                 {0, "OUT", 0, "Out", ""},
964                 {1, "IN", 0, "In", ""},
965                 {0, NULL, 0, NULL, NULL}
966         };
967
968         srna = RNA_def_struct(brna, "WipeSequence", "EffectSequence");
969         RNA_def_struct_ui_text(srna, "Wipe Sequence", "Sequence strip creating a wipe transition.");
970         RNA_def_struct_sdna_from(srna, "WipeVars", "effectdata");
971
972         prop= RNA_def_property(srna, "blur_width", PROP_FLOAT, PROP_UNSIGNED);
973         RNA_def_property_float_sdna(prop, NULL, "edgeWidth");
974         RNA_def_property_range(prop, 0.0f, 1.0f);
975         RNA_def_property_ui_text(prop, "Blur Width", "Width of the blur edge, in percentage relative to the image size.");
976         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
977         
978         prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
979         RNA_def_property_float_sdna(prop, NULL, "angle");
980         RNA_def_property_range(prop, -90.0f, 90.0f);
981         RNA_def_property_ui_text(prop, "Angle", "Edge angle.");
982         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
983         
984         prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
985         RNA_def_property_enum_sdna(prop, NULL, "forward");
986         RNA_def_property_enum_items(prop, wipe_direction_items);
987         RNA_def_property_ui_text(prop, "Direction", "Wipe direction.");
988         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
989         
990         prop= RNA_def_property(srna, "transition_type", PROP_ENUM, PROP_NONE);
991         RNA_def_property_enum_sdna(prop, NULL, "wipetype");
992         RNA_def_property_enum_items(prop, wipe_type_items);
993         RNA_def_property_ui_text(prop, "Transition Type", "");
994         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
995 }
996
997 static void rna_def_glow(BlenderRNA *brna)
998 {
999         StructRNA *srna;
1000         PropertyRNA *prop;
1001         
1002         srna = RNA_def_struct(brna, "GlowSequence", "EffectSequence");
1003         RNA_def_struct_ui_text(srna, "Glow Sequence", "Sequence strip creating a glow effect.");
1004         RNA_def_struct_sdna_from(srna, "GlowVars", "effectdata");
1005         
1006         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
1007         RNA_def_property_float_sdna(prop, NULL, "fMini");
1008         RNA_def_property_range(prop, 0.0f, 1.0f);
1009         RNA_def_property_ui_text(prop, "Threshold", "Minimum intensity to trigger a glow");
1010         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1011         
1012         prop= RNA_def_property(srna, "clamp", PROP_FLOAT, PROP_NONE);
1013         RNA_def_property_float_sdna(prop, NULL, "fClamp");
1014         RNA_def_property_range(prop, 0.0f, 1.0f);
1015         RNA_def_property_ui_text(prop, "Clamp", "rightness limit of intensity.");
1016         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1017         
1018         prop= RNA_def_property(srna, "boost_factor", PROP_FLOAT, PROP_NONE);
1019         RNA_def_property_float_sdna(prop, NULL, "fBoost");
1020         RNA_def_property_range(prop, 0.0f, 10.0f);
1021         RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier.");
1022         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1023         
1024         prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE);
1025         RNA_def_property_float_sdna(prop, NULL, "dDist");
1026         RNA_def_property_range(prop, 0.5f, 20.0f);
1027         RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect.");
1028         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1029         
1030         prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
1031         RNA_def_property_int_sdna(prop, NULL, "dQuality");
1032         RNA_def_property_range(prop, 1, 5);
1033         RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect.");
1034         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1035         
1036         prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE);
1037         RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0);
1038         RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only.");
1039         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1040 }
1041
1042 static void rna_def_transform(BlenderRNA *brna)
1043 {
1044         StructRNA *srna;
1045         PropertyRNA *prop;
1046
1047         static const EnumPropertyItem interpolation_items[]= {
1048                 {0, "NONE", 0, "None", "No interpolation."},
1049                 {1, "BILINEAR", 0, "Bilinear", "Bilinear interpolation."},
1050                 {2, "BICUBIC", 0, "Bicubic", "Bicubic interpolation."},
1051                 {0, NULL, 0, NULL, NULL}
1052         };
1053
1054         static const EnumPropertyItem translation_unit_items[]= {
1055                 {0, "PIXELS", 0, "Pixels", ""},
1056                 {1, "PERCENT", 0, "Percent", ""},
1057                 {0, NULL, 0, NULL, NULL}
1058         };
1059
1060         srna = RNA_def_struct(brna, "TransformSequence", "EffectSequence");
1061         RNA_def_struct_ui_text(srna, "Transform Sequence", "Sequence strip applying affine transformations to other strips.");
1062         RNA_def_struct_sdna_from(srna, "TransformVars", "effectdata");
1063         
1064         prop= RNA_def_property(srna, "scale_start_x", PROP_FLOAT, PROP_UNSIGNED);
1065         RNA_def_property_float_sdna(prop, NULL, "ScalexIni");
1066         RNA_def_property_ui_text(prop, "Scale X", "");
1067         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
1068         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1069         
1070         prop= RNA_def_property(srna, "scale_start_y", PROP_FLOAT, PROP_UNSIGNED);
1071         RNA_def_property_float_sdna(prop, NULL, "ScaleyIni");
1072         RNA_def_property_ui_text(prop, "Scale Y", "");
1073         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
1074         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1075         
1076         prop= RNA_def_property(srna, "uniform_scale", PROP_BOOLEAN, PROP_NONE);
1077         RNA_def_property_boolean_sdna(prop, NULL, "uniform_scale", 0);
1078         RNA_def_property_ui_text(prop, "Uniform Scale", "Scale uniformly, preserving aspect ratio.");
1079         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1080         
1081         prop= RNA_def_property(srna, "translate_start_x", PROP_FLOAT, PROP_NONE);
1082         RNA_def_property_float_sdna(prop, NULL, "xIni");
1083         RNA_def_property_ui_text(prop, "Translate X", "");
1084         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
1085         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1086         
1087         prop= RNA_def_property(srna, "translate_start_y", PROP_FLOAT, PROP_NONE);
1088         RNA_def_property_float_sdna(prop, NULL, "yIni");
1089         RNA_def_property_ui_text(prop, "Translate Y", "");
1090         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
1091         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1092         
1093         prop= RNA_def_property(srna, "rotation_start", PROP_FLOAT, PROP_NONE);
1094         RNA_def_property_float_sdna(prop, NULL, "rotIni");
1095         RNA_def_property_range(prop, -360.0f, 360.0f);
1096         RNA_def_property_ui_text(prop, "Rotation", "");
1097         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1098         
1099         prop= RNA_def_property(srna, "translation_unit", PROP_ENUM, PROP_NONE);
1100         RNA_def_property_enum_sdna(prop, NULL, "percent");
1101         RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* not meant to be animated */
1102         RNA_def_property_enum_items(prop, translation_unit_items);
1103         RNA_def_property_ui_text(prop, "Translation Unit", "");
1104         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1105         
1106         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
1107         RNA_def_property_enum_items(prop, interpolation_items);
1108         RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* not meant to be animated */
1109         RNA_def_property_ui_text(prop, "Interpolation", "");
1110         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1111 }
1112
1113 static void rna_def_solid_color(BlenderRNA *brna)
1114 {
1115         StructRNA *srna;
1116         PropertyRNA *prop;
1117
1118         srna = RNA_def_struct(brna, "ColorSequence", "EffectSequence");
1119         RNA_def_struct_ui_text(srna, "Color Sequence", "Sequence strip creating an image filled with a single color.");
1120         RNA_def_struct_sdna_from(srna, "SolidColorVars", "effectdata");
1121         
1122         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1123         RNA_def_property_float_sdna(prop, NULL, "col");
1124         RNA_def_property_ui_text(prop, "Color", "");
1125         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1126 }
1127
1128 static void rna_def_speed_control(BlenderRNA *brna)
1129 {
1130         StructRNA *srna;
1131         PropertyRNA *prop;
1132
1133         srna = RNA_def_struct(brna, "SpeedControlSequence", "EffectSequence");
1134         RNA_def_struct_ui_text(srna, "SpeedControl Sequence", "Sequence strip to control the speed of other strips.");
1135         RNA_def_struct_sdna_from(srna, "SpeedControlVars", "effectdata");
1136         
1137         prop= RNA_def_property(srna, "global_speed", PROP_FLOAT, PROP_UNSIGNED);
1138         RNA_def_property_float_sdna(prop, NULL, "globalSpeed");
1139         RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* seq->facf0 is used to animate this */
1140         RNA_def_property_ui_text(prop, "Global Speed", "");
1141         RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0);
1142         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1143         
1144         prop= RNA_def_property(srna, "curve_velocity", PROP_BOOLEAN, PROP_NONE);
1145         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE);
1146         RNA_def_property_ui_text(prop, "F-Curve Velocity", "Interpret the F-Curve value as a velocity instead of a frame number.");
1147         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1148
1149         prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE);
1150         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND);
1151         RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result.");
1152         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1153
1154         prop= RNA_def_property(srna, "curve_compress_y", PROP_BOOLEAN, PROP_NONE);
1155         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y);
1156         RNA_def_property_ui_text(prop, "F-Curve Compress Y", "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0.");
1157         RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
1158 }
1159
1160 void RNA_def_sequencer(BlenderRNA *brna)
1161 {
1162         rna_def_strip_element(brna);
1163         rna_def_strip_proxy(brna);
1164         rna_def_strip_color_balance(brna);
1165         rna_def_strip_crop(brna);
1166         rna_def_strip_transform(brna);
1167
1168         rna_def_sequence(brna);
1169         rna_def_editor(brna);
1170
1171         rna_def_image(brna);
1172         rna_def_meta(brna);
1173         rna_def_scene(brna);
1174         rna_def_movie(brna);
1175         rna_def_sound(brna);
1176         rna_def_effect(brna);
1177         rna_def_plugin(brna);
1178         rna_def_wipe(brna);
1179         rna_def_glow(brna);
1180         rna_def_transform(brna);
1181         rna_def_solid_color(brna);
1182         rna_def_speed_control(brna);
1183 }
1184
1185 #endif
1186