X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmainmenu.C;h=60d72d5a7a4e709600c5bc33173752d141d8fa89;hp=f1b980cb83eb6123b0ff96df5d603a8d7007ff8f;hb=50ec1e03e96a60403af08a7bae34015c9b234902;hpb=c63c2c2707e1b1145db2edd6824bd69f59341e15 diff --git a/cinelerra-5.1/cinelerra/mainmenu.C b/cinelerra-5.1/cinelerra/mainmenu.C index f1b980cb..60d72d5a 100644 --- a/cinelerra-5.1/cinelerra/mainmenu.C +++ b/cinelerra-5.1/cinelerra/mainmenu.C @@ -37,6 +37,7 @@ #include "dvdcreate.h" #include "edl.h" #include "edlsession.h" +#include "exportedl.h" #include "file.h" #include "filesystem.h" #include "filexml.h" @@ -78,7 +79,8 @@ #include "transportque.h" #include "viewmenu.h" #include "zoombar.h" -#include "exportedl.h" +#include "zwindow.h" +#include "zwindowgui.h" #include @@ -88,6 +90,8 @@ MainMenu::MainMenu(MWindow *mwindow, MWindowGUI *gui, int w) { this->gui = gui; this->mwindow = mwindow; +// *** CONTEXT_HELP *** + context_help_set_keyword("Program Window"); } MainMenu::~MainMenu() @@ -116,8 +120,8 @@ void MainMenu::create_objects() filemenu->add_item(saveas = new SaveAs(mwindow)); save->create_objects(saveas); saveas->set_mainmenu(this); - SaveProject *save_project; - filemenu->add_item(save_project = new SaveProject(mwindow)); + filemenu->add_item(new SaveProject(mwindow)); + filemenu->add_item(new SaveSession(mwindow)); filemenu->add_item(record_menu_item = new RecordMenuItem(mwindow)); #ifdef HAVE_DVB @@ -130,7 +134,7 @@ void MainMenu::create_objects() filemenu->add_item(new SubttlSWin(mwindow)); filemenu->add_item(render = new RenderItem(mwindow)); - filemenu->add_item(new ExportEDLItem(mwindow)); +// filemenu->add_item(new ExportEDLItem(mwindow)); filemenu->add_item(new BatchRenderMenuItem(mwindow)); filemenu->add_item(new CreateBD_MenuItem(mwindow)); filemenu->add_item(new CreateDVD_MenuItem(mwindow)); @@ -172,11 +176,13 @@ void MainMenu::create_objects() keyframemenu->add_item(new CopyKeyframes(mwindow)); keyframemenu->add_item(new PasteKeyframes(mwindow)); keyframemenu->add_item(new ClearKeyframes(mwindow)); - keyframemenu->add_item(new StraightenKeyframes(mwindow)); - keyframemenu->add_item(new BendKeyframes(mwindow)); + keyframemenu->add_item(set_auto_curves = new SetAutomationCurveMode(mwindow)); + set_auto_curves->create_objects(); keyframemenu->add_item(keyframe_curve_type = new KeyframeCurveType(mwindow)); keyframe_curve_type->create_objects(); keyframe_curve_type->update(mwindow->edl->local_session->floatauto_type); + keyframemenu->add_item(keyframe_create = new KeyframeCreate(mwindow)); + keyframe_create->create_objects(); keyframemenu->add_item(new BC_MenuItem("-")); keyframemenu->add_item(new CopyDefaultKeyframe(mwindow)); keyframemenu->add_item(new PasteDefaultKeyframe(mwindow)); @@ -203,10 +209,13 @@ void MainMenu::create_objects() add_menu(trackmenu = new BC_Menu(_("Tracks"))); trackmenu->add_item(new MoveTracksUp(mwindow)); trackmenu->add_item(new MoveTracksDown(mwindow)); + trackmenu->add_item(new RollTracksUp(mwindow)); + trackmenu->add_item(new RollTracksDown(mwindow)); trackmenu->add_item(new DeleteTracks(mwindow)); trackmenu->add_item(new DeleteFirstTrack(mwindow)); trackmenu->add_item(new DeleteLastTrack(mwindow)); trackmenu->add_item(new ConcatenateTracks(mwindow)); + trackmenu->add_item(new AlignTimecodes(mwindow)); AppendTracks *append_tracks; trackmenu->add_item(append_tracks = new AppendTracks(mwindow)); append_tracks->create_objects(); @@ -216,7 +225,6 @@ void MainMenu::create_objects() settingsmenu->add_item(new SetFormat(mwindow)); settingsmenu->add_item(preferences = new PreferencesMenuitem(mwindow)); - ProxyMenuItem *proxy; settingsmenu->add_item(proxy = new ProxyMenuItem(mwindow)); proxy->create_objects(); ConvertMenuItem *convert; @@ -631,7 +639,7 @@ int DumpUndo::handle_event() // ================================================= edit -Undo::Undo(MWindow *mwindow) : BC_MenuItem(_("Undo"), "z", 'z') +Undo::Undo(MWindow *mwindow) : BC_MenuItem(_("Undo"), "z or Ctrl-z", 'z') { this->mwindow = mwindow; } @@ -727,36 +735,40 @@ int ClearKeyframes::handle_event() } - -StraightenKeyframes::StraightenKeyframes(MWindow *mwindow) - : BC_MenuItem(_("Change to linear")) +SetAutomationCurveItem::SetAutomationCurveItem(SetAutomationCurveMode *set_curve_mode, int id) + : BC_MenuItem(FloatAuto::curve_name(id)) { - this->mwindow = mwindow; + this->set_curve_mode = set_curve_mode; + this->id = id; } -int StraightenKeyframes::handle_event() +int SetAutomationCurveItem::handle_event() { - mwindow->set_automation_mode(FloatAuto::LINEAR); + set_curve_mode->mwindow->set_automation_mode((FloatAuto::t_mode)id); return 1; } +SetAutoCurveModeMenu::SetAutoCurveModeMenu(SetAutomationCurveMode *curve_mode) +: BC_SubMenu() +{ + this->curve_mode = curve_mode; +} - - -BendKeyframes::BendKeyframes(MWindow *mwindow) - : BC_MenuItem(_("Change to smooth")) +SetAutomationCurveMode::SetAutomationCurveMode(MWindow *mwindow) + : BC_MenuItem(_("Set curve modes...")) { this->mwindow = mwindow; + curve_mode_menu = 0; } -int BendKeyframes::handle_event() +void SetAutomationCurveMode::create_objects() { - mwindow->set_automation_mode(FloatAuto::SMOOTH); - return 1; + add_submenu(curve_mode_menu = new SetAutoCurveModeMenu(this)); + for( int id=FloatAuto::SMOOTH; id<=FloatAuto::BUMP; ++id ) + curve_mode_menu->add_item(new SetAutomationCurveItem(this, id)); } - KeyframeCurveType::KeyframeCurveType(MWindow *mwindow) : BC_MenuItem(_("Create curve type...")) { @@ -770,7 +782,7 @@ KeyframeCurveType::~KeyframeCurveType() void KeyframeCurveType::create_objects() { add_submenu(curve_menu = new KeyframeCurveTypeMenu(this)); - for( int i=FloatAuto::SMOOTH; i<=FloatAuto::FREE; ++i ) { + for( int i=FloatAuto::SMOOTH; i<=FloatAuto::BUMP; ++i ) { KeyframeCurveTypeItem *curve_type_item = new KeyframeCurveTypeItem(i, this); curve_menu->add_submenuitem(curve_type_item); } @@ -816,6 +828,63 @@ int KeyframeCurveTypeItem::handle_event() } +KeyframeCreateItem::KeyframeCreateItem(KeyframeCreate *keyframe_create, + const char *text, int mask) + : BC_MenuItem(text) +{ + this->keyframe_create = keyframe_create; + this->mask = mask; +} + +int KeyframeCreateItem::handle_event() +{ + MWindow *mwindow = keyframe_create->mwindow; + int mode = mwindow->edl->local_session->floatauto_type; + int mask = this->mask; + if( !mask ) { // visible + int *autos = mwindow->edl->session->auto_conf->autos; + int modes = (1<>=1, ++i ) { + if( !(modes & 1) ) continue; + if( autos[i] ) mask |= (1<create_keyframes(mask, mode); + return 1; +} + +KeyframeCreateMenu::KeyframeCreateMenu(KeyframeCreate *keyframe_create) +: BC_SubMenu() +{ + this->keyframe_create = keyframe_create; +} + +KeyframeCreate::KeyframeCreate(MWindow *mwindow) + : BC_MenuItem(_("Create keyframes...")) +{ + this->mwindow = mwindow; + keyframe_create_menu = 0; +} + +void KeyframeCreate::create_objects() +{ + add_submenu(keyframe_create_menu = new KeyframeCreateMenu(this)); + keyframe_create_menu->add_item(new KeyframeCreateItem(this, _("Visible"), 0)); + keyframe_create_menu->add_item(new KeyframeCreateItem(this, _("Fade"), + (1<add_item(new KeyframeCreateItem(this, _("Speed"), + (1<add_item(new KeyframeCreateItem(this, _("Camera XYZ"), + (7<add_item(new KeyframeCreateItem(this, _("Projector XYZ"), + (7<add_item(new KeyframeCreateItem(this, _("Fade+Speed+XYZ"), + (1<session->current_operation == NO_OPERATION ) { - mwindow->cwindow->gui->lock_window("Clear::handle_event"); mwindow->clear_entry(); - mwindow->cwindow->gui->unlock_window(); } return 1; } @@ -1158,7 +1225,7 @@ AddVideoTrack::AddVideoTrack(MWindow *mwindow) int AddVideoTrack::handle_event() { if( mwindow->session->current_operation == NO_OPERATION ) - mwindow->add_video_track_entry(); + mwindow->add_video_track_entry(1, 0); return 1; } @@ -1279,7 +1346,8 @@ int MoveTracksUp::handle_event() MoveTracksDown::MoveTracksDown(MWindow *mwindow) : BC_MenuItem(_("Move tracks down"), _("Shift-Down"), DOWN) { - set_shift(); this->mwindow = mwindow; + this->mwindow = mwindow; + set_shift(); } int MoveTracksDown::handle_event() @@ -1290,6 +1358,37 @@ int MoveTracksDown::handle_event() } +RollTracksUp::RollTracksUp(MWindow *mwindow) + : BC_MenuItem(_("Roll tracks up"), _("Ctrl-Shift-Up"), UP) +{ + this->mwindow = mwindow; + set_ctrl(); + set_shift(); +} + +int RollTracksUp::handle_event() +{ + if( mwindow->session->current_operation == NO_OPERATION ) + mwindow->roll_tracks_up(); + return 1; +} + +RollTracksDown::RollTracksDown(MWindow *mwindow) + : BC_MenuItem(_("Roll tracks down"), _("Ctrl-Shift-Down"), DOWN) +{ + this->mwindow = mwindow; + set_ctrl(); + set_shift(); +} + +int RollTracksDown::handle_event() +{ + if( mwindow->session->current_operation == NO_OPERATION ) + mwindow->roll_tracks_down(); + return 1; +} + + ConcatenateTracks::ConcatenateTracks(MWindow *mwindow) @@ -1341,7 +1440,7 @@ AddSubttlTrack::AddSubttlTrack(MWindow *mwindow) int AddSubttlTrack::handle_event() { if( mwindow->session->current_operation == NO_OPERATION ) - mwindow->add_subttl_track_entry(); + mwindow->add_subttl_track_entry(1, 0); return 1; } @@ -1479,10 +1578,11 @@ int ScrubSpeed::handle_event() } SaveSettingsNow::SaveSettingsNow(MWindow *mwindow) - : BC_MenuItem(_("Save settings now"),_("Ctrl-s"),'s') + : BC_MenuItem(_("Save settings now"),_("Ctrl-Shift-S"),'S') { this->mwindow = mwindow; set_ctrl(1); + set_shift(1); } int SaveSettingsNow::handle_event() @@ -1509,7 +1609,15 @@ ShowVWindow::ShowVWindow(MWindow *mwindow) } int ShowVWindow::handle_event() { - mwindow->show_vwindow(); + if( mwindow->session->current_operation == NO_OPERATION ) { + mwindow->gui->unlock_window(); + if( !mwindow->session->show_vwindow ) + mwindow->show_vwindow(1); + else + mwindow->hide_vwindow(1); + mwindow->gui->lock_window("ShowVWindow::handle_event"); + set_checked(mwindow->session->show_vwindow); + } return 1; } @@ -1521,7 +1629,16 @@ ShowAWindow::ShowAWindow(MWindow *mwindow) } int ShowAWindow::handle_event() { - mwindow->show_awindow(); + if( mwindow->session->current_operation == NO_OPERATION ) { + mwindow->gui->unlock_window(); + if( !mwindow->session->show_awindow ) + mwindow->show_awindow(); + else + mwindow->hide_awindow(); + mwindow->gui->lock_window("ShowAWindow::handle_event"); + set_checked(mwindow->session->show_awindow); + + } return 1; } @@ -1533,7 +1650,15 @@ ShowCWindow::ShowCWindow(MWindow *mwindow) } int ShowCWindow::handle_event() { - mwindow->show_cwindow(); + if( mwindow->session->current_operation == NO_OPERATION ) { + mwindow->gui->unlock_window(); + if( !mwindow->session->show_cwindow ) + mwindow->show_cwindow(); + else + mwindow->hide_cwindow(); + mwindow->gui->lock_window("ShowCWindow::handle_event"); + set_checked(mwindow->session->show_cwindow); + } return 1; } @@ -1548,10 +1673,12 @@ ShowGWindow::ShowGWindow(MWindow *mwindow) int ShowGWindow::handle_event() { if( mwindow->session->current_operation == NO_OPERATION ) { + mwindow->gui->unlock_window(); if( !mwindow->session->show_gwindow ) mwindow->show_gwindow(); else mwindow->hide_gwindow(); + mwindow->gui->lock_window("ShowGWindow::handle_event"); set_checked(mwindow->session->show_gwindow); } return 1; @@ -1566,7 +1693,16 @@ ShowLWindow::ShowLWindow(MWindow *mwindow) } int ShowLWindow::handle_event() { - mwindow->show_lwindow(); + if( mwindow->session->current_operation == NO_OPERATION ) { + + mwindow->gui->unlock_window(); + if( !mwindow->session->show_lwindow ) + mwindow->show_lwindow(); + else + mwindow->hide_lwindow(); + mwindow->gui->lock_window("ShowLWindow::handle_event"); + set_checked(mwindow->session->show_lwindow); + } return 1; } @@ -1630,51 +1766,165 @@ void MixerItems::create_objects() { BC_SubMenu *mixer_submenu = new BC_SubMenu(); add_submenu(mixer_submenu); - mixer_submenu->add_submenuitem(new MixerViewer(mwindow)); - mixer_submenu->add_submenuitem(new TileMixers(mwindow)); - mixer_submenu->add_submenuitem(new AlignMixers(mwindow)); + mixer_submenu->add_submenuitem(new MixerViewer(this)); + mixer_submenu->add_submenuitem(new DragTileMixers(this)); + mixer_submenu->add_submenuitem(new AlignMixers(this)); + mixer_submenu->add_submenuitem(new MixMasters(this)); } -MixerViewer::MixerViewer(MWindow *mwindow) - : BC_MenuItem(_("Mixer Viewer"), _("Shift-M"), 'M') +int MixerItems::activate_submenu() +{ + BC_SubMenu *mixer_submenu = (BC_SubMenu *)get_submenu(); + int k = mixer_submenu->total_items(); + while( --k >= 0 ) { + MixerItem *mixer_item = (MixerItem *)mixer_submenu->get_item(k); + if( mixer_item->idx < 0 ) continue; + mixer_submenu->del_item(mixer_item); + } + int n = mwindow->edl->mixers.size(); + for( int i=0; iedl->mixers[i]; + if( !mixer ) continue; + MixerItem *mixer_item = new MixerItem(this, mixer->title, mixer->idx); + mixer_submenu->add_submenuitem(mixer_item); + } + return BC_MenuItem::activate_submenu(); +} + +MixerItem::MixerItem(MixerItems *mixer_items, const char *text, int idx) + : BC_MenuItem(text) +{ + this->mixer_items = mixer_items; + this->idx = idx; +} + +MixerItem::MixerItem(MixerItems *mixer_items, const char *text, const char *hotkey_text, int hotkey) + : BC_MenuItem(text, hotkey_text, hotkey) +{ + this->mixer_items = mixer_items; + this->idx = -1; +} + +int MixerItem::handle_event() +{ + if( idx < 0 ) return 0; + MWindow *mwindow = mixer_items->mwindow; + Mixer *mixer = mwindow->edl->mixers.get_mixer(idx); + if( !mixer ) return 0; + ZWindow *zwindow = mwindow->get_mixer(idx); + if( !zwindow ) + zwindow = mwindow->get_mixer(mixer); + if( !zwindow->zgui ) { + zwindow->set_title(mixer->title); + zwindow->start(); + } + zwindow->zgui->lock_window("MixerItem::handle_event"); + zwindow->zgui->raise_window(); + zwindow->zgui->unlock_window(); + mwindow->refresh_mixers(); + return 1; +} + +MixerViewer::MixerViewer(MixerItems *mixer_items) + : MixerItem(mixer_items, _("Mixer Viewer"), _("Shift-M"), 'M') { - this->mwindow = mwindow; set_shift(1); } int MixerViewer::handle_event() { + MWindow *mwindow = mixer_items->mwindow; mwindow->start_mixer(); return 1; } -TileMixers::TileMixers(MWindow *mwindow) - : BC_MenuItem(_("Tile mixers"), "Alt-t", 't') +DragTileMixers::DragTileMixers(MixerItems *mixer_items) + : MixerItem(mixer_items, _("Drag Tile mixers"), "Alt-t", 't') { - this->mwindow = mwindow; set_alt(); + drag_box = 0; +} + +DragTileMixers::~DragTileMixers() +{ + delete drag_box; } -int TileMixers::handle_event() +int DragTileMixers::handle_event() { - mwindow->tile_mixers(); + if( !drag_box ) { + MWindow *mwindow = mixer_items->mwindow; + drag_box = new TileMixersDragBox(mwindow->gui); + } + if( !drag_box->running() ) + drag_box->start(this); return 1; } -AlignMixers::AlignMixers(MWindow *mwindow) - : BC_MenuItem(_("Align mixers")) +TileMixersDragBox::TileMixersDragBox(MWindowGUI *gui) + : BC_DragBox(gui) +{ + tile_mixers = 0; +} + +void TileMixersDragBox::start(DragTileMixers *tile_mixers) +{ + this->tile_mixers = tile_mixers; + start_drag(); +} + +int TileMixersDragBox::handle_done_event(int x0, int y0, int x1, int y1) +{ + MWindow *mwindow = tile_mixers->mixer_items->mwindow; + if( x0 >= x1 || y0 >= y1 ) x0 = x1 = y0 = y1 = 0; + mwindow->session->tile_mixers_x = x0; + mwindow->session->tile_mixers_y = y0; + mwindow->session->tile_mixers_w = x1 - x0; + mwindow->session->tile_mixers_h = y1 - y0; + mwindow->tile_mixers(x0, y0, x1, y1); + tile_mixers = 0; + return 1; +} + +AlignMixers::AlignMixers(MixerItems *mixer_items) + : MixerItem(mixer_items, _("Align mixers"), "", 0) { - this->mwindow = mwindow; } int AlignMixers::handle_event() { + MWindow *mwindow = mixer_items->mwindow; int wx, wy; mwindow->gui->get_abs_cursor(wx, wy); mwindow->mixers_align->start_dialog(wx, wy); return 1; } +MixMasters::MixMasters(MixerItems *mixer_items) + : MixerItem(mixer_items, _("Mix masters"), "", 0) +{ +} + +int MixMasters::handle_event() +{ + MWindow *mwindow = mixer_items->mwindow; + mwindow->mix_masters(); + return 1; +} + + +AlignTimecodes::AlignTimecodes(MWindow *mwindow) + : BC_MenuItem(_("Align Timecodes")) +{ + this->mwindow = mwindow; +} + +int AlignTimecodes::handle_event() +{ + mwindow->align_timecodes(); + return 1; +} + LoadLayoutItem::LoadLayoutItem(LoadLayout *load_layout, const char *text, int idx, int hotkey) : BC_MenuItem(text, "", hotkey) @@ -1865,6 +2115,8 @@ LoadLayoutConfirm::LoadLayoutConfirm(LoadLayoutDialog *layout_dialog, int x, int : BC_Window(_(PROGRAM_NAME ": Layout"), x, y, xS(300),yS(140), xS(300),yS(140), 0) { this->layout_dialog = layout_dialog; +// *** CONTEXT_HELP *** + context_help_set_keyword("Window Layouts"); } LoadLayoutConfirm::~LoadLayoutConfirm()