7b5d2e85d379f18b60f15ae239b73165e6cfc73e
[blender-staging.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         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 10, 3);
197         
198         prop= RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR);
199         RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones).");
200         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 10, 3);
201         
202         prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR);
203         RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights).");
204         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 10, 3);
205         
206         prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE);
207         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN);
208         RNA_def_property_ui_text(prop, "Inverse Gain", "");
209
210         prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE);
211         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA);
212         RNA_def_property_ui_text(prop, "Inverse Gamma", "");
213
214         prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE);
215         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT);
216         RNA_def_property_ui_text(prop, "Inverse Lift", "");
217         
218         /* not yet used
219         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
220         RNA_def_property_range(prop, 0.0f, 1.0f);
221         RNA_def_property_ui_text(prop, "Exposure", "");
222         
223         prop= RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
224         RNA_def_property_range(prop, 0.0f, 1.0f);
225         RNA_def_property_ui_text(prop, "Saturation", "");*/
226 }
227
228 static void rna_def_sequence(BlenderRNA *brna)
229 {
230         StructRNA *srna;
231         PropertyRNA *prop;
232
233         static const EnumPropertyItem seq_type_items[]= {
234                 {SEQ_IMAGE, "IMAGE", "Image", ""}, 
235                 {SEQ_META, "META", "Meta", ""}, 
236                 {SEQ_SCENE, "SCENE", "Scene", ""}, 
237                 {SEQ_MOVIE, "MOVIE", "Movie", ""}, 
238                 {SEQ_RAM_SOUND, "RAM_SOUND", "Ram Sound", ""}, 
239                 {SEQ_HD_SOUND, "HD_SOUND", "HD Sound", ""}, 
240                 {SEQ_MOVIE_AND_HD_SOUND, "MOVIE_AND_HD_SOUND", "Movie and HD Sound", ""}, 
241                 {SEQ_EFFECT, "REPLACE", "Replace", ""}, 
242                 {SEQ_CROSS, "CROSS", "Cross", ""}, 
243                 {SEQ_ADD, "ADD", "Add", ""}, 
244                 {SEQ_SUB, "SUBTRACT", "Subtract", ""}, 
245                 {SEQ_ALPHAOVER, "ALPHAOVER", "Alpha Over", ""}, 
246                 {SEQ_ALPHAUNDER, "ALPHAUNDER", "Alpha Under", ""}, 
247                 {SEQ_GAMCROSS, "GAMMACROSS", "Gamma Cross", ""}, 
248                 {SEQ_MUL, "MULTIPLY", "Multiply", ""}, 
249                 {SEQ_OVERDROP, "OVERDROP", "Over Drop", ""}, 
250                 {SEQ_PLUGIN, "PLUGIN", "plugin", ""}, 
251                 {SEQ_WIPE, "WIPE", "Wipe", ""}, 
252                 {SEQ_GLOW, "GLOW", "Glow", ""}, 
253                 {SEQ_TRANSFORM, "TRANSFORM", "Transform", ""}, 
254                 {SEQ_COLOR, "COLOR", "Color", ""}, 
255                 {SEQ_SPEED, "SPEED", "Speed", ""}, 
256                 {0, NULL, NULL, NULL}
257         };
258
259         static const EnumPropertyItem blend_mode_items[]= {
260                         {SEQ_BLEND_REPLACE, "REPLACE", "Replace", ""}, 
261                         {SEQ_CROSS, "CROSS", "Cross", ""}, 
262                         {SEQ_ADD, "ADD", "Add", ""}, 
263                         {SEQ_SUB, "SUBTRACT", "Subtract", ""}, 
264                         {SEQ_ALPHAOVER, "ALPHAOVER", "Alpha Over", ""}, 
265                         {SEQ_ALPHAUNDER, "ALPHAUNDER", "Alpha Under", ""}, 
266                         {SEQ_GAMCROSS, "GAMCROSS", "Gamma Cross", ""}, 
267                         {SEQ_MUL, "MULTIPLY", "Multiply", ""}, 
268                         {SEQ_OVERDROP, "OVERDROP", "Over Drop", ""}, 
269                         {SEQ_PLUGIN, "PLUGIN", "plugin", ""}, 
270                         {SEQ_WIPE, "WIPE", "Wipe", ""}, 
271                         {SEQ_GLOW, "GLOW", "Glow", ""}, 
272                         {SEQ_TRANSFORM, "TRANSFORM", "Transform", ""}, 
273                         {SEQ_COLOR, "COLOR", "Color", ""}, 
274                         {SEQ_SPEED, "SPEED", "Speed", ""}, 
275                 {0, NULL, NULL, NULL}
276         };
277         
278         srna = RNA_def_struct(brna, "Sequence", NULL);
279         RNA_def_struct_ui_text(srna, "Sequence", "DOC_BROKEN");
280         RNA_def_struct_refine_func(srna, "rna_Sequence_refine");
281
282         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
283         RNA_def_property_string_funcs(prop, "rna_Sequence_name_get", "rna_Sequence_name_length", "rna_Sequence_name_set");
284         RNA_def_property_string_maxlength(prop, sizeof(((Sequence*)NULL)->name)-2);
285         RNA_def_property_ui_text(prop, "Name", "");
286         RNA_def_struct_name_property(srna, prop);
287
288         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
289         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
290         RNA_def_property_enum_items(prop, seq_type_items);
291         RNA_def_property_ui_text(prop, "Type", "");
292
293         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
294         RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by this sequence.");
295
296         /* flags */
297
298         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
299         RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
300         RNA_def_property_ui_text(prop, "Selected", "");
301
302         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
303         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_ACTIVE);
304         RNA_def_property_ui_text(prop, "Active", "");
305
306         prop= RNA_def_property(srna, "left_handle_selected", PROP_BOOLEAN, PROP_NONE);
307         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LEFTSEL);
308         RNA_def_property_ui_text(prop, "Left Handle Selected", "");
309
310         prop= RNA_def_property(srna, "right_handle_selected", PROP_BOOLEAN, PROP_NONE);
311         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_RIGHTSEL);
312         RNA_def_property_ui_text(prop, "Right Handle Selected", "");
313
314         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
315         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MUTE);
316         RNA_def_property_ui_text(prop, "Mute", "");
317
318         prop= RNA_def_property(srna, "ipo_frame_locked", PROP_BOOLEAN, PROP_NONE);
319         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_IPO_FRAME_LOCKED);
320         RNA_def_property_ui_text(prop, "IPO Frame Locked", "Lock the IPO coordinates to the global frame counter.");
321
322         prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
323         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LOCK);
324         RNA_def_property_ui_text(prop, "Lock", "Lock strip so that it can't be transformed.");
325
326         /* strip positioning */
327
328         prop= RNA_def_property(srna, "length", PROP_INT, PROP_UNSIGNED);
329         RNA_def_property_int_sdna(prop, NULL, "len");
330         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // computed from other values
331         RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
332         
333         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_UNSIGNED);
334         RNA_def_property_int_sdna(prop, NULL, "start");
335         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
336         RNA_def_property_ui_text(prop, "Start Frame", "");
337         
338         prop= RNA_def_property(srna, "start_offset", PROP_INT, PROP_UNSIGNED);
339         RNA_def_property_int_sdna(prop, NULL, "startofs");
340         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
341         RNA_def_property_ui_text(prop, "Start Offset", "");
342         
343         prop= RNA_def_property(srna, "end_offset", PROP_INT, PROP_UNSIGNED);
344         RNA_def_property_int_sdna(prop, NULL, "endofs");
345         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
346         RNA_def_property_ui_text(prop, "End offset", "");
347         
348         prop= RNA_def_property(srna, "start_still", PROP_INT, PROP_UNSIGNED);
349         RNA_def_property_int_sdna(prop, NULL, "startstill");
350         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
351         RNA_def_property_range(prop, 0, MAXFRAME);
352         RNA_def_property_ui_text(prop, "Start Still", "");
353         
354         prop= RNA_def_property(srna, "end_still", PROP_INT, PROP_UNSIGNED);
355         RNA_def_property_int_sdna(prop, NULL, "endstill");
356         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap tests
357         RNA_def_property_range(prop, 0, MAXFRAME);
358         RNA_def_property_ui_text(prop, "End Still", "");
359         
360         prop= RNA_def_property(srna, "channel", PROP_INT, PROP_UNSIGNED);
361         RNA_def_property_int_sdna(prop, NULL, "machine");
362         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
363         RNA_def_property_ui_text(prop, "Channel", "Y position of the sequence strip.");
364
365         /* blending */
366
367         prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
368         RNA_def_property_enum_items(prop, blend_mode_items);
369         RNA_def_property_ui_text(prop, "Blend Mode", "");
370         
371         prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_NONE);
372         RNA_def_property_range(prop, 0.0f, 100.0f);
373         RNA_def_property_ui_text(prop, "Blend Opacity", "");
374 }
375
376 void rna_def_editor(BlenderRNA *brna)
377 {
378         StructRNA *srna;
379         PropertyRNA *prop;
380         
381         srna = RNA_def_struct(brna, "SequenceEditor", NULL);
382         RNA_def_struct_ui_text(srna, "Sequence Editor", "DOC_BROKEN");
383         RNA_def_struct_sdna(srna, "Editing");
384
385         prop= RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
386         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
387         RNA_def_property_struct_type(prop, "Sequence");
388         RNA_def_property_ui_text(prop, "Sequences", "");
389
390         prop= RNA_def_property(srna, "meta_stack", PROP_COLLECTION, PROP_NONE);
391         RNA_def_property_collection_sdna(prop, NULL, "metastack", NULL);
392         RNA_def_property_struct_type(prop, "Sequence");
393         RNA_def_property_ui_text(prop, "Meta Stack", "Meta strip stack, last is currently edited meta strip.");
394         RNA_def_property_collection_funcs(prop, 0, 0, 0, "rna_SequenceEdtior_meta_stack_get", 0, 0, 0, 0);
395 }
396
397 static void rna_def_filter_video(StructRNA *srna)
398 {
399         PropertyRNA *prop;
400
401         prop= RNA_def_property(srna, "de_interlace", PROP_BOOLEAN, PROP_NONE);
402         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FILTERY);
403         RNA_def_property_ui_text(prop, "De-Interlace", "For video movies to remove fields.");
404
405         prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
406         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL);
407         RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha.");
408
409         prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE);
410         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX);
411         RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis.");
412
413         prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE);
414         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY);
415         RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis.");
416
417         prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE);
418         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT);
419         RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data.");
420
421         prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
422         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES);
423         RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order.");
424
425         prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED);
426         RNA_def_property_float_sdna(prop, NULL, "mul");
427         RNA_def_property_range(prop, 0.0f, 20.0f);
428         RNA_def_property_ui_text(prop, "Multiply Colors", "");
429
430         prop= RNA_def_property(srna, "strobe", PROP_FLOAT, PROP_NONE);
431         RNA_def_property_range(prop, 1.0f, 30.0f);
432         RNA_def_property_ui_text(prop, "Strobe", "Only display every nth frame.");
433
434         prop= RNA_def_property(srna, "use_color_balance", PROP_BOOLEAN, PROP_NONE);
435         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_COLOR_BALANCE);
436         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate color balance
437         RNA_def_property_ui_text(prop, "Use Color Balance", "(3-Way color correction) on input.");
438
439         prop= RNA_def_property(srna, "color_balance", PROP_POINTER, PROP_NONE);
440         RNA_def_property_pointer_sdna(prop, NULL, "strip->color_balance");
441         RNA_def_property_ui_text(prop, "Color Balance", "");
442
443         prop= RNA_def_property(srna, "use_translation", PROP_BOOLEAN, PROP_NONE);
444         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_TRANSFORM);
445         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate transform
446         RNA_def_property_ui_text(prop, "Use Translation", "Translate image before processing.");
447         
448         prop= RNA_def_property(srna, "transform", PROP_POINTER, PROP_NONE);
449         RNA_def_property_pointer_sdna(prop, NULL, "strip->transform");
450         RNA_def_property_ui_text(prop, "Transform", "");
451
452         prop= RNA_def_property(srna, "use_crop", PROP_BOOLEAN, PROP_NONE);
453         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_CROP);
454         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate crop
455         RNA_def_property_ui_text(prop, "Use Crop", "Crop image before processing.");
456
457         prop= RNA_def_property(srna, "crop", PROP_POINTER, PROP_NONE);
458         RNA_def_property_pointer_sdna(prop, NULL, "strip->crop");
459         RNA_def_property_ui_text(prop, "Crop", "");
460 }
461
462 static void rna_def_filter_sound(StructRNA *srna)
463 {
464         PropertyRNA *prop;
465
466         prop= RNA_def_property(srna, "sound_gain", PROP_FLOAT, PROP_NONE);
467         RNA_def_property_float_sdna(prop, NULL, "level");
468         RNA_def_property_range(prop, -96.0f, 6.0f);
469         RNA_def_property_ui_text(prop, "Sound Gain", "Sound level in dB (0 = full volume).");
470         
471         prop= RNA_def_property(srna, "sound_pan", PROP_FLOAT, PROP_NONE);
472         RNA_def_property_float_sdna(prop, NULL, "pan");
473         RNA_def_property_range(prop, -1.0f, 1.0f);
474         RNA_def_property_ui_text(prop, "Sound Pan", "Stereo sound balance.");
475 }
476
477 static void rna_def_proxy(StructRNA *srna)
478 {
479         PropertyRNA *prop;
480
481         prop= RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE);
482         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY);
483         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // allocate proxy
484         RNA_def_property_ui_text(prop, "Use Proxy", "Use a preview proxy for this strip.");
485
486         prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
487         RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy");
488         RNA_def_property_ui_text(prop, "Proxy", "");
489
490         prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
491         RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR);
492         RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data.");
493 }
494
495 static void rna_def_input(StructRNA *srna)
496 {
497         PropertyRNA *prop;
498
499         prop= RNA_def_property(srna, "animation_start_offset", PROP_INT, PROP_UNSIGNED);
500         RNA_def_property_int_sdna(prop, NULL, "anim_startofs");
501         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
502         RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start).");
503         
504         prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED);
505         RNA_def_property_int_sdna(prop, NULL, "anim_endofs");
506         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // overlap test
507         RNA_def_property_ui_text(prop, "Animation End Offset", "Animation end offset (trim end).");
508 }
509
510 static void rna_def_image(BlenderRNA *brna)
511 {
512         StructRNA *srna;
513         PropertyRNA *prop;
514         
515         srna = RNA_def_struct(brna, "ImageSequence", "Sequence");
516         RNA_def_struct_ui_text(srna, "Image Sequence", "DOC_BROKEN");
517         RNA_def_struct_sdna(srna, "Sequence");
518
519         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
520         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
521         RNA_def_property_ui_text(prop, "Directory", "");
522
523         prop= RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
524         RNA_def_property_collection_sdna(prop, NULL, "strip->stripdata", "strip->len");
525         RNA_def_property_struct_type(prop, "SequenceElement");
526         RNA_def_property_ui_text(prop, "Elements", "");
527
528
529         rna_def_filter_video(srna);
530         rna_def_proxy(srna);
531         rna_def_input(srna);
532 }
533
534 static void rna_def_meta(BlenderRNA *brna)
535 {
536         StructRNA *srna;
537         PropertyRNA *prop;
538         
539         srna = RNA_def_struct(brna, "MetaSequence", "Sequence");
540         RNA_def_struct_ui_text(srna, "Meta Sequence", "DOC_BROKEN");
541         RNA_def_struct_sdna(srna, "Sequence");
542
543         prop = RNA_def_property(srna, "sequences", PROP_COLLECTION, PROP_NONE);
544         RNA_def_property_collection_sdna(prop, NULL, "seqbase", NULL);
545         RNA_def_property_struct_type(prop, "Sequence");
546         RNA_def_property_ui_text(prop, "Sequences", "");
547
548         rna_def_filter_video(srna);
549         rna_def_proxy(srna);
550         rna_def_input(srna);
551 }
552
553 static void rna_def_scene(BlenderRNA *brna)
554 {
555         StructRNA *srna;
556         PropertyRNA *prop;
557         
558         srna = RNA_def_struct(brna, "SceneSequence", "Sequence");
559         RNA_def_struct_ui_text(srna, "Scene Sequence", "DOC_BROKEN");
560         RNA_def_struct_sdna(srna, "Sequence");
561
562         prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
563         RNA_def_property_ui_text(prop, "Scene", "Scene that this sequence uses.");
564
565         rna_def_filter_video(srna);
566         rna_def_proxy(srna);
567         rna_def_input(srna);
568 }
569
570 static void rna_def_movie(BlenderRNA *brna)
571 {
572         StructRNA *srna;
573         PropertyRNA *prop;
574         
575         srna = RNA_def_struct(brna, "MovieSequence", "Sequence");
576         RNA_def_struct_ui_text(srna, "Movie Sequence", "DOC_BROKEN");
577         RNA_def_struct_sdna(srna, "Sequence");
578
579         prop= RNA_def_property(srna, "mpeg_preseek", PROP_INT, PROP_NONE);
580         RNA_def_property_int_sdna(prop, NULL, "anim_preseek");
581         RNA_def_property_range(prop, 0, 50);
582         RNA_def_property_ui_text(prop, "MPEG Preseek", "For MPEG movies, preseek this many frames.");
583
584         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
585         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
586         RNA_def_property_ui_text(prop, "Filename", "");
587
588         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
589         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
590         RNA_def_property_ui_text(prop, "Directory", "");
591
592         rna_def_filter_video(srna);
593         rna_def_proxy(srna);
594         rna_def_input(srna);
595 }
596
597 static void rna_def_sound(BlenderRNA *brna)
598 {
599         StructRNA *srna;
600         PropertyRNA *prop;
601         
602         srna = RNA_def_struct(brna, "SoundSequence", "Sequence");
603         RNA_def_struct_ui_text(srna, "Sound Sequence", "DOC_BROKEN");
604         RNA_def_struct_sdna(srna, "Sequence");
605
606         prop= RNA_def_property(srna, "sound", PROP_POINTER, PROP_NONE);
607         RNA_def_property_struct_type(prop, "UnknownType");
608         RNA_def_property_ui_text(prop, "Sound", "Sound datablock used by this sequence (RAM audio only).");
609
610         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
611         RNA_def_property_string_sdna(prop, NULL, "strip->stripdata->name");
612         RNA_def_property_ui_text(prop, "Filename", "");
613
614         prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
615         RNA_def_property_string_sdna(prop, NULL, "strip->dir");
616         RNA_def_property_ui_text(prop, "Directory", "");
617
618         rna_def_filter_sound(srna);
619         rna_def_input(srna);
620 }
621
622 static void rna_def_effect(BlenderRNA *brna)
623 {
624         StructRNA *srna;
625
626         srna = RNA_def_struct(brna, "EffectSequence", "Sequence");
627         RNA_def_struct_ui_text(srna, "Effect Sequence", "DOC_BROKEN");
628         RNA_def_struct_sdna(srna, "Sequence");
629
630         rna_def_proxy(srna);
631 }
632
633 static void rna_def_plugin(BlenderRNA *brna)
634 {
635         StructRNA *srna;
636         PropertyRNA *prop;
637         
638         srna = RNA_def_struct(brna, "PluginSequence", "EffectSequence");
639         RNA_def_struct_ui_text(srna, "Plugin Sequence", "DOC_BROKEN");
640         RNA_def_struct_sdna_from(srna, "PluginSeq", "plugin");
641
642         prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
643         RNA_def_property_string_sdna(prop, NULL, "name");
644         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
645         RNA_def_property_ui_text(prop, "Filename", "");
646         
647         /* plugin properties need custom wrapping code like ID properties */
648 }
649
650 static void rna_def_wipe(BlenderRNA *brna)
651 {
652         StructRNA *srna;
653         PropertyRNA *prop;
654         
655         static const EnumPropertyItem wipe_type_items[]= {
656                 {0, "SINGLE", "Single", ""}, 
657                 {1, "DOUBLE", "Double", ""}, 
658                 /* not used yet {2, "BOX", "Box", ""}, */
659                 /* not used yet {3, "CROSS", "Cross", ""}, */
660                 {4, "IRIS", "Iris", ""}, 
661                 {5, "CLOCK", "Clock", ""},      
662                 {0, NULL, NULL, NULL}
663         };
664
665         static const EnumPropertyItem wipe_direction_items[]= {
666                 {0, "OUT", "Out", ""},
667                 {1, "IN", "In", ""},
668                 {0, NULL, NULL, NULL}
669         };
670
671         srna = RNA_def_struct(brna, "WipeSequence", "EffectSequence");
672         RNA_def_struct_ui_text(srna, "Wipe Sequence", "DOC_BROKEN");
673         RNA_def_struct_sdna_from(srna, "WipeVars", "effectdata");
674
675         prop= RNA_def_property(srna, "blur_width", PROP_FLOAT, PROP_UNSIGNED);
676         RNA_def_property_float_sdna(prop, NULL, "edgeWidth");
677         RNA_def_property_range(prop, 0.0f, 1.0f);
678         RNA_def_property_ui_text(prop, "Blur Width", "Width of the blur edge, in percentage relative to the image size.");
679         
680         prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
681         RNA_def_property_float_sdna(prop, NULL, "angle");
682         RNA_def_property_range(prop, -90.0f, 90.0f);
683         RNA_def_property_ui_text(prop, "Angle", "Edge angle.");
684         
685         prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
686         RNA_def_property_enum_sdna(prop, NULL, "forward");
687         RNA_def_property_enum_items(prop, wipe_direction_items);
688         RNA_def_property_ui_text(prop, "Direction", "Wipe direction.");
689         
690         prop= RNA_def_property(srna, "transition_type", PROP_ENUM, PROP_NONE);
691         RNA_def_property_enum_sdna(prop, NULL, "wipetype");
692         RNA_def_property_enum_items(prop, wipe_type_items);
693         RNA_def_property_ui_text(prop, "Transition Type", "");
694 }
695
696 static void rna_def_glow(BlenderRNA *brna)
697 {
698         StructRNA *srna;
699         PropertyRNA *prop;
700         
701         srna = RNA_def_struct(brna, "GlowSequence", "EffectSequence");
702         RNA_def_struct_ui_text(srna, "Glow Sequence", "DOC_BROKEN");
703         RNA_def_struct_sdna_from(srna, "GlowVars", "effectdata");
704         
705         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
706         RNA_def_property_float_sdna(prop, NULL, "fMini");
707         RNA_def_property_range(prop, 0.0f, 1.0f);
708         RNA_def_property_ui_text(prop, "Threshold", "Minimum intensity to trigger a glow");
709         
710         prop= RNA_def_property(srna, "clamp", PROP_FLOAT, PROP_NONE);
711         RNA_def_property_float_sdna(prop, NULL, "fClamp");
712         RNA_def_property_range(prop, 0.0f, 1.0f);
713         RNA_def_property_ui_text(prop, "Clamp", "rightness limit of intensity.");
714         
715         prop= RNA_def_property(srna, "boost_factor", PROP_FLOAT, PROP_NONE);
716         RNA_def_property_float_sdna(prop, NULL, "fBoost");
717         RNA_def_property_range(prop, 0.0f, 10.0f);
718         RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier.");
719         
720         prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE);
721         RNA_def_property_float_sdna(prop, NULL, "dDist");
722         RNA_def_property_range(prop, 0.5f, 20.0f);
723         RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect.");
724         
725         prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
726         RNA_def_property_int_sdna(prop, NULL, "dQuality");
727         RNA_def_property_range(prop, 1, 5);
728         RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect.");
729         
730         prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE);
731         RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0);
732         RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only.");
733 }
734
735 static void rna_def_transform(BlenderRNA *brna)
736 {
737         StructRNA *srna;
738         PropertyRNA *prop;
739
740         static const EnumPropertyItem interpolation_items[]= {
741                 {0, "NONE", "None", "No interpolation."},
742                 {1, "BILINEAR", "Bilinear", "Bilinear interpolation."},
743                 {2, "BICUBIC", "Bicubic", "Bicubic interpolation."},
744                 {0, NULL, NULL, NULL}
745         };
746
747         static const EnumPropertyItem translation_unit_items[]= {
748                 {0, "PIXELS", "Pixels", ""},
749                 {1, "PERCENT", "Percent", ""},
750                 {0, NULL, NULL, NULL}
751         };
752
753         srna = RNA_def_struct(brna, "TransformSequence", "EffectSequence");
754         RNA_def_struct_ui_text(srna, "Transform Sequence", "DOC_BROKEN");
755         RNA_def_struct_sdna_from(srna, "TransformVars", "effectdata");
756         
757         prop= RNA_def_property(srna, "scale_start_x", PROP_FLOAT, PROP_UNSIGNED);
758         RNA_def_property_float_sdna(prop, NULL, "ScalexIni");
759         RNA_def_property_ui_text(prop, "Scale Start X", "");
760         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
761         
762         prop= RNA_def_property(srna, "scale_start_y", PROP_FLOAT, PROP_UNSIGNED);
763         RNA_def_property_float_sdna(prop, NULL, "ScaleyIni");
764         RNA_def_property_ui_text(prop, "Scale Start Y", "");
765         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
766
767         prop= RNA_def_property(srna, "scale_end_x", PROP_FLOAT, PROP_UNSIGNED);
768         RNA_def_property_float_sdna(prop, NULL, "ScalexFin");
769         RNA_def_property_ui_text(prop, "Scale End X", "");
770         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
771         
772         prop= RNA_def_property(srna, "scale_end_y", PROP_FLOAT, PROP_UNSIGNED);
773         RNA_def_property_float_sdna(prop, NULL, "ScaleyFin");
774         RNA_def_property_ui_text(prop, "Scale End Y", "");
775         RNA_def_property_ui_range(prop, 0, 10, 3, 10);
776         
777         prop= RNA_def_property(srna, "translate_start_x", PROP_FLOAT, PROP_NONE);
778         RNA_def_property_float_sdna(prop, NULL, "xIni");
779         RNA_def_property_ui_text(prop, "Translate Start X", "");
780         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
781
782         prop= RNA_def_property(srna, "translate_start_y", PROP_FLOAT, PROP_NONE);
783         RNA_def_property_float_sdna(prop, NULL, "yIni");
784         RNA_def_property_ui_text(prop, "Translate Start Y", "");
785         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
786
787         prop= RNA_def_property(srna, "translate_end_x", PROP_FLOAT, PROP_NONE);
788         RNA_def_property_float_sdna(prop, NULL, "xFin");
789         RNA_def_property_ui_text(prop, "Translate End X", "");
790         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
791
792         prop= RNA_def_property(srna, "translate_end_y", PROP_FLOAT, PROP_NONE);
793         RNA_def_property_float_sdna(prop, NULL, "yFin");
794         RNA_def_property_ui_text(prop, "Translate End Y", "");
795         RNA_def_property_ui_range(prop, -500.0f, 500.0f, 3, 10);
796         
797         prop= RNA_def_property(srna, "rotation_start", PROP_FLOAT, PROP_NONE);
798         RNA_def_property_float_sdna(prop, NULL, "rotIni");
799         RNA_def_property_range(prop, 0.0f, 360.0f);
800         RNA_def_property_ui_text(prop, "Rotation Start", "");
801         
802         prop= RNA_def_property(srna, "rotation_end", PROP_FLOAT, PROP_NONE);
803         RNA_def_property_float_sdna(prop, NULL, "rotFin");
804         RNA_def_property_range(prop, 0.0f, 360.0f);
805         RNA_def_property_ui_text(prop, "Rotation End", "");
806         
807         prop= RNA_def_property(srna, "translation_unit", PROP_ENUM, PROP_NONE);
808         RNA_def_property_enum_sdna(prop, NULL, "percent");
809         RNA_def_property_enum_items(prop, translation_unit_items);
810         RNA_def_property_ui_text(prop, "Translation Unit", "");
811         
812         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
813         RNA_def_property_enum_items(prop, interpolation_items);
814         RNA_def_property_ui_text(prop, "Interpolation", "");
815 }
816
817 static void rna_def_solid_color(BlenderRNA *brna)
818 {
819         StructRNA *srna;
820         PropertyRNA *prop;
821         
822         srna = RNA_def_struct(brna, "ColorSequence", "EffectSequence");
823         RNA_def_struct_ui_text(srna, "Color Sequence", "DOC_BROKEN");
824         RNA_def_struct_sdna_from(srna, "SolidColorVars", "effectdata");
825         
826         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
827         RNA_def_property_float_sdna(prop, NULL, "col");
828         RNA_def_property_ui_text(prop, "Color", "");
829 }
830
831 static void rna_def_speed_control(BlenderRNA *brna)
832 {
833         StructRNA *srna;
834         PropertyRNA *prop;
835
836         srna = RNA_def_struct(brna, "SpeedControlSequence", "EffectSequence");
837         RNA_def_struct_ui_text(srna, "SpeedControl Sequence", "DOC_BROKEN");
838         RNA_def_struct_sdna_from(srna, "SpeedControlVars", "effectdata");
839         
840         prop= RNA_def_property(srna, "global_speed", PROP_FLOAT, PROP_UNSIGNED);
841         RNA_def_property_float_sdna(prop, NULL, "globalSpeed");
842         RNA_def_property_ui_text(prop, "Global Speed", "");
843         RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0);
844         
845         prop= RNA_def_property(srna, "ipo_velocity", PROP_BOOLEAN, PROP_NONE);
846         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE);
847         RNA_def_property_ui_text(prop, "IPO Velocity", "Interpret the IPO value as a velocity instead of a frame number.");
848
849         prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE);
850         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND);
851         RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result.");
852
853         prop= RNA_def_property(srna, "ipo_compress_y", PROP_BOOLEAN, PROP_NONE);
854         RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y);
855         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.");
856 }
857
858 void RNA_def_sequence(BlenderRNA *brna)
859 {
860         rna_def_strip_element(brna);
861         rna_def_strip_proxy(brna);
862         rna_def_strip_color_balance(brna);
863         rna_def_strip_crop(brna);
864         rna_def_strip_transform(brna);
865
866         rna_def_sequence(brna);
867         rna_def_editor(brna);
868
869         rna_def_image(brna);
870         rna_def_meta(brna);
871         rna_def_scene(brna);
872         rna_def_movie(brna);
873         rna_def_sound(brna);
874         rna_def_effect(brna);
875         rna_def_plugin(brna);
876         rna_def_wipe(brna);
877         rna_def_glow(brna);
878         rna_def_transform(brna);
879         rna_def_solid_color(brna);
880         rna_def_speed_control(brna);
881 }
882
883 #endif
884