Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mainmenu.C
index 56b18436e0efcc95f525be8610b2561e9a6bcee9..e2902b3bfa62e113ba10c712587478416688ac9c 100644 (file)
@@ -90,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()
@@ -223,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;
@@ -1608,9 +1609,15 @@ ShowVWindow::ShowVWindow(MWindow *mwindow)
 }
 int ShowVWindow::handle_event()
 {
-       mwindow->gui->unlock_window();
-       mwindow->show_vwindow(1);
-       mwindow->gui->lock_window("ShowVWindow::handle_event");
+       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;
 }
 
@@ -1622,9 +1629,16 @@ ShowAWindow::ShowAWindow(MWindow *mwindow)
 }
 int ShowAWindow::handle_event()
 {
-       mwindow->gui->unlock_window();
-       mwindow->show_awindow();
-       mwindow->gui->lock_window("ShowAWindow::handle_event");
+       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;
 }
 
@@ -1636,9 +1650,15 @@ ShowCWindow::ShowCWindow(MWindow *mwindow)
 }
 int ShowCWindow::handle_event()
 {
-       mwindow->gui->unlock_window();
-       mwindow->show_cwindow();
-       mwindow->gui->lock_window("ShowCWindow::handle_event");
+       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;
 }
 
@@ -1673,9 +1693,16 @@ ShowLWindow::ShowLWindow(MWindow *mwindow)
 }
 int ShowLWindow::handle_event()
 {
-       mwindow->gui->unlock_window();
-       mwindow->show_lwindow();
-       mwindow->gui->lock_window("ShowLWindow::handle_event");
+       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;
 }
 
@@ -1740,7 +1767,7 @@ void MixerItems::create_objects()
        BC_SubMenu *mixer_submenu = new BC_SubMenu();
        add_submenu(mixer_submenu);
        mixer_submenu->add_submenuitem(new MixerViewer(this));
-       mixer_submenu->add_submenuitem(new TileMixers(this));
+       mixer_submenu->add_submenuitem(new DragTileMixers(this));
        mixer_submenu->add_submenuitem(new AlignMixers(this));
        mixer_submenu->add_submenuitem(new MixMasters(this));
 }
@@ -1811,16 +1838,51 @@ int MixerViewer::handle_event()
        return 1;
 }
 
-TileMixers::TileMixers(MixerItems *mixer_items)
- : MixerItem(mixer_items, _("Tile mixers"), "Alt-t", 't')
+DragTileMixers::DragTileMixers(MixerItems *mixer_items)
+ : MixerItem(mixer_items, _("Drag Tile mixers"), "Alt-t", 't')
 {
        set_alt();
+       drag_box = 0;
 }
 
-int TileMixers::handle_event()
+DragTileMixers::~DragTileMixers()
 {
-       MWindow *mwindow = mixer_items->mwindow;
-       mwindow->tile_mixers();
+       delete drag_box;
+}
+
+int DragTileMixers::handle_event()
+{
+       if( !drag_box ) {
+               MWindow *mwindow = mixer_items->mwindow;
+               drag_box = new TileMixersDragBox(mwindow->gui);
+       }
+       if( !drag_box->running() )
+               drag_box->start(this);
+       return 1;
+}
+
+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;
 }
 
@@ -2053,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()