first compilable version of tabbable design.
[ardour.git] / gtk2_ardour / ardour_ui_dependents.cc
index 7438fab9f09d889c5abe96ef343cc2ebda92ac3c..031ebd58a88e0592fe2fb81cbf17dcef4d65e974 100644 (file)
 
 #include "ardour/session.h"
 
+#include "actions.h"
 #include "ardour_ui.h"
 #include "public_editor.h"
+#include "meterbridge.h"
 #include "mixer_ui.h"
 #include "keyboard.h"
 #include "splash.h"
@@ -50,14 +52,6 @@ namespace ARDOUR {
 
 using namespace ARDOUR;
 
-void
-ARDOUR_UI::shutdown ()
-{
-       if (ui_config->dirty()) {
-               ui_config->save_state();
-       }
-}
-
 void
 ARDOUR_UI::we_have_dependents ()
 {
@@ -67,6 +61,14 @@ ARDOUR_UI::we_have_dependents ()
        editor->setup_tooltips ();
        editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
 
+       editor->add_to_notebook (_tabs, _("Editor"), 1);
+       mixer->add_to_notebook (_tabs, _("Mixer"), 1);
+       
+       /* all actions are defined */
+
+       ActionManager::enable_accelerators ();
+       ActionManager::load_menus (ARDOUR_COMMAND_LINE::menus_file);
+
        editor->track_mixer_selection ();
        mixer->track_editor_selection ();
 }
@@ -74,10 +76,12 @@ ARDOUR_UI::we_have_dependents ()
 void
 ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
 {
+       DisplaySuspender ds;
        BootMessage (_("Setup Editor"));
        editor->set_session (s);
        BootMessage (_("Setup Mixer"));
        mixer->set_session (s);
+       meterbridge->set_session (s);
 
        /* its safe to do this now */
 
@@ -85,118 +89,6 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
        s->restore_history ("");
 }
 
-static bool
-_hide_splash (gpointer arg)
-{
-       ((ARDOUR_UI*)arg)->hide_splash();
-       return false;
-}
-
-void
-ARDOUR_UI::goto_editor_window ()
-{
-       if (splash && splash->is_visible()) {
-               // in 2 seconds, hide the splash screen
-               Glib::signal_timeout().connect (sigc::bind (sigc::ptr_fun (_hide_splash), this), 2000);
-       }
-
-       editor->show_window ();
-       editor->present ();
-       flush_pending ();
-}
-
-void
-ARDOUR_UI::goto_mixer_window ()
-{
-       if (!editor) {
-               return;
-       }
-
-       Glib::RefPtr<Gdk::Window> win = editor->get_window ();
-       Glib::RefPtr<Gdk::Screen> screen;
-       
-       if (win) {
-               screen = win->get_screen();
-       } else {
-               screen = Gdk::Screen::get_default();
-       }
-       
-       if (screen && screen->get_height() < 700) {
-               Gtk::MessageDialog msg (_("This screen is not tall enough to display the mixer window"));
-               msg.run ();
-               return;
-       }
-
-       mixer->show_window ();
-       mixer->present ();
-       flush_pending ();
-}
-
-void
-ARDOUR_UI::toggle_mixer_window ()
-{
-       Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer"));
-       if (!act) {
-               return;
-       }
-
-       Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
-
-       if (tact->get_active()) {
-               goto_mixer_window ();
-       } else {
-               mixer->hide ();
-       }
-}
-
-void
-ARDOUR_UI::toggle_editor_mixer ()
-{
-       if (editor && mixer) {
-
-               if (editor->get_screen() != mixer->get_screen()) {
-                       // different screens, so don't do anything
-                       return;
-               }
-
-               /* See if they are obscuring each other */
-               
-               gint ex, ey, ew, eh;
-               gint mx, my, mw, mh;
-
-               editor->get_position (ex, ey);
-               editor->get_size (ew, eh);
-
-               mixer->get_position (mx, my);
-               mixer->get_size (mw, mh);
-
-               GdkRectangle e;
-               GdkRectangle m;
-               GdkRectangle r;
-
-               e.x = ex;
-               e.y = ey;
-               e.width = ew;
-               e.height = eh;
-
-               m.x = mx;
-               m.y = my;
-               m.width = mw;
-               m.height = mh;
-               
-               if (!gdk_rectangle_intersect (&e, &m, &r)) {
-                       /* they do not intersect so do not toggle */
-                       return;
-               }
-       }
-               
-       if (mixer && mixer->fully_visible()) {
-               goto_editor_window ();
-       } else {
-               goto_mixer_window ();
-       }
-}
-
 /** The main editor window has been closed */
 gint
 ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
@@ -212,3 +104,42 @@ ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
 #endif
 }
 
+GtkNotebook*
+ARDOUR_UI::tab_window_root_drop (GtkNotebook* src,
+                                GtkWidget* w,
+                                gint x,
+                                gint y,
+                                gpointer)
+{
+       using namespace std;
+       Gtk::Notebook* nb = 0;
+       Gtk::Window* win = 0;
+       
+       if (w == GTK_WIDGET(mixer->contents().gobj())) {
+               /* Mixer */
+
+               cerr << "Call use own window, mixer\n";
+               
+               nb = mixer->tab_root_drop ();
+               win = mixer->own_window ();
+
+       } else if (w == GTK_WIDGET(editor->contents().gobj())) {
+
+               /* Editor */
+
+               cerr << "Call use own window, editor\n";
+               
+               nb = editor->tab_root_drop ();
+               win = editor->own_window ();
+
+       }
+
+       if (nb) {
+               win->move (x, y);
+               win->show_all ();
+               win->present ();
+               return nb->gobj();
+       }
+       
+       return 0; /* what was that? */
+}