add libdav1d codec, add remap_a/v_codec option keywords
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mainmenu.C
index 2fb2fcf9f73345dcd5c01a595c427ad1681222e1..9fe3c292fe40489b544be6128632707d3504b136 100644 (file)
@@ -55,6 +55,7 @@
 #include "menueditlength.h"
 #include "menutransitionlength.h"
 #include "menuveffects.h"
+#include "mixersalign.h"
 #include "mwindowgui.h"
 #include "mwindow.h"
 #include "new.h"
@@ -147,9 +148,9 @@ void MainMenu::create_objects()
        editmenu->add_item(new Cut(mwindow));
        editmenu->add_item(new Copy(mwindow));
        editmenu->add_item(new Paste(mwindow));
-       editmenu->add_item(new Clear(mwindow));
        editmenu->add_item(new PasteSilence(mwindow));
-       editmenu->add_item(new MuteSelection(mwindow));
+       editmenu->add_item(clear_menu = new EditClearMenu(mwindow));
+       clear_menu->create_objects();
        editmenu->add_item(new TrimSelection(mwindow));
        editmenu->add_item(new SelectAll(mwindow));
        editmenu->add_item(new BC_MenuItem("-"));
@@ -160,7 +161,6 @@ void MainMenu::create_objects()
        editmenu->add_item(new MenuTransitionLength(mwindow));
        editmenu->add_item(new DetachTransitions(mwindow));
        editmenu->add_item(new BC_MenuItem("-"));
-       editmenu->add_item(new ClearLabels(mwindow));
        editmenu->add_item(new CutCommercials(mwindow));
        editmenu->add_item(new PasteSubttl(mwindow));
 
@@ -202,7 +202,8 @@ void MainMenu::create_objects()
        trackmenu->add_item(new MoveTracksUp(mwindow));
        trackmenu->add_item(new MoveTracksDown(mwindow));
        trackmenu->add_item(new DeleteTracks(mwindow));
-       trackmenu->add_item(new DeleteTrack(mwindow));
+       trackmenu->add_item(new DeleteFirstTrack(mwindow));
+       trackmenu->add_item(new DeleteLastTrack(mwindow));
        trackmenu->add_item(new ConcatenateTracks(mwindow));
        AppendTracks *append_tracks;
        trackmenu->add_item(append_tracks = new AppendTracks(mwindow));
@@ -271,8 +272,8 @@ void MainMenu::create_objects()
        windowmenu->add_item(new BC_MenuItem("-"));
        windowmenu->add_item(split_x = new SplitX(mwindow));
        windowmenu->add_item(split_y = new SplitY(mwindow));
-       windowmenu->add_item(mixer_viewer = new MixerViewer(mwindow));
-       windowmenu->add_item(new TileMixers(mwindow));
+       windowmenu->add_item(mixer_items = new MixerItems(mwindow));
+       mixer_items->create_objects();
        windowmenu->add_item(new TileWindows(mwindow,_("Tile left"),0));
        windowmenu->add_item(new TileWindows(mwindow,_("Tile right"),1));
        windowmenu->add_item(new BC_MenuItem("-"));
@@ -954,6 +955,35 @@ int Paste::handle_event()
        return 1;
 }
 
+EditClearSubMenu::EditClearSubMenu(BC_MenuItem *menu_item)
+ : BC_SubMenu()
+{
+       this->menu_item = menu_item;
+}
+EditClearSubMenu::~EditClearSubMenu()
+{
+}
+
+EditClearMenu::EditClearMenu(MWindow *mwindow)
+ : BC_MenuItem(_("Clear..."))
+{
+       this->mwindow = mwindow;
+       this->clear_sub_menu = 0;
+}
+EditClearMenu::~EditClearMenu()
+{
+}
+
+void EditClearMenu::create_objects()
+{
+       add_submenu(clear_sub_menu = new EditClearSubMenu(this));
+       clear_sub_menu->add_item(new Clear(mwindow));
+       clear_sub_menu->add_item(new MuteSelection(mwindow));
+       clear_sub_menu->add_item(new ClearSelect(mwindow));
+       clear_sub_menu->add_item(new ClearLabels(mwindow));
+       clear_sub_menu->add_item(new ClearHardEdges(mwindow));
+};
+
 Clear::Clear(MWindow *mwindow)
  : BC_MenuItem(_("Clear"), _("Del"), DELETE)
 {
@@ -997,6 +1027,17 @@ int SelectAll::handle_event()
        return 1;
 }
 
+ClearHardEdges::ClearHardEdges(MWindow *mwindow) : BC_MenuItem(_("Clear Hard Edges"))
+{
+       this->mwindow = mwindow;
+}
+
+int ClearHardEdges::handle_event()
+{
+       mwindow->clear_hard_edges();
+       return 1;
+}
+
 ClearLabels::ClearLabels(MWindow *mwindow) : BC_MenuItem(_("Clear labels"))
 {
        this->mwindow = mwindow;
@@ -1008,6 +1049,19 @@ int ClearLabels::handle_event()
        return 1;
 }
 
+ClearSelect::ClearSelect(MWindow *mwindow) : BC_MenuItem(_("Clear Select"),"Ctrl-Shift-A",'A')
+{
+       set_ctrl(1);
+       set_shift(1);
+       this->mwindow = mwindow;
+}
+
+int ClearSelect::handle_event()
+{
+       mwindow->clear_select();
+       return 1;
+}
+
 CutCommercials::CutCommercials(MWindow *mwindow) : BC_MenuItem(_("Cut ads"))
 {
        this->mwindow = mwindow;
@@ -1220,23 +1274,42 @@ int DeleteTracks::handle_event()
        return 1;
 }
 
-DeleteTrack::DeleteTrack(MWindow *mwindow)
+DeleteFirstTrack::DeleteFirstTrack(MWindow *mwindow)
+ : BC_MenuItem(_("Delete first track"), "Shift-D", 'D')
+{
+       set_shift(1);
+       this->mwindow = mwindow;
+}
+
+int DeleteFirstTrack::handle_event()
+{
+       if( mwindow->session->current_operation == NO_OPERATION ) {
+               Track *track = mwindow->edl->tracks->first;
+               if( track ) mwindow->delete_track(track);
+       }
+       return 1;
+}
+
+DeleteLastTrack::DeleteLastTrack(MWindow *mwindow)
  : BC_MenuItem(_("Delete last track"), "d", 'd')
 {
        this->mwindow = mwindow;
 }
 
-int DeleteTrack::handle_event()
+int DeleteLastTrack::handle_event()
 {
-       if( mwindow->session->current_operation == NO_OPERATION )
-               mwindow->delete_track();
+       if( mwindow->session->current_operation == NO_OPERATION ) {
+               Track *track = mwindow->edl->tracks->last;
+               if( track ) mwindow->delete_track(track);
+       }
        return 1;
 }
 
 MoveTracksUp::MoveTracksUp(MWindow *mwindow)
  : BC_MenuItem(_("Move tracks up"), _("Shift-Up"), UP)
 {
-       set_shift(); this->mwindow = mwindow;
+       this->mwindow = mwindow;
+       set_shift();
 }
 
 int MoveTracksUp::handle_event()
@@ -1590,6 +1663,21 @@ int SplitY::handle_event()
 }
 
 
+MixerItems::MixerItems(MWindow *mwindow)
+ : BC_MenuItem(_("Mixers..."))
+{
+       this->mwindow = mwindow;
+}
+
+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));
+}
+
 MixerViewer::MixerViewer(MWindow *mwindow)
  : BC_MenuItem(_("Mixer Viewer"), _("Shift-M"), 'M')
 {
@@ -1616,6 +1704,20 @@ int TileMixers::handle_event()
        return 1;
 }
 
+AlignMixers::AlignMixers(MWindow *mwindow)
+ : BC_MenuItem(_("Align mixers"))
+{
+       this->mwindow = mwindow;
+}
+
+int AlignMixers::handle_event()
+{
+       int wx, wy;
+       mwindow->gui->get_abs_cursor(wx, wy);
+       mwindow->mixers_align->start_dialog(wx, wy);
+       return 1;
+}
+
 
 LoadLayoutItem::LoadLayoutItem(LoadLayout *load_layout, const char *text, int idx, int hotkey)
  : BC_MenuItem(text, "", hotkey)
@@ -1633,6 +1735,8 @@ LoadLayoutItem::LoadLayoutItem(LoadLayout *load_layout, const char *text, int id
 
 int LoadLayoutItem::handle_event()
 {
+// key_press hotkey skips over activate_submenu
+       load_layout->update();
        MWindow *mwindow = load_layout->mwindow;
        switch( load_layout->action ) {
        case LAYOUT_LOAD: