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