4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
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.
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.
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
22 #include "browsebutton.h"
24 #include "cplayback.h"
28 #include "edlsession.h"
29 #include "filesystem.h"
31 #include "interlacemodes.h"
33 #include "levelwindow.h"
34 #include "mainerror.h"
39 #include "mwindowgui.h"
41 #include "newpresets.h"
42 #include "mainsession.h"
44 #include "preferences.h"
46 #include "transportque.h"
49 #include "videowindow.h"
50 #include "vplayback.h"
62 // offset for folder panel
65 New::New(MWindow *mwindow)
67 this->mwindow = mwindow;
77 int New::handle_event()
79 mwindow->gui->unlock_window();
80 mwindow->edl->save_defaults(mwindow->defaults);
83 mwindow->gui->lock_window("New::handle_event");
88 void New::create_new_edl()
92 new_edl->create_objects();
93 new_edl->load_defaults(mwindow->defaults);
98 int New::create_new_project(int load_mode)
100 mwindow->stop_playback(0);
101 mwindow->gui->lock_window();
102 mwindow->reset_caches();
104 memcpy(new_edl->session->achannel_positions,
105 &mwindow->preferences->channel_positions[new_edl->session->audio_channels - 1],
106 sizeof(new_edl->session->achannel_positions));
107 new_edl->session->boundaries();
108 new_edl->create_default_tracks();
109 if( load_mode == LOADMODE_NEW_TRACKS ) {
110 Tracks *tracks = mwindow->edl->tracks;
111 int vindex = tracks->total_video_tracks();
112 int aindex = tracks->total_audio_tracks();
113 for( Track *track=new_edl->tracks->first; track; track=track->next ) {
114 switch( track->data_type ) {
116 sprintf(track->title, _("Audio %d"), ++aindex);
119 sprintf(track->title, _("Video %d"), ++vindex);
124 mwindow->undo->update_undo_before();
125 mwindow->set_filename(new_edl->path);
126 ArrayList<EDL *>new_edls;
127 new_edls.append(new_edl);
128 mwindow->paste_edls(&new_edls, load_mode, 0,0,0,0,0,0);
129 new_edl->remove_user();
132 // Load file sequence
133 mwindow->update_project(load_mode);
134 mwindow->session->changes_made = 0;
135 mwindow->undo->update_undo_after(load_mode == LOADMODE_REPLACE ?
136 _("New Project") : _("Append to Project"), LOAD_ALL);
137 mwindow->gui->unlock_window();
141 NewProject::NewProject(MWindow *mwindow)
142 : BC_MenuItem(_("New Project..."), "n", 'n'), New(mwindow)
145 NewProject::~NewProject()
149 void NewProject::create_objects()
151 thread = new NewThread(mwindow, this,
152 _(PROGRAM_NAME ": New Project"), LOADMODE_REPLACE);
155 AppendTracks::AppendTracks(MWindow *mwindow)
156 : BC_MenuItem(_("Append to Project..."), "N", 'N'), New(mwindow)
160 AppendTracks::~AppendTracks()
164 void AppendTracks::create_objects()
166 thread = new NewThread(mwindow, this,
167 _(PROGRAM_NAME ": Append to Project"), LOADMODE_NEW_TRACKS);
171 NewThread::NewThread(MWindow *mwindow, New *new_project,
172 const char *title, int load_mode)
175 this->mwindow = mwindow;
176 this->new_project = new_project;
178 this->load_mode = load_mode;
182 NewThread::~NewThread()
187 BC_Window* NewThread::new_gui()
189 mwindow->edl->save_defaults(mwindow->defaults);
190 new_project->create_new_edl();
193 mwindow->gui->lock_window("NewThread::new_gui");
194 int x = mwindow->gui->get_pop_cursor_x(0);
195 int y = mwindow->gui->get_pop_cursor_y(0);
197 nwindow = new NewWindow(mwindow, this, x, y);
198 nwindow->create_objects();
199 mwindow->gui->unlock_window();
203 void NewThread::handle_done_event(int result)
206 const char *project_folder = nwindow->folder->get_text();
207 const char *project_name = nwindow->name->get_text();
208 if( project_folder[0] && project_name[0] ) {
209 nwindow->recent_folder->add_item("PROJECT", project_folder);
210 char project_path[BCTEXTLEN], *ep = project_path + sizeof(project_path);
211 FileSystem fs; fs.join_names(project_path, project_folder, project_name);
212 char *bp = strrchr(project_path, '/');
213 if( !bp ) bp = project_path;
214 bp = strrchr(bp, '.');
215 if( !bp ) bp = project_path + strlen(project_path);
216 if( strcasecmp(bp,".xml") ) snprintf(bp, ep-bp, ".xml");
217 fs.complete_path(project_path);
218 EDL *new_edl = new_project->new_edl;
219 bp = FileSystem::basepath(project_path);
220 strcpy(new_edl->path, bp); delete [] bp;
225 void NewThread::handle_close_event(int result)
227 if( !new_project->new_edl ) return;
230 char *path = new_project->new_edl->path;
233 while( *bp == '/' ) ++bp;
234 if( !(bp = strchr(bp, '/')) ) break;
235 char dir_path[BCTEXTLEN];
237 strncpy(dir_path, path, len);
239 if( fs.is_dir(dir_path) ) continue;
240 if( fs.create_dir(dir_path) ) {
241 eprintf(_("Cannot create and access project path:\n%s"),
248 new_project->new_edl->save_defaults(mwindow->defaults);
249 mwindow->defaults->save();
250 new_project->create_new_project(load_mode);
253 new_project->new_edl->Garbage::remove_user();
254 new_project->new_edl = 0;
258 int NewThread::load_defaults()
260 auto_aspect = mwindow->defaults->get("AUTOASPECT", 0);
264 int NewThread::save_defaults()
266 mwindow->defaults->update("AUTOASPECT", auto_aspect);
270 int NewThread::update_aspect()
273 char string[BCTEXTLEN];
274 mwindow->create_aspect_ratio(new_project->new_edl->session->aspect_w,
275 new_project->new_edl->session->aspect_h,
276 new_project->new_edl->session->output_w,
277 new_project->new_edl->session->output_h);
278 sprintf(string, "%.02f", new_project->new_edl->session->aspect_w);
279 if( nwindow->aspect_w_text ) nwindow->aspect_w_text->update(string);
280 sprintf(string, "%.02f", new_project->new_edl->session->aspect_h);
281 if( nwindow->aspect_h_text )nwindow->aspect_h_text->update(string);
287 NewWindow::NewWindow(MWindow *mwindow, NewThread *new_thread, int x, int y)
288 : BC_Window(new_thread->title, x, y,
289 WIDTH, new_thread->load_mode == LOADMODE_REPLACE ? HEIGHT0 : HEIGHT1,
292 this->mwindow = mwindow;
293 this->new_thread = new_thread;
294 this->new_edl = new_thread->new_project->new_edl;
305 interlace_pulldown = 0;
312 NewWindow::~NewWindow()
314 lock_window("NewWindow::~NewWindow");
315 delete format_presets;
319 void NewWindow::create_objects()
321 int x = 10, y = 10, x1, y1;
325 lock_window("NewWindow::create_objects");
326 mwindow->theme->draw_new_bg(this);
328 add_subwindow( new BC_Title(x, y, new_thread->load_mode == LOADMODE_REPLACE ?
329 _("Parameters for the new project:") :
330 _("Parameters for additional tracks:") ) );
333 format_presets = new NewPresets(mwindow,
337 format_presets->create_objects();
338 x = format_presets->x;
339 y = format_presets->y;
343 add_subwindow(new BC_Title(x, y, _("Audio"), LARGEFONT));
347 add_subwindow(new BC_Title(x1, y, _("Tracks:")));
349 add_subwindow(atracks = new NewATracks(this, "", x1, y));
350 x1 += atracks->get_w();
351 add_subwindow(new NewATracksTumbler(this, x1, y));
352 y += atracks->get_h() + 5;
354 if( new_thread->load_mode == LOADMODE_REPLACE ) {
356 add_subwindow(new BC_Title(x1, y, _("Channels:")));
358 add_subwindow(achannels = new NewAChannels(this, "", x1, y));
359 x1 += achannels->get_w();
360 add_subwindow(new NewAChannelsTumbler(this, x1, y));
361 y += achannels->get_h() + 5;
364 add_subwindow(new BC_Title(x1, y, _("Samplerate:")));
366 add_subwindow(sample_rate = new NewSampleRate(this, "", x1, y));
367 x1 += sample_rate->get_w();
368 add_subwindow(new SampleRatePulldown(mwindow, sample_rate, x1, y));
373 add_subwindow(new BC_Title(x, y, _("Video"), LARGEFONT));
376 add_subwindow(new BC_Title(x1, y, _("Tracks:")));
378 add_subwindow(vtracks = new NewVTracks(this, "", x1, y));
379 x1 += vtracks->get_w();
380 add_subwindow(new NewVTracksTumbler(this, x1, y));
381 y += vtracks->get_h() + 5;
383 if( new_thread->load_mode == LOADMODE_REPLACE ) {
385 // add_subwindow(new BC_Title(x1, y, _("Channels:")));
387 // add_subwindow(vchannels = new NewVChannels(this, "", x1, y));
388 // x1 += vchannels->get_w();
389 // add_subwindow(new NewVChannelsTumbler(this, x1, y));
390 // y += vchannels->get_h() + 5;
392 add_subwindow(new BC_Title(x1, y, _("Framerate:")));
394 add_subwindow(frame_rate = new NewFrameRate(this, "", x1, y));
395 x1 += frame_rate->get_w();
396 add_subwindow(new FrameRatePulldown(mwindow, frame_rate, x1, y));
397 y += frame_rate->get_h() + 5;
400 // add_subwindow(new BC_Title(x1, y, _("Canvas size:")));
402 // add_subwindow(canvas_w_text = new NewTrackW(this, x1, y));
403 // x1 += canvas_w_text->get_w() + 2;
404 // add_subwindow(new BC_Title(x1, y, "x"));
406 // add_subwindow(canvas_h_text = new NewTrackH(this, x1, y));
407 // x1 += canvas_h_text->get_w();
408 // add_subwindow(new FrameSizePulldown(mwindow,
414 // add_subwindow(new NewCloneToggle(mwindow, this, x1, y));
415 // y += canvas_h_text->get_h() + 5;
418 add_subwindow(new BC_Title(x1, y, new_thread->load_mode == LOADMODE_REPLACE ?
419 _("Canvas size:") : _("Track size:")));
421 add_subwindow(output_w_text = new NewOutputW(this, x1, y));
422 x1 += output_w_text->get_w() + 2;
423 add_subwindow(new BC_Title(x1, y, "x"));
425 add_subwindow(output_h_text = new NewOutputH(this, x1, y));
426 x1 += output_h_text->get_w();
427 FrameSizePulldown *pulldown;
428 add_subwindow(pulldown = new FrameSizePulldown(mwindow->theme,
433 x1 += pulldown->get_w() + 10;
434 add_subwindow(new NewSwapExtents(mwindow, this, x1, y));
435 y += output_h_text->get_h() + 5;
437 if( new_thread->load_mode == LOADMODE_REPLACE ) {
439 add_subwindow(new BC_Title(x1, y, _("Aspect ratio:")));
441 add_subwindow(aspect_w_text = new NewAspectW(this, "", x1, y));
442 x1 += aspect_w_text->get_w() + 2;
443 add_subwindow(new BC_Title(x1, y, ":"));
445 add_subwindow(aspect_h_text = new NewAspectH(this, "", x1, y));
446 x1 += aspect_h_text->get_w();
447 add_subwindow(new AspectPulldown(mwindow,
448 aspect_w_text, aspect_h_text, x1, y));
450 x1 = aspect_w_text->get_x();
451 y += aspect_w_text->get_h() + 5;
452 add_subwindow(new NewAspectAuto(this, x1, y));
454 add_subwindow(title = new BC_Title(x, y, _("Color model:")));
455 x1 = x + title->get_w();
456 y1 = y; y += title->get_h() + 10;
457 add_subwindow(title = new BC_Title(x, y, _("Interlace mode:")));
458 int x2 = x + title->get_w();
459 int y2 = y; y += title->get_h() + 10;
460 if( x1 < x2 ) x1 = x2;
462 add_subwindow(textbox = new BC_TextBox(x1, y1, 150, 1, ""));
463 add_subwindow(color_model = new ColormodelPulldown(mwindow,
464 textbox, &new_edl->session->color_model, x1+textbox->get_w(), y1));
465 add_subwindow(textbox = new BC_TextBox(x1, y2, 150, 1, ""));
466 add_subwindow(interlace_pulldown = new InterlacemodePulldown(mwindow,
467 textbox, &new_edl->session->interlace_mode,
468 (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_project_modes,
469 x1+textbox->get_w(), y2));
472 add_subwindow(title = new BC_Title(x, y, _("Create project folder in:")));
473 x1 = x; y += title->get_h() + 5;
474 add_subwindow(folder = new BC_TextBox(x1, y, get_w()-x1-64, 1, ""));
475 x1 += folder->get_w() + 10;
476 add_subwindow(recent_folder = new BC_RecentList("FOLDER", mwindow->defaults, folder));
477 recent_folder->load_items("PROJECT");
478 x1 = recent_folder->get_x() + recent_folder->get_w();
479 add_subwindow(new BrowseButton(mwindow->theme, this, folder, x1, y, "",
480 _("Project Directory"), _("Project Directory Path:"), 1));
481 y += folder->get_h() + 10; x1 = x;
482 add_subwindow(title = new BC_Title(x1, y, _("Project Name:")));
483 x1 += title->get_w() + 10;
484 add_subwindow(name = new BC_TextBox(x1, y, get_w()-x1-64, 1, ""));
487 add_subwindow(new BC_OKButton(this,
488 mwindow->theme->get_image_set("new_ok_images")));
489 add_subwindow(new BC_CancelButton(this,
490 mwindow->theme->get_image_set("new_cancel_images")));
497 int NewWindow::update()
499 if( atracks ) atracks->update((int64_t)new_edl->session->audio_tracks);
500 if( achannels ) achannels->update((int64_t)new_edl->session->audio_channels);
501 if( sample_rate ) sample_rate->update((int64_t)new_edl->session->sample_rate);
502 if( vtracks ) vtracks->update((int64_t)new_edl->session->video_tracks);
503 if( frame_rate ) frame_rate->update((float)new_edl->session->frame_rate);
504 if( output_w_text ) output_w_text->update((int64_t)new_edl->session->output_w);
505 if( output_h_text ) output_h_text->update((int64_t)new_edl->session->output_h);
506 if( aspect_w_text ) aspect_w_text->update((float)new_edl->session->aspect_w);
507 if( aspect_h_text ) aspect_h_text->update((float)new_edl->session->aspect_h);
508 if( interlace_pulldown ) interlace_pulldown->update(new_edl->session->interlace_mode);
509 if( color_model ) color_model->update_value(new_edl->session->color_model);
514 NewPresets::NewPresets(MWindow *mwindow, NewWindow *gui, int x, int y)
515 : FormatPresets(mwindow, gui, 0, x, y)
519 NewPresets::~NewPresets()
523 int NewPresets::handle_event()
529 EDL* NewPresets::get_edl()
531 return new_gui->new_edl;
535 NewATracks::NewATracks(NewWindow *nwindow, const char *text, int x, int y)
536 : BC_TextBox(x, y, 90, 1, text)
538 this->nwindow = nwindow;
541 int NewATracks::handle_event()
543 nwindow->new_edl->session->audio_tracks = atol(get_text());
547 NewATracksTumbler::NewATracksTumbler(NewWindow *nwindow, int x, int y)
550 this->nwindow = nwindow;
552 int NewATracksTumbler::handle_up_event()
554 nwindow->new_edl->session->audio_tracks++;
555 nwindow->new_edl->boundaries();
559 int NewATracksTumbler::handle_down_event()
561 nwindow->new_edl->session->audio_tracks--;
562 nwindow->new_edl->boundaries();
568 NewAChannels::NewAChannels(NewWindow *nwindow, const char *text, int x, int y)
569 : BC_TextBox(x, y, 90, 1, text)
571 this->nwindow = nwindow;
574 int NewAChannels::handle_event()
576 nwindow->new_edl->session->audio_channels = atol(get_text());
581 NewAChannelsTumbler::NewAChannelsTumbler(NewWindow *nwindow, int x, int y)
584 this->nwindow = nwindow;
586 int NewAChannelsTumbler::handle_up_event()
588 nwindow->new_edl->session->audio_channels++;
589 nwindow->new_edl->boundaries();
593 int NewAChannelsTumbler::handle_down_event()
595 nwindow->new_edl->session->audio_channels--;
596 nwindow->new_edl->boundaries();
602 NewSampleRate::NewSampleRate(NewWindow *nwindow, const char *text, int x, int y)
603 : BC_TextBox(x, y, 90, 1, text)
605 this->nwindow = nwindow;
608 int NewSampleRate::handle_event()
610 nwindow->new_edl->session->sample_rate = atol(get_text());
615 SampleRatePulldown::SampleRatePulldown(MWindow *mwindow, BC_TextBox *output, int x, int y)
616 : BC_ListBox(x, y, 100, 200, LISTBOX_TEXT,
617 &mwindow->theme->sample_rates, 0, 0, 1, 0, 1)
619 this->mwindow = mwindow;
620 this->output = output;
622 int SampleRatePulldown::handle_event()
624 char *text = get_selection(0, 0)->get_text();
625 output->update(text);
626 output->handle_event();
631 NewVTracks::NewVTracks(NewWindow *nwindow, const char *text, int x, int y)
632 : BC_TextBox(x, y, 90, 1, text)
634 this->nwindow = nwindow;
637 int NewVTracks::handle_event()
639 nwindow->new_edl->session->video_tracks = atol(get_text());
644 NewVTracksTumbler::NewVTracksTumbler(NewWindow *nwindow, int x, int y)
647 this->nwindow = nwindow;
649 int NewVTracksTumbler::handle_up_event()
651 nwindow->new_edl->session->video_tracks++;
652 nwindow->new_edl->boundaries();
656 int NewVTracksTumbler::handle_down_event()
658 nwindow->new_edl->session->video_tracks--;
659 nwindow->new_edl->boundaries();
665 NewVChannels::NewVChannels(NewWindow *nwindow, const char *text, int x, int y)
666 : BC_TextBox(x, y, 90, 1, text)
668 this->nwindow = nwindow;
671 int NewVChannels::handle_event()
673 nwindow->new_edl->session->video_channels = atol(get_text());
678 NewVChannelsTumbler::NewVChannelsTumbler(NewWindow *nwindow, int x, int y)
681 this->nwindow = nwindow;
683 int NewVChannelsTumbler::handle_up_event()
685 nwindow->new_edl->session->video_channels++;
686 nwindow->new_edl->boundaries();
690 int NewVChannelsTumbler::handle_down_event()
692 nwindow->new_edl->session->video_channels--;
693 nwindow->new_edl->boundaries();
699 NewFrameRate::NewFrameRate(NewWindow *nwindow, const char *text, int x, int y)
700 : BC_TextBox(x, y, 90, 1, text)
702 this->nwindow = nwindow;
705 int NewFrameRate::handle_event()
707 nwindow->new_edl->session->frame_rate = Units::atoframerate(get_text());
712 FrameRatePulldown::FrameRatePulldown(MWindow *mwindow,
713 BC_TextBox *output, int x, int y)
714 : BC_ListBox(x, y, 150, 250, LISTBOX_TEXT,
715 &mwindow->theme->frame_rates, 0, 0, 1, 0, 1)
717 this->mwindow = mwindow;
718 this->output = output;
720 int FrameRatePulldown::handle_event()
722 char *text = get_selection(0, 0)->get_text();
723 output->update(text);
724 output->handle_event();
728 FrameSizePulldown::FrameSizePulldown(Theme *theme,
729 BC_TextBox *output_w, BC_TextBox *output_h, int x, int y)
730 : BC_ListBox(x, y, 180, 250, LISTBOX_TEXT,
731 &theme->frame_sizes, 0, 0, 1, 0, 1)
734 this->output_w = output_w;
735 this->output_h = output_h;
738 int FrameSizePulldown::handle_event()
740 char *text = get_selection(0, 0)->get_text();
741 char string[BCTEXTLEN];
745 strcpy(string, text);
746 ptr = strrchr(string, 'x');
755 output_w->handle_event();
756 output_h->handle_event();
762 NewOutputW::NewOutputW(NewWindow *nwindow, int x, int y)
763 : BC_TextBox(x, y, 70, 1, nwindow->new_edl->session->output_w)
765 this->nwindow = nwindow;
767 int NewOutputW::handle_event()
769 nwindow->new_edl->session->output_w = MAX(1,atol(get_text()));
770 nwindow->new_thread->update_aspect();
775 NewOutputH::NewOutputH(NewWindow *nwindow, int x, int y)
776 : BC_TextBox(x, y, 70, 1, nwindow->new_edl->session->output_h)
778 this->nwindow = nwindow;
780 int NewOutputH::handle_event()
782 nwindow->new_edl->session->output_h = MAX(1, atol(get_text()));
783 nwindow->new_thread->update_aspect();
788 NewAspectW::NewAspectW(NewWindow *nwindow, const char *text, int x, int y)
789 : BC_TextBox(x, y, 70, 1, text)
791 this->nwindow = nwindow;
794 int NewAspectW::handle_event()
796 nwindow->new_edl->session->aspect_w = atof(get_text());
801 NewAspectH::NewAspectH(NewWindow *nwindow, const char *text, int x, int y)
802 : BC_TextBox(x, y, 70, 1, text)
804 this->nwindow = nwindow;
807 int NewAspectH::handle_event()
809 nwindow->new_edl->session->aspect_h = atof(get_text());
814 AspectPulldown::AspectPulldown(MWindow *mwindow,
815 BC_TextBox *output_w, BC_TextBox *output_h, int x, int y)
816 : BC_ListBox(x, y, 100, 200, LISTBOX_TEXT,
817 &mwindow->theme->aspect_ratios, 0, 0, 1, 0, 1)
819 this->mwindow = mwindow;
820 this->output_w = output_w;
821 this->output_h = output_h;
824 int AspectPulldown::handle_event()
826 char *text = get_selection(0, 0)->get_text();
827 char string[BCTEXTLEN];
831 strcpy(string, text);
832 ptr = strrchr(string, ':');
841 output_w->handle_event();
842 output_h->handle_event();
848 ColormodelItem::ColormodelItem(const char *text, int value)
849 : BC_ListBoxItem(text)
854 ColormodelPulldown::ColormodelPulldown(MWindow *mwindow,
855 BC_TextBox *output_text, int *output_value, int x, int y)
856 : BC_ListBox(x, y, 200, 150, LISTBOX_TEXT,
857 (ArrayList<BC_ListBoxItem*>*)&mwindow->colormodels, 0, 0, 1, 0, 1)
859 this->mwindow = mwindow;
860 this->output_text = output_text;
861 this->output_value = output_value;
862 output_text->update(colormodel_to_text());
865 int ColormodelPulldown::handle_event()
867 output_text->update(get_selection(0, 0)->get_text());
868 *output_value = ((ColormodelItem*)get_selection(0, 0))->value;
872 const char* ColormodelPulldown::colormodel_to_text()
874 for( int i=0; i<mwindow->colormodels.total; ++i )
875 if( mwindow->colormodels.values[i]->value == *output_value )
876 return mwindow->colormodels.values[i]->get_text();
880 void ColormodelPulldown::update_value(int value)
882 *output_value = value;
883 output_text->update(colormodel_to_text());
887 InterlacemodeItem::InterlacemodeItem(const char *text, int value)
888 : BC_ListBoxItem(text)
893 InterlacemodePulldown::InterlacemodePulldown(MWindow *mwindow,
894 BC_TextBox *output_text,
896 ArrayList<BC_ListBoxItem*> *data,
899 : BC_ListBox(x, y, 200, 150, LISTBOX_TEXT, data, 0, 0, 1, 0, 1)
901 this->mwindow = mwindow;
902 this->output_text = output_text;
903 this->output_value = output_value;
904 output_text->update(interlacemode_to_text());
907 int InterlacemodePulldown::handle_event()
909 output_text->update(get_selection(0, 0)->get_text());
910 *output_value = ((InterlacemodeItem*)get_selection(0, 0))->value;
914 const char* InterlacemodePulldown::interlacemode_to_text()
916 ilacemode_to_text(this->string,*output_value);
917 return (this->string);
920 int InterlacemodePulldown::update(int interlace_mode)
922 *output_value = interlace_mode;
923 output_text->update(interlacemode_to_text());
928 NewAspectAuto::NewAspectAuto(NewWindow *nwindow, int x, int y)
929 : BC_CheckBox(x, y, nwindow->new_thread->auto_aspect, _("Auto aspect ratio"))
931 this->nwindow = nwindow;
933 NewAspectAuto::~NewAspectAuto()
936 int NewAspectAuto::handle_event()
938 nwindow->new_thread->auto_aspect = get_value();
939 nwindow->new_thread->update_aspect();
944 NewSwapExtents::NewSwapExtents(MWindow *mwindow, NewWindow *gui, int x, int y)
945 : BC_Button(x, y, mwindow->theme->get_image_set("swap_extents"))
947 this->mwindow = mwindow;
949 set_tooltip(_("Swap dimensions"));
952 int NewSwapExtents::handle_event()
954 int w = gui->new_edl->session->output_w;
955 int h = gui->new_edl->session->output_h;
956 gui->new_edl->session->output_w = h;
957 gui->new_edl->session->output_h = w;
958 gui->output_w_text->update((int64_t)h);
959 gui->output_h_text->update((int64_t)w);
960 gui->new_thread->update_aspect();