4 * Copyright (C) 1997-2014 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
24 #include "batchrender.h"
25 #include "bcdisplayinfo.h"
27 #include "bcsignals.h"
29 #include "channelinfo.h"
30 #include "cplayback.h"
31 #include "cropvideo.h"
33 #include "cwindowgui.h"
36 #include "edlsession.h"
37 #include "featheredits.h"
38 #include "filesystem.h"
42 #include "levelwindow.h"
44 #include "localsession.h"
45 #include "mainclock.h"
47 #include "mainsession.h"
49 #include "menuattacheffect.h"
50 #include "menuattachtransition.h"
51 #include "menuaeffects.h"
52 #include "menueditlength.h"
53 #include "menutransitionlength.h"
54 #include "menuveffects.h"
55 #include "mwindowgui.h"
59 #include "playbackengine.h"
60 #include "preferences.h"
61 #include "preferencesthread.h"
66 #include "setformat.h"
69 #include "trackcanvas.h"
71 #include "transition.h"
72 #include "transportque.h"
79 MainMenu::MainMenu(MWindow *mwindow, MWindowGUI *gui, int w)
83 this->mwindow = mwindow;
90 void MainMenu::create_objects()
92 BC_Menu *viewmenu, *windowmenu, *settingsmenu, *trackmenu;
93 PreferencesMenuitem *preferences;
96 add_menu(filemenu = new BC_Menu(_("File")));
97 filemenu->add_item(new_project = new New(mwindow));
98 new_project->create_objects();
101 filemenu->add_item(load_file = new Load(mwindow, this));
102 load_file->create_objects();
104 // new and load can be undone so no need to prompt save
105 Save *save; // affected by saveas
106 filemenu->add_item(save = new Save(mwindow));
108 filemenu->add_item(saveas = new SaveAs(mwindow));
109 save->create_objects(saveas);
110 saveas->set_mainmenu(this);
111 filemenu->add_item(record_menu_item = new RecordMenuItem(mwindow));
112 filemenu->add_item(new ChannelScan(mwindow));
113 if( mwindow->has_commercials() )
114 filemenu->add_item(new DbWindowScan(mwindow));
115 filemenu->add_item(new SubttlSWin(mwindow));
117 filemenu->add_item(render = new RenderItem(mwindow));
118 filemenu->add_item(new BatchRenderMenuItem(mwindow));
119 filemenu->add_item(new CreateDVD_MenuItem(mwindow));
120 filemenu->add_item(new BC_MenuItem("-"));
121 filemenu->add_item(quit_program = new Quit(mwindow));
122 quit_program->create_objects(save);
123 filemenu->add_item(new DumpEDL(mwindow));
124 filemenu->add_item(new DumpPlugins(mwindow));
125 filemenu->add_item(new LoadBackup(mwindow));
126 filemenu->add_item(new SaveBackup(mwindow));
129 add_menu(editmenu = new BC_Menu(_("Edit")));
130 editmenu->add_item(undo = new Undo(mwindow));
131 editmenu->add_item(redo = new Redo(mwindow));
132 editmenu->add_item(new BC_MenuItem("-"));
133 editmenu->add_item(new Cut(mwindow));
134 editmenu->add_item(new Copy(mwindow));
135 editmenu->add_item(new Paste(mwindow));
136 editmenu->add_item(new Clear(mwindow));
137 editmenu->add_item(new PasteSilence(mwindow));
138 editmenu->add_item(new MuteSelection(mwindow));
139 editmenu->add_item(new TrimSelection(mwindow));
140 editmenu->add_item(new SelectAll(mwindow));
141 editmenu->add_item(new BC_MenuItem("-"));
142 editmenu->add_item(new MenuEditShuffle(mwindow));
143 editmenu->add_item(new MenuEditLength(mwindow));
144 editmenu->add_item(new MenuEditAlign(mwindow));
145 editmenu->add_item(new MenuTransitionLength(mwindow));
146 editmenu->add_item(new DetachTransitions(mwindow));
147 editmenu->add_item(new BC_MenuItem("-"));
148 editmenu->add_item(new ClearLabels(mwindow));
149 editmenu->add_item(new CutCommercials(mwindow));
150 editmenu->add_item(new PasteSubttl(mwindow));
152 BC_Menu *keyframemenu;
153 add_menu(keyframemenu = new BC_Menu(_("Keyframes")));
154 keyframemenu->add_item(new CutKeyframes(mwindow));
155 keyframemenu->add_item(new CopyKeyframes(mwindow));
156 keyframemenu->add_item(new PasteKeyframes(mwindow));
157 keyframemenu->add_item(new ClearKeyframes(mwindow));
158 keyframemenu->add_item(new StraightenKeyframes(mwindow));
159 keyframemenu->add_item(new BendKeyframes(mwindow));
160 keyframemenu->add_item(keyframe_type = new KeyframeType(mwindow,
161 mwindow->edl->local_session->floatauto_type));
162 keyframemenu->add_item(new BC_MenuItem("-"));
163 keyframemenu->add_item(new CopyDefaultKeyframe(mwindow));
164 keyframemenu->add_item(new PasteDefaultKeyframe(mwindow));
169 add_menu(audiomenu = new BC_Menu(_("Audio")));
170 audiomenu->add_item(new AddAudioTrack(mwindow));
171 audiomenu->add_item(new DefaultATransition(mwindow));
172 audiomenu->add_item(new MapAudio1(mwindow));
173 audiomenu->add_item(new MapAudio2(mwindow));
174 audiomenu->add_item(new MenuAttachTransition(mwindow, TRACK_AUDIO));
175 audiomenu->add_item(new MenuAttachEffect(mwindow, TRACK_AUDIO));
176 audiomenu->add_item(aeffects = new MenuAEffects(mwindow));
178 add_menu(videomenu = new BC_Menu(_("Video")));
179 videomenu->add_item(new AddVideoTrack(mwindow));
180 videomenu->add_item(new DefaultVTransition(mwindow));
181 videomenu->add_item(new MenuAttachTransition(mwindow, TRACK_VIDEO));
182 videomenu->add_item(new MenuAttachEffect(mwindow, TRACK_VIDEO));
183 videomenu->add_item(veffects = new MenuVEffects(mwindow));
185 add_menu(trackmenu = new BC_Menu(_("Tracks")));
186 trackmenu->add_item(new MoveTracksUp(mwindow));
187 trackmenu->add_item(new MoveTracksDown(mwindow));
188 trackmenu->add_item(new DeleteTracks(mwindow));
189 trackmenu->add_item(new DeleteTrack(mwindow));
190 trackmenu->add_item(new ConcatenateTracks(mwindow));
191 trackmenu->add_item(new AddSubttlTrack(mwindow));
193 add_menu(settingsmenu = new BC_Menu(_("Settings")));
195 settingsmenu->add_item(new SetFormat(mwindow));
196 settingsmenu->add_item(preferences = new PreferencesMenuitem(mwindow));
197 mwindow->preferences_thread = preferences->thread;
198 settingsmenu->add_item(labels_follow_edits = new LabelsFollowEdits(mwindow));
199 settingsmenu->add_item(plugins_follow_edits = new PluginsFollowEdits(mwindow));
200 settingsmenu->add_item(keyframes_follow_edits = new KeyframesFollowEdits(mwindow));
201 settingsmenu->add_item(cursor_on_frames = new CursorOnFrames(mwindow));
202 settingsmenu->add_item(typeless_keyframes = new TypelessKeyframes(mwindow));
203 settingsmenu->add_item(new SaveSettingsNow(mwindow));
204 settingsmenu->add_item(loop_playback = new LoopPlayback(mwindow));
205 settingsmenu->add_item(new SetBRenderStart(mwindow));
206 // set scrubbing speed
207 // ScrubSpeed *scrub_speed;
208 // settingsmenu->add_item(scrub_speed = new ScrubSpeed(mwindow));
209 // if(mwindow->edl->session->scrub_speed == .5)
210 // scrub_speed->set_text(_("Fast Shuttle"));
217 add_menu(viewmenu = new BC_Menu(_("View")));
218 viewmenu->add_item(show_assets = new ShowAssets(mwindow, "0"));
219 viewmenu->add_item(show_titles = new ShowTitles(mwindow, "1"));
220 viewmenu->add_item(show_transitions = new ShowTransitions(mwindow, "2"));
221 viewmenu->add_item(fade_automation = new ShowAutomation(mwindow, _("Fade"), "3", AUTOMATION_FADE));
222 viewmenu->add_item(mute_automation = new ShowAutomation(mwindow, _("Mute"), "4", AUTOMATION_MUTE));
223 viewmenu->add_item(mode_automation = new ShowAutomation(mwindow, _("Mode"), "5", AUTOMATION_MODE));
224 viewmenu->add_item(pan_automation = new ShowAutomation(mwindow, _("Pan"), "6", AUTOMATION_PAN));
225 viewmenu->add_item(plugin_automation = new PluginAutomation(mwindow, "7"));
226 viewmenu->add_item(mask_automation = new ShowAutomation(mwindow, _("Mask"), "8", AUTOMATION_MASK));
227 viewmenu->add_item(speed_automation = new ShowAutomation(mwindow, _("Speed"), "9", AUTOMATION_SPEED));
228 viewmenu->add_item(camera_x = new ShowAutomation(mwindow, _("Camera X"), "", AUTOMATION_CAMERA_X));
229 viewmenu->add_item(camera_y = new ShowAutomation(mwindow, _("Camera Y"), "", AUTOMATION_CAMERA_Y));
230 viewmenu->add_item(camera_z = new ShowAutomation(mwindow, _("Camera Z"), "", AUTOMATION_CAMERA_Z));
231 viewmenu->add_item(project_x = new ShowAutomation(mwindow, _("Projector X"), "", AUTOMATION_PROJECTOR_X));
232 viewmenu->add_item(project_y = new ShowAutomation(mwindow, _("Projector Y"), "", AUTOMATION_PROJECTOR_Y));
233 viewmenu->add_item(project_z = new ShowAutomation(mwindow, _("Projector Z"), "", AUTOMATION_PROJECTOR_Z));
236 add_menu(windowmenu = new BC_Menu(_("Window")));
237 windowmenu->add_item(show_vwindow = new ShowVWindow(mwindow));
238 windowmenu->add_item(show_awindow = new ShowAWindow(mwindow));
239 windowmenu->add_item(show_cwindow = new ShowCWindow(mwindow));
240 windowmenu->add_item(show_gwindow = new ShowGWindow(mwindow));
241 windowmenu->add_item(show_lwindow = new ShowLWindow(mwindow));
242 windowmenu->add_item(split_x = new SplitX(mwindow));
243 windowmenu->add_item(split_y = new SplitY(mwindow));
244 windowmenu->add_item(new TileWindows(mwindow,_("Default positions"),-1,_("Ctrl+d"),'d'));
245 windowmenu->add_item(new TileWindows(mwindow,_("Tile left"),0));
246 windowmenu->add_item(new TileWindows(mwindow,_("Tile right"),1));
249 int MainMenu::load_defaults(BC_Hash *defaults)
251 init_loads(defaults);
252 init_aeffects(defaults);
253 init_veffects(defaults);
257 void MainMenu::update_toggles(int use_lock)
259 if(use_lock) lock_window("MainMenu::update_toggles");
260 keyframe_type->set_checked(mwindow->edl->local_session->floatauto_type == Auto::BEZIER);
261 labels_follow_edits->set_checked(mwindow->edl->session->labels_follow_edits);
262 plugins_follow_edits->set_checked(mwindow->edl->session->plugins_follow_edits);
263 keyframes_follow_edits->set_checked(mwindow->edl->session->autos_follow_edits);
264 typeless_keyframes->set_checked(mwindow->edl->session->typeless_keyframes);
265 cursor_on_frames->set_checked(mwindow->edl->session->cursor_on_frames);
266 loop_playback->set_checked(mwindow->edl->local_session->loop_playback);
268 show_assets->set_checked(mwindow->edl->session->show_assets);
269 show_titles->set_checked(mwindow->edl->session->show_titles);
270 show_transitions->set_checked(mwindow->edl->session->auto_conf->transitions);
271 fade_automation->update_toggle();
272 mute_automation->update_toggle();
273 pan_automation->update_toggle();
274 camera_x->update_toggle();
275 camera_y->update_toggle();
276 camera_z->update_toggle();
277 project_x->update_toggle();
278 project_y->update_toggle();
279 project_z->update_toggle();
280 plugin_automation->set_checked(mwindow->edl->session->auto_conf->plugins);
281 mode_automation->update_toggle();
282 mask_automation->update_toggle();
283 speed_automation->update_toggle();
284 split_x->set_checked(mwindow->gui->pane[TOP_RIGHT_PANE] != 0);
285 split_y->set_checked(mwindow->gui->pane[BOTTOM_LEFT_PANE] != 0);
287 if(use_lock) mwindow->gui->unlock_window();
290 int MainMenu::save_defaults(BC_Hash *defaults)
292 save_loads(defaults);
293 save_aeffects(defaults);
294 save_veffects(defaults);
304 quit_program->handle_event();
312 // ================================== load most recent
314 int MainMenu::init_aeffects(BC_Hash *defaults)
316 total_aeffects = defaults->get((char*)"TOTAL_AEFFECTS", 0);
318 char string[BCTEXTLEN], title[BCTEXTLEN];
319 if(total_aeffects) audiomenu->add_item(new BC_MenuItem("-"));
321 for(int i = 0; i < total_aeffects; i++)
323 sprintf(string, "AEFFECTRECENT%d", i);
324 defaults->get(string, title);
325 audiomenu->add_item(aeffect[i] = new MenuAEffectItem(aeffects, title));
330 int MainMenu::init_veffects(BC_Hash *defaults)
332 total_veffects = defaults->get((char*)"TOTAL_VEFFECTS", 0);
334 char string[BCTEXTLEN], title[BCTEXTLEN];
335 if(total_veffects) videomenu->add_item(new BC_MenuItem("-"));
337 for(int i = 0; i < total_veffects; i++)
339 sprintf(string, "VEFFECTRECENT%d", i);
340 defaults->get(string, title);
341 videomenu->add_item(veffect[i] = new MenuVEffectItem(veffects, title));
346 int MainMenu::init_loads(BC_Hash *defaults)
348 //printf("MainMenu::init_loads 1\n");
349 total_loads = defaults->get((char*)"TOTAL_LOADS", 0);
350 //printf("MainMenu::init_loads 1\n");
351 char string[BCTEXTLEN], path[BCTEXTLEN], filename[BCTEXTLEN];
352 //printf("MainMenu::init_loads 1\n");
354 //printf("MainMenu::init_loads 2\n");
355 if(total_loads > 0) filemenu->add_item(new BC_MenuItem("-"));
357 for(int i = 0; i < total_loads; i++)
359 sprintf(string, "LOADPREVIOUS%d", i);
360 //printf("MainMenu::init_loads 3\n");
361 defaults->get(string, path);
362 //printf("MainMenu::init_loads 4\n");
364 filemenu->add_item(load[i] = new LoadPrevious(mwindow, load_file));
365 //printf("MainMenu::init_loads 5\n");
366 dir.extract_name(filename, path, 0);
367 //printf("MainMenu::init_loads 6\n");
368 load[i]->set_text(filename);
369 //printf("MainMenu::init_loads 7\n");
370 load[i]->set_path(path);
371 //printf("MainMenu::init_loads 8\n");
373 //printf("MainMenu::init_loads 9\n");
377 // ============================ save most recent
379 int MainMenu::save_aeffects(BC_Hash *defaults)
381 defaults->update((char*)"TOTAL_AEFFECTS", total_aeffects);
382 char string[BCTEXTLEN];
383 for(int i = 0; i < total_aeffects; i++)
385 sprintf(string, "AEFFECTRECENT%d", i);
386 defaults->update(string, aeffect[i]->get_text());
391 int MainMenu::save_veffects(BC_Hash *defaults)
393 defaults->update((char*)"TOTAL_VEFFECTS", total_veffects);
394 char string[BCTEXTLEN];
395 for(int i = 0; i < total_veffects; i++)
397 sprintf(string, "VEFFECTRECENT%d", i);
398 defaults->update(string, veffect[i]->get_text());
403 int MainMenu::save_loads(BC_Hash *defaults)
405 defaults->update((char*)"TOTAL_LOADS", total_loads);
406 char string[BCTEXTLEN];
407 for(int i = 0; i < total_loads; i++)
409 sprintf(string, "LOADPREVIOUS%d", i);
410 defaults->update(string, load[i]->path);
415 // =================================== add most recent
417 int MainMenu::add_aeffect(char *title)
419 // add bar for first effect
420 if(total_aeffects == 0)
422 audiomenu->add_item(new BC_MenuItem("-"));
425 // test for existing copy of effect
426 for(int i = 0; i < total_aeffects; i++)
428 if(!strcmp(aeffect[i]->get_text(), title)) // already exists
429 { // swap for top effect
430 for(int j = i; j > 0; j--) // move preceeding effects down
432 aeffect[j]->set_text(aeffect[j - 1]->get_text());
434 aeffect[0]->set_text(title);
439 // add another blank effect
440 if(total_aeffects < TOTAL_EFFECTS)
443 aeffect[total_aeffects] = new MenuAEffectItem(aeffects, (char*)""));
448 for(int i = total_aeffects - 1; i > 0; i--)
450 // set menu item text
451 aeffect[i]->set_text(aeffect[i - 1]->get_text());
454 // set up the new effect
455 aeffect[0]->set_text(title);
459 int MainMenu::add_veffect(char *title)
461 // add bar for first effect
462 if(total_veffects == 0)
464 videomenu->add_item(new BC_MenuItem("-"));
467 // test for existing copy of effect
468 for(int i = 0; i < total_veffects; i++)
470 if(!strcmp(veffect[i]->get_text(), title)) // already exists
471 { // swap for top effect
472 for(int j = i; j > 0; j--) // move preceeding effects down
474 veffect[j]->set_text(veffect[j - 1]->get_text());
476 veffect[0]->set_text(title);
481 // add another blank effect
482 if(total_veffects < TOTAL_EFFECTS)
484 videomenu->add_item(veffect[total_veffects] =
485 new MenuVEffectItem(veffects, (char*)""));
490 for(int i = total_veffects - 1; i > 0; i--)
492 // set menu item text
493 veffect[i]->set_text(veffect[i - 1]->get_text());
496 // set up the new effect
497 veffect[0]->set_text(title);
501 int MainMenu::add_load(char *path)
505 filemenu->add_item(new BC_MenuItem("-"));
508 // test for existing copy
510 char text[BCTEXTLEN], new_path[BCTEXTLEN]; // get text and path
511 fs.extract_name(text, path);
512 strcpy(new_path, path);
514 for(int i = 0; i < total_loads; i++)
516 if(!strcmp(load[i]->get_text(), text)) // already exists
517 { // swap for top load
518 for(int j = i; j > 0; j--) // move preceeding loads down
520 load[j]->set_text(load[j - 1]->get_text());
521 load[j]->set_path(load[j - 1]->path);
523 load[0]->set_text(text);
524 load[0]->set_path(new_path);
531 if(total_loads < TOTAL_LOADS)
533 filemenu->add_item(load[total_loads] = new LoadPrevious(mwindow, load_file));
538 for(int i = total_loads - 1; i > 0; i--)
540 // set menu item text
541 load[i]->set_text(load[i - 1]->get_text());
543 load[i]->set_path(load[i - 1]->path);
546 // set up the new load
547 load[0]->set_text(text);
548 load[0]->set_path(new_path);
559 // ================================== menu items
562 DumpCICache::DumpCICache(MWindow *mwindow)
563 : BC_MenuItem(_("Dump CICache"))
564 { this->mwindow = mwindow; }
566 int DumpCICache::handle_event()
568 // mwindow->cache->dump();
572 DumpEDL::DumpEDL(MWindow *mwindow)
573 : BC_MenuItem(_("Dump EDL"))
575 this->mwindow = mwindow;
578 int DumpEDL::handle_event()
580 //printf("DumpEDL::handle_event 1\n");
582 //printf("DumpEDL::handle_event 2\n");
586 DumpPlugins::DumpPlugins(MWindow *mwindow)
587 : BC_MenuItem(_("Dump Plugins"))
589 this->mwindow = mwindow;
592 int DumpPlugins::handle_event()
594 //printf("DumpEDL::handle_event 1\n");
595 mwindow->dump_plugins();
596 //printf("DumpEDL::handle_event 2\n");
601 DumpAssets::DumpAssets(MWindow *mwindow)
602 : BC_MenuItem(_("Dump Assets"))
603 { this->mwindow = mwindow; }
605 int DumpAssets::handle_event()
607 mwindow->assets->dump();
611 // ================================================= edit
613 Undo::Undo(MWindow *mwindow) : BC_MenuItem(_("Undo"), "z", 'z')
615 this->mwindow = mwindow;
617 int Undo::handle_event()
619 mwindow->undo_entry(mwindow->gui);
622 int Undo::update_caption(const char *new_caption)
624 char string[BCTEXTLEN];
625 sprintf(string, _("Undo %s"), new_caption);
631 Redo::Redo(MWindow *mwindow) : BC_MenuItem(_("Redo"), _("Shift+Z"), 'Z')
634 this->mwindow = mwindow;
637 int Redo::handle_event()
639 mwindow->redo_entry(mwindow->gui);
643 int Redo::update_caption(const char *new_caption)
645 char string[BCTEXTLEN];
646 sprintf(string, _("Redo %s"), new_caption);
651 CutKeyframes::CutKeyframes(MWindow *mwindow)
652 : BC_MenuItem(_("Cut keyframes"), _("Shift-X"), 'X')
655 this->mwindow = mwindow;
658 int CutKeyframes::handle_event()
660 mwindow->cut_automation();
664 CopyKeyframes::CopyKeyframes(MWindow *mwindow)
665 : BC_MenuItem(_("Copy keyframes"), _("Shift-C"), 'C')
668 this->mwindow = mwindow;
671 int CopyKeyframes::handle_event()
673 mwindow->copy_automation();
677 PasteKeyframes::PasteKeyframes(MWindow *mwindow)
678 : BC_MenuItem(_("Paste keyframes"), _("Shift-V"), 'V')
681 this->mwindow = mwindow;
684 int PasteKeyframes::handle_event()
686 mwindow->paste_automation();
690 ClearKeyframes::ClearKeyframes(MWindow *mwindow)
691 : BC_MenuItem(_("Clear keyframes"), _("Shift-Del"), DELETE)
694 this->mwindow = mwindow;
697 int ClearKeyframes::handle_event()
699 mwindow->clear_automation();
705 StraightenKeyframes::StraightenKeyframes(MWindow *mwindow)
706 : BC_MenuItem(_("Change to linear"))
708 this->mwindow = mwindow;
711 int StraightenKeyframes::handle_event()
713 mwindow->set_automation_mode(Auto::LINEAR);
720 BendKeyframes::BendKeyframes(MWindow *mwindow)
721 : BC_MenuItem(_("Change to bezier"))
723 this->mwindow = mwindow;
726 int BendKeyframes::handle_event()
728 mwindow->set_automation_mode(Auto::BEZIER);
734 KeyframeType::KeyframeType(MWindow *mwindow, int type)
735 : BC_MenuItem(_("Create bezier"))
737 this->mwindow = mwindow;
738 set_checked(type == Auto::BEZIER);
741 int KeyframeType::handle_event()
744 mwindow->set_keyframe_type(Auto::LINEAR);
746 mwindow->set_keyframe_type(Auto::BEZIER);
756 CutDefaultKeyframe::CutDefaultKeyframe(MWindow *mwindow)
757 : BC_MenuItem(_("Cut default keyframe"), _("Alt-X"), 'X')
760 this->mwindow = mwindow;
763 int CutDefaultKeyframe::handle_event()
765 mwindow->cut_default_keyframe();
769 CopyDefaultKeyframe::CopyDefaultKeyframe(MWindow *mwindow)
770 : BC_MenuItem(_("Copy default keyframe"), _("Alt-c"), 'c')
773 this->mwindow = mwindow;
776 int CopyDefaultKeyframe::handle_event()
778 mwindow->copy_default_keyframe();
782 PasteDefaultKeyframe::PasteDefaultKeyframe(MWindow *mwindow)
783 : BC_MenuItem(_("Paste default keyframe"), _("Alt-v"), 'v')
786 this->mwindow = mwindow;
789 int PasteDefaultKeyframe::handle_event()
791 mwindow->paste_default_keyframe();
795 ClearDefaultKeyframe::ClearDefaultKeyframe(MWindow *mwindow)
796 : BC_MenuItem(_("Clear default keyframe"), _("Alt-Del"), BACKSPACE)
799 this->mwindow = mwindow;
802 int ClearDefaultKeyframe::handle_event()
804 mwindow->clear_default_keyframe();
808 Cut::Cut(MWindow *mwindow)
809 : BC_MenuItem(_("Cut"), "x", 'x')
811 this->mwindow = mwindow;
814 int Cut::handle_event()
820 Copy::Copy(MWindow *mwindow)
821 : BC_MenuItem(_("Copy"), "c", 'c')
823 this->mwindow = mwindow;
826 int Copy::handle_event()
832 Paste::Paste(MWindow *mwindow)
833 : BC_MenuItem(_("Paste"), "v", 'v')
835 this->mwindow = mwindow;
838 int Paste::handle_event()
844 Clear::Clear(MWindow *mwindow)
845 : BC_MenuItem(_("Clear"), _("Del"), BACKSPACE)
847 this->mwindow = mwindow;
850 int Clear::handle_event()
852 mwindow->cwindow->gui->lock_window("Clear::handle_event");
853 mwindow->clear_entry();
854 mwindow->cwindow->gui->unlock_window();
858 PasteSilence::PasteSilence(MWindow *mwindow)
859 : BC_MenuItem(_("Paste silence"), _("Shift+Space"), ' ')
861 this->mwindow = mwindow;
865 int PasteSilence::handle_event()
867 mwindow->paste_silence();
871 SelectAll::SelectAll(MWindow *mwindow)
872 : BC_MenuItem(_("Select All"), "a", 'a')
874 this->mwindow = mwindow;
877 int SelectAll::handle_event()
879 mwindow->select_all();
883 ClearLabels::ClearLabels(MWindow *mwindow) : BC_MenuItem(_("Clear labels"))
885 this->mwindow = mwindow;
888 int ClearLabels::handle_event()
890 mwindow->clear_labels();
894 CutCommercials::CutCommercials(MWindow *mwindow) : BC_MenuItem(_("Cut ads"))
896 this->mwindow = mwindow;
899 int CutCommercials::handle_event()
901 mwindow->cut_commercials();
905 DetachTransitions::DetachTransitions(MWindow *mwindow)
906 : BC_MenuItem(_("Detach transitions"))
908 this->mwindow = mwindow;
911 int DetachTransitions::handle_event()
913 mwindow->detach_transitions();
917 MuteSelection::MuteSelection(MWindow *mwindow)
918 : BC_MenuItem(_("Mute Region"), "m", 'm')
920 this->mwindow = mwindow;
923 int MuteSelection::handle_event()
925 mwindow->mute_selection();
930 TrimSelection::TrimSelection(MWindow *mwindow)
931 : BC_MenuItem(_("Trim Selection"))
933 this->mwindow = mwindow;
936 int TrimSelection::handle_event()
938 mwindow->trim_selection();
953 // ============================================= audio
955 AddAudioTrack::AddAudioTrack(MWindow *mwindow)
956 : BC_MenuItem(_("Add track"), "t", 't')
958 this->mwindow = mwindow;
961 int AddAudioTrack::handle_event()
963 mwindow->add_audio_track_entry(0, 0);
967 DeleteAudioTrack::DeleteAudioTrack(MWindow *mwindow)
968 : BC_MenuItem(_("Delete track"))
970 this->mwindow = mwindow;
973 int DeleteAudioTrack::handle_event()
978 DefaultATransition::DefaultATransition(MWindow *mwindow)
979 : BC_MenuItem(_("Default Transition"), "u", 'u')
981 this->mwindow = mwindow;
984 int DefaultATransition::handle_event()
986 mwindow->paste_audio_transition();
991 MapAudio1::MapAudio1(MWindow *mwindow)
992 : BC_MenuItem(_("Map 1:1"))
994 this->mwindow = mwindow;
997 int MapAudio1::handle_event()
999 mwindow->map_audio(MWindow::AUDIO_1_TO_1);
1003 MapAudio2::MapAudio2(MWindow *mwindow)
1004 : BC_MenuItem(_("Map 5.1:2"))
1006 this->mwindow = mwindow;
1009 int MapAudio2::handle_event()
1011 mwindow->map_audio(MWindow::AUDIO_5_1_TO_2);
1018 // ============================================= video
1021 AddVideoTrack::AddVideoTrack(MWindow *mwindow)
1022 : BC_MenuItem(_("Add track"), _("Shift-T"), 'T')
1025 this->mwindow = mwindow;
1028 int AddVideoTrack::handle_event()
1030 mwindow->add_video_track_entry();
1035 DeleteVideoTrack::DeleteVideoTrack(MWindow *mwindow)
1036 : BC_MenuItem(_("Delete track"))
1038 this->mwindow = mwindow;
1041 int DeleteVideoTrack::handle_event()
1048 ResetTranslation::ResetTranslation(MWindow *mwindow)
1049 : BC_MenuItem(_("Reset Translation"))
1051 this->mwindow = mwindow;
1054 int ResetTranslation::handle_event()
1061 DefaultVTransition::DefaultVTransition(MWindow *mwindow)
1062 : BC_MenuItem(_("Default Transition"), _("Shift-U"), 'U')
1065 this->mwindow = mwindow;
1068 int DefaultVTransition::handle_event()
1070 mwindow->paste_video_transition();
1087 // ============================================ settings
1089 DeleteTracks::DeleteTracks(MWindow *mwindow)
1090 : BC_MenuItem(_("Delete tracks"))
1092 this->mwindow = mwindow;
1095 int DeleteTracks::handle_event()
1097 mwindow->delete_tracks();
1101 DeleteTrack::DeleteTrack(MWindow *mwindow)
1102 : BC_MenuItem(_("Delete last track"), "d", 'd')
1104 this->mwindow = mwindow;
1107 int DeleteTrack::handle_event()
1109 mwindow->delete_track();
1113 MoveTracksUp::MoveTracksUp(MWindow *mwindow)
1114 : BC_MenuItem(_("Move tracks up"))
1116 set_shift(); this->mwindow = mwindow;
1119 int MoveTracksUp::handle_event()
1121 mwindow->move_tracks_up();
1125 MoveTracksDown::MoveTracksDown(MWindow *mwindow)
1126 : BC_MenuItem(_("Move tracks down"))
1128 set_shift(); this->mwindow = mwindow;
1131 int MoveTracksDown::handle_event()
1133 mwindow->move_tracks_down();
1140 ConcatenateTracks::ConcatenateTracks(MWindow *mwindow)
1141 : BC_MenuItem(_("Concatenate tracks"))
1144 this->mwindow = mwindow;
1147 int ConcatenateTracks::handle_event()
1149 mwindow->concatenate_tracks();
1157 LoopPlayback::LoopPlayback(MWindow *mwindow)
1158 : BC_MenuItem(_("Loop Playback"), _("Shift+L"), 'L')
1160 this->mwindow = mwindow;
1161 set_checked(mwindow->edl->local_session->loop_playback);
1165 int LoopPlayback::handle_event()
1167 mwindow->toggle_loop_playback();
1168 set_checked(mwindow->edl->local_session->loop_playback);
1174 // ============================================= subtitle
1177 AddSubttlTrack::AddSubttlTrack(MWindow *mwindow)
1178 : BC_MenuItem(_("Add subttl"), _("Shift-Y"), 'Y')
1181 this->mwindow = mwindow;
1184 int AddSubttlTrack::handle_event()
1186 mwindow->add_subttl_track_entry();
1190 PasteSubttl::PasteSubttl(MWindow *mwindow)
1191 : BC_MenuItem(_("paste subttl"), "y", 'y')
1193 this->mwindow = mwindow;
1196 int PasteSubttl::handle_event()
1198 mwindow->gui->swindow->paste_subttl();
1207 SetBRenderStart::SetBRenderStart(MWindow *mwindow)
1208 : BC_MenuItem(_("Set background render"))
1210 this->mwindow = mwindow;
1213 int SetBRenderStart::handle_event()
1215 mwindow->set_brender_start();
1225 LabelsFollowEdits::LabelsFollowEdits(MWindow *mwindow)
1226 : BC_MenuItem(_("Edit labels"))
1228 this->mwindow = mwindow;
1229 set_checked(mwindow->edl->session->labels_follow_edits);
1232 int LabelsFollowEdits::handle_event()
1234 set_checked(get_checked() ^ 1);
1235 mwindow->edl->session->labels_follow_edits = get_checked();
1242 PluginsFollowEdits::PluginsFollowEdits(MWindow *mwindow)
1243 : BC_MenuItem(_("Edit effects"))
1245 this->mwindow = mwindow;
1246 set_checked(mwindow->edl->session->plugins_follow_edits);
1249 int PluginsFollowEdits::handle_event()
1251 set_checked(get_checked() ^ 1);
1252 mwindow->edl->session->plugins_follow_edits = get_checked();
1259 KeyframesFollowEdits::KeyframesFollowEdits(MWindow *mwindow)
1260 : BC_MenuItem(_("Keyframes follow edits"))
1262 this->mwindow = mwindow;
1263 set_checked(mwindow->edl->session->autos_follow_edits);
1266 int KeyframesFollowEdits::handle_event()
1268 mwindow->edl->session->autos_follow_edits ^= 1;
1269 set_checked(!get_checked());
1274 CursorOnFrames::CursorOnFrames(MWindow *mwindow)
1275 : BC_MenuItem(_("Align cursor on frames"))
1277 this->mwindow = mwindow;
1278 set_checked(mwindow->edl->session->cursor_on_frames);
1281 int CursorOnFrames::handle_event()
1283 mwindow->edl->session->cursor_on_frames = !mwindow->edl->session->cursor_on_frames;
1284 set_checked(mwindow->edl->session->cursor_on_frames);
1289 TypelessKeyframes::TypelessKeyframes(MWindow *mwindow)
1290 : BC_MenuItem(_("Typeless keyframes"))
1292 this->mwindow = mwindow;
1293 set_checked(mwindow->edl->session->typeless_keyframes);
1296 int TypelessKeyframes::handle_event()
1298 mwindow->edl->session->typeless_keyframes = !mwindow->edl->session->typeless_keyframes;
1299 set_checked(mwindow->edl->session->typeless_keyframes);
1304 ScrubSpeed::ScrubSpeed(MWindow *mwindow) : BC_MenuItem(_("Slow Shuttle"))
1306 this->mwindow = mwindow;
1309 int ScrubSpeed::handle_event()
1311 if(mwindow->edl->session->scrub_speed == .5)
1313 mwindow->edl->session->scrub_speed = 2;
1314 set_text(_("Slow Shuttle"));
1318 mwindow->edl->session->scrub_speed = .5;
1319 set_text(_("Fast Shuttle"));
1324 SaveSettingsNow::SaveSettingsNow(MWindow *mwindow) : BC_MenuItem(_("Save settings now"))
1326 this->mwindow = mwindow;
1329 int SaveSettingsNow::handle_event()
1331 mwindow->save_defaults();
1332 mwindow->save_backup();
1333 mwindow->gui->show_message(_("Saved settings."));
1339 // ============================================ window
1345 ShowVWindow::ShowVWindow(MWindow *mwindow)
1346 : BC_MenuItem(_("Show Viewer"))
1348 this->mwindow = mwindow;
1349 set_checked(mwindow->session->show_vwindow);
1351 int ShowVWindow::handle_event()
1353 mwindow->show_vwindow();
1357 ShowAWindow::ShowAWindow(MWindow *mwindow)
1358 : BC_MenuItem(_("Show Resources"))
1360 this->mwindow = mwindow;
1361 set_checked(mwindow->session->show_awindow);
1363 int ShowAWindow::handle_event()
1365 mwindow->show_awindow();
1369 ShowCWindow::ShowCWindow(MWindow *mwindow)
1370 : BC_MenuItem(_("Show Compositor"))
1372 this->mwindow = mwindow;
1373 set_checked(mwindow->session->show_cwindow);
1375 int ShowCWindow::handle_event()
1377 mwindow->show_cwindow();
1382 ShowGWindow::ShowGWindow(MWindow *mwindow)
1383 : BC_MenuItem(_("Show Overlays"))
1385 this->mwindow = mwindow;
1386 set_checked(mwindow->session->show_gwindow);
1388 int ShowGWindow::handle_event()
1390 mwindow->show_gwindow();
1395 ShowLWindow::ShowLWindow(MWindow *mwindow)
1396 : BC_MenuItem(_("Show Levels"))
1398 this->mwindow = mwindow;
1399 set_checked(mwindow->session->show_lwindow);
1401 int ShowLWindow::handle_event()
1403 mwindow->show_lwindow();
1407 TileWindows::TileWindows(MWindow *mwindow, const char *item_title, int config,
1408 const char *hot_keytext, int hot_key)
1409 : BC_MenuItem(item_title, hot_keytext, hot_key)
1411 this->mwindow = mwindow;
1412 this->config = config;
1413 if( hot_key ) set_ctrl(1);
1415 int TileWindows::handle_event()
1417 int window_config = config >= 0 ? config :
1418 mwindow->session->window_config;
1419 if( mwindow->tile_windows(window_config) ) {
1420 mwindow->reload_status = 1;
1426 SplitX::SplitX(MWindow *mwindow)
1427 : BC_MenuItem(_("Split X pane"), _("Ctrl+1"), '1')
1429 this->mwindow = mwindow;
1431 set_checked(mwindow->gui->pane[TOP_RIGHT_PANE] != 0);
1433 int SplitX::handle_event()
1439 SplitY::SplitY(MWindow *mwindow)
1440 : BC_MenuItem(_("Split Y pane"), _("Ctrl+2"), '2')
1442 this->mwindow = mwindow;
1444 set_checked(mwindow->gui->pane[BOTTOM_LEFT_PANE] != 0);
1446 int SplitY::handle_event()