initial commit
[goodguy/history.git] / cinelerra-5.0 / cinelerra / formatpresets.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (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
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  * 
20  */
21
22 #include "edl.h"
23 #include "edlsession.h"
24 #include "formatpresets.h"
25 #include "new.h"
26 #include "setformat.h"
27
28
29
30
31
32 FormatPresets::FormatPresets(MWindow *mwindow,
33         NewWindow *new_gui, 
34         SetFormatWindow *format_gui, 
35         int x, 
36         int y)
37 {
38         this->mwindow = mwindow;
39         this->new_gui = new_gui;
40         this->format_gui = format_gui;
41         gui_base = new_gui ? (BC_WindowBase*)new_gui : (BC_WindowBase*)(format_gui);
42         this->x = x;
43         this->y = y;
44         text = 0;
45         pulldown = 0;
46 }
47
48 FormatPresets::~FormatPresets()
49 {
50         if(text) delete text;
51         if(pulldown) delete pulldown;
52         for(int i = 0; i < preset_items.total; i++)
53                 delete preset_items.values[i];
54 }
55
56 void FormatPresets::create_objects()
57 {
58 // Create preset items
59         FormatPresetItem *item;
60         item = new FormatPresetItem(mwindow, this, _("User Defined"));
61         preset_items.append(item);
62
63         item = new FormatPresetItem(mwindow, this, _("1080P/60"));
64         item->edl->session->audio_channels = 2;
65         item->edl->session->audio_tracks = 2;
66         item->edl->session->sample_rate = 48000;
67         item->edl->session->video_channels = 1;
68         item->edl->session->video_tracks = 1;
69         item->edl->session->frame_rate = (double)60000.0 / 1001;
70 //      item->edl->session->track_w = 1920;
71 //      item->edl->session->track_h = 1080;
72         item->edl->session->output_w = 1920;
73         item->edl->session->output_h = 1080;
74         item->edl->session->aspect_w = 16;
75         item->edl->session->aspect_h = 9;
76         preset_items.append(item);
77
78         item = new FormatPresetItem(mwindow, this, _("1080P/24"));
79         item->edl->session->audio_channels = 2;
80         item->edl->session->audio_tracks = 2;
81         item->edl->session->sample_rate = 48000;
82         item->edl->session->video_channels = 1;
83         item->edl->session->video_tracks = 1;
84         item->edl->session->frame_rate = 24;
85 //      item->edl->session->track_w = 1920;
86 //      item->edl->session->track_h = 1080;
87         item->edl->session->output_w = 1920;
88         item->edl->session->output_h = 1080;
89         item->edl->session->aspect_w = 16;
90         item->edl->session->aspect_h = 9;
91         preset_items.append(item);
92
93         item = new FormatPresetItem(mwindow, this, _("1080I"));
94         item->edl->session->audio_channels = 2;
95         item->edl->session->audio_tracks = 2;
96         item->edl->session->sample_rate = 48000;
97         item->edl->session->video_channels = 1;
98         item->edl->session->video_tracks = 1;
99         item->edl->session->frame_rate = (double)30000.0 / 1001;
100 //      item->edl->session->track_w = 1920;
101 //      item->edl->session->track_h = 1080;
102         item->edl->session->output_w = 1920;
103         item->edl->session->output_h = 1080;
104         item->edl->session->aspect_w = 16;
105         item->edl->session->aspect_h = 9;
106         preset_items.append(item);
107
108         item = new FormatPresetItem(mwindow, this, _("720P/60"));
109         item->edl->session->audio_channels = 2;
110         item->edl->session->audio_tracks = 2;
111         item->edl->session->sample_rate = 48000;
112         item->edl->session->video_channels = 1;
113         item->edl->session->video_tracks = 1;
114         item->edl->session->frame_rate = (double)60000.0 / 1001;
115         item->edl->session->output_w = 1280;
116         item->edl->session->output_h = 720;
117         item->edl->session->aspect_w = 16;
118         item->edl->session->aspect_h = 9;
119         preset_items.append(item);
120
121         item = new FormatPresetItem(mwindow, this, _("576I - DV(D) PAL"));
122         item->edl->session->audio_channels = 2;
123         item->edl->session->audio_tracks = 2;
124         item->edl->session->sample_rate = 48000;
125         item->edl->session->video_channels = 1;
126         item->edl->session->video_tracks = 1;
127         item->edl->session->frame_rate = 25;
128         item->edl->session->output_w = 720;
129         item->edl->session->output_h = 576;
130         item->edl->session->aspect_w = 4;
131         item->edl->session->aspect_h = 3;
132         preset_items.append(item);
133
134         item = new FormatPresetItem(mwindow, this, _("480P - DV(D) NTSC"));
135         item->edl->session->audio_channels = 2;
136         item->edl->session->audio_tracks = 2;
137         item->edl->session->sample_rate = 48000;
138         item->edl->session->video_channels = 1;
139         item->edl->session->video_tracks = 1;
140         item->edl->session->frame_rate = (double)60000.0 / 1001;
141         item->edl->session->output_w = 720;
142         item->edl->session->output_h = 480;
143         item->edl->session->aspect_w = 4;
144         item->edl->session->aspect_h = 3;
145         preset_items.append(item);
146
147         item = new FormatPresetItem(mwindow, this, _("480I - DV(D) NTSC"));
148         item->edl->session->audio_channels = 2;
149         item->edl->session->audio_tracks = 2;
150         item->edl->session->sample_rate = 48000;
151         item->edl->session->video_channels = 1;
152         item->edl->session->video_tracks = 1;
153         item->edl->session->frame_rate = (double)30000.0 / 1001;
154         item->edl->session->output_w = 720;
155         item->edl->session->output_h = 480;
156         item->edl->session->aspect_w = 4;
157         item->edl->session->aspect_h = 3;
158         preset_items.append(item);
159
160         item = new FormatPresetItem(mwindow, this, _("YouTube"));
161         item->edl->session->audio_channels = 1;
162         item->edl->session->audio_tracks = 1;
163         item->edl->session->sample_rate = 48000;
164         item->edl->session->video_channels = 1;
165         item->edl->session->video_tracks = 1;
166         item->edl->session->frame_rate = (double)30000.0 / 1001;
167         item->edl->session->output_w = 424;
168         item->edl->session->output_h = 318;
169         item->edl->session->aspect_w = 4;
170         item->edl->session->aspect_h = 3;
171         preset_items.append(item);
172
173         item = new FormatPresetItem(mwindow, this, _("Half D-1 PAL"));
174         item->edl->session->audio_channels = 2;
175         item->edl->session->audio_tracks = 2;
176         item->edl->session->sample_rate = 48000;
177         item->edl->session->video_channels = 1;
178         item->edl->session->video_tracks = 1;
179         item->edl->session->frame_rate = 25;
180         item->edl->session->output_w = 360;
181         item->edl->session->output_h = 288;
182         item->edl->session->aspect_w = 4;
183         item->edl->session->aspect_h = 3;
184         preset_items.append(item);
185
186         item = new FormatPresetItem(mwindow, this, _("Half D-1 NTSC"));
187         item->edl->session->audio_channels = 2;
188         item->edl->session->audio_tracks = 2;
189         item->edl->session->sample_rate = 48000;
190         item->edl->session->video_channels = 1;
191         item->edl->session->video_tracks = 1;
192         item->edl->session->frame_rate = (double)30000.0 / 1001;
193         item->edl->session->output_w = 360;
194         item->edl->session->output_h = 240;
195         item->edl->session->aspect_w = 4;
196         item->edl->session->aspect_h = 3;
197         preset_items.append(item);
198
199         item = new FormatPresetItem(mwindow, this, _("Internet"));
200         item->edl->session->audio_channels = 1;
201         item->edl->session->audio_tracks = 1;
202         item->edl->session->sample_rate = 22050;
203         item->edl->session->video_channels = 1;
204         item->edl->session->video_tracks = 1;
205         item->edl->session->frame_rate = 15;
206         item->edl->session->output_w = 320;
207         item->edl->session->output_h = 240;
208         item->edl->session->aspect_w = 4;
209         item->edl->session->aspect_h = 3;
210         preset_items.append(item);
211
212         item = new FormatPresetItem(mwindow, this, _("CD Audio"));
213         item->edl->session->audio_channels = 2;
214         item->edl->session->audio_tracks = 2;
215         item->edl->session->sample_rate = 44100;
216         item->edl->session->video_channels = 1;
217         item->edl->session->video_tracks = 0;
218         item->edl->session->frame_rate = (double)30000.0 / 1001;
219         item->edl->session->output_w = 720;
220         item->edl->session->output_h = 480;
221         item->edl->session->aspect_w = 4;
222         item->edl->session->aspect_h = 3;
223         preset_items.append(item);
224
225         item = new FormatPresetItem(mwindow, this, _("DAT Audio"));
226         item->edl->session->audio_channels = 2;
227         item->edl->session->audio_tracks = 2;
228         item->edl->session->sample_rate = 48000;
229         item->edl->session->video_channels = 1;
230         item->edl->session->video_tracks = 0;
231         item->edl->session->frame_rate = (double)30000.0 / 1001;
232         item->edl->session->output_w = 720;
233         item->edl->session->output_h = 480;
234         item->edl->session->aspect_w = 4;
235         item->edl->session->aspect_h = 3;
236         preset_items.append(item);
237
238
239
240         gui_base->add_subwindow(new BC_Title(x, y, _("Presets:")));
241         int x1 = x;
242         y += 20;
243
244
245         gui_base->add_subwindow(text = new FormatPresetsText(mwindow, 
246                 this, 
247                 x, 
248                 y));
249         x += text->get_w();
250         gui_base->add_subwindow(pulldown = new FormatPresetsPulldown(mwindow, 
251                 this, 
252                 x, 
253                 y));
254         x = x1;
255 }
256
257 FormatPresetItem* FormatPresets::find_preset(EDL *edl)
258 {
259         for(int i = 1; i < preset_items.total; i++)
260         {
261                 FormatPresetItem *preset = preset_items.values[i];
262                 if(edl->session->audio_tracks == preset->edl->session->audio_tracks &&
263                         edl->session->audio_channels == preset->edl->session->audio_channels &&
264                         edl->session->sample_rate == preset->edl->session->sample_rate &&
265                         edl->session->video_tracks == preset->edl->session->video_tracks &&
266                         edl->session->frame_rate == preset->edl->session->frame_rate &&
267                         edl->session->output_w == preset->edl->session->output_w &&
268                         edl->session->output_h == preset->edl->session->output_h &&
269                         edl->session->aspect_w == preset->edl->session->aspect_w &&
270                         edl->session->aspect_h == preset->edl->session->aspect_h)
271                 {
272                         return preset;
273                 }
274         }
275         return 0;
276 }
277
278 const char* FormatPresets::get_preset_text(EDL *edl)
279 {
280         FormatPresetItem *item = find_preset(edl);
281         if(item) 
282                 return item->get_text();
283         else
284                 return "Custom";
285 }
286
287
288 int FormatPresets::handle_event()
289 {
290         return 0;
291 }
292
293 EDL* FormatPresets::get_edl()
294 {
295         return 0;
296 }
297
298
299
300
301
302 FormatPresetsText::FormatPresetsText(MWindow *mwindow, 
303         FormatPresets *gui,
304         int x, 
305         int y)
306  : BC_TextBox(x, 
307         y, 
308         200, 
309         1, 
310         gui->get_preset_text(gui->get_edl()))
311 {
312         this->gui =  gui;
313         this->mwindow = mwindow;
314 }
315
316 int FormatPresetsText::handle_event()
317 {
318         return 1;
319 }
320
321
322
323
324
325
326
327
328
329
330 FormatPresetsPulldown::FormatPresetsPulldown(MWindow *mwindow, 
331         FormatPresets *gui, 
332         int x, 
333         int y)
334  : BC_ListBox(x, 
335                 y, 
336                 200, 
337                 250,
338                 LISTBOX_TEXT,                   // Display text list or icons
339                 (ArrayList<BC_ListBoxItem*>*)&gui->preset_items, // Each column has an ArrayList of BC_ListBoxItems.
340                 0,             // Titles for columns.  Set to 0 for no titles
341                 0,                // width of each column
342                 1,                      // Total columns.
343                 0,                    // Pixel of top of window.
344                 1)
345 {
346         this->mwindow = mwindow;
347         this->gui = gui;
348 }
349
350 int FormatPresetsPulldown::handle_event()
351 {
352         gui->handle_event();
353         FormatPresetItem *preset = ((FormatPresetItem*)get_selection(0, 0));
354         gui->get_edl()->copy_all(preset->edl);
355         gui->text->update(preset->get_text());
356         gui->handle_event();
357         return 1;
358 }
359
360 FormatPresetItem::FormatPresetItem(MWindow *mwindow, 
361         FormatPresets *gui, 
362         char *text)
363  : BC_ListBoxItem(text)
364 {
365         this->mwindow = mwindow;
366         this->gui = gui;
367         edl = new EDL;
368         edl->create_objects();
369         edl->copy_all(gui->get_edl());
370 }
371
372 FormatPresetItem::~FormatPresetItem()
373 {
374         edl->Garbage::remove_user();
375 }
376
377