hopefully get dynamic tabbable menu state right this time
[ardour.git] / gtk2_ardour / ardour_ui_ed.cc
index cbf2c041924fd0dcc6def8517e1dd891e91225cc..299a5d7d69e2f754c87ea0fef61baf7b64fe5291 100644 (file)
@@ -79,14 +79,15 @@ ARDOUR_UI::create_editor ()
 {
        try {
                editor = new Editor ();
+               editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
+               editor->add_to_notebook (_tabs, _("Editor"));
        }
 
        catch (failed_constructor& err) {
                return -1;
        }
 
-       editor->Realized.connect (sigc::mem_fun (*this, &ARDOUR_UI::editor_realized));
-       editor->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), true));
+        editor->signal_event().connect (sigc::bind (sigc::ptr_fun (&Keyboard::catch_user_event_for_pre_dialog_focus), editor));
 
        return 0;
 }
@@ -106,6 +107,10 @@ ARDOUR_UI::install_actions ()
        ActionManager::register_action (main_menu_actions, X_("Sync"), _("Sync"));
        ActionManager::register_action (main_menu_actions, X_("TransportOptions"), _("Options"));
        ActionManager::register_action (main_menu_actions, X_("WindowMenu"), _("Window"));
+       ActionManager::register_action (main_menu_actions, X_("MixerMenu"), _("Mixer"));
+       ActionManager::register_action (main_menu_actions, X_("EditorMenu"), _("Editor"));
+       ActionManager::register_action (main_menu_actions, X_("PrefsMenu"), _("Preferences"));
+       ActionManager::register_action (main_menu_actions, X_("DetachMenu"), _("Detach"));
        ActionManager::register_action (main_menu_actions, X_("Help"), _("Help"));
        ActionManager::register_action (main_menu_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
        ActionManager::register_action (main_menu_actions, X_("AudioFileFormat"), _("Audio File Format"));
@@ -161,6 +166,14 @@ ARDOUR_UI::install_actions ()
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::write_sensitive_actions.push_back (act);
 
+       act = ActionManager::register_action (main_actions, X_("QuickSnapshotStay"), _("Quick Snapshot (& keep working on current version) ..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::quick_snapshot_session), false));
+       ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::write_sensitive_actions.push_back (act);
+
+       act = ActionManager::register_action (main_actions, X_("QuickSnapshotSwitch"), _("Quick Snapshot (& switch to new version) ..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::quick_snapshot_session), true));
+       ActionManager::session_sensitive_actions.push_back (act);
+       ActionManager::write_sensitive_actions.push_back (act);
+
        act = ActionManager::register_action (main_actions, X_("SaveAs"), _("Save As..."), sigc::mem_fun(*this, &ARDOUR_UI::save_session_as));
        ActionManager::session_sensitive_actions.push_back (act);
        ActionManager::write_sensitive_actions.push_back (act);
@@ -208,6 +221,22 @@ ARDOUR_UI::install_actions ()
        ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (sigc::mem_fun(*this, &ARDOUR_UI::finish))));
        ActionManager::register_action (common_actions, X_("Hide"), _("Hide"), sigc::mem_fun (*this, &ARDOUR_UI::hide_application));
 
+       ActionManager::register_action (common_actions, X_("show-editor"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), editor));
+       ActionManager::register_action (common_actions, X_("show-mixer"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), mixer));
+       ActionManager::register_action (common_actions, X_("show-preferences"), _("Show"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::show_tabbable), rc_option_editor));
+
+       ActionManager::register_action (common_actions, X_("hide-editor"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), editor));
+       ActionManager::register_action (common_actions, X_("hide-mixer"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), mixer));
+       ActionManager::register_action (common_actions, X_("hide-preferences"), _("Hide"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::hide_tabbable), rc_option_editor));
+       
+       ActionManager::register_action (common_actions, X_("attach-editor"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), editor));
+       ActionManager::register_action (common_actions, X_("attach-mixer"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), mixer));
+       ActionManager::register_action (common_actions, X_("attach-preferences"), _("Attach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::attach_tabbable), rc_option_editor));
+       
+       ActionManager::register_action (common_actions, X_("detach-editor"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), editor));
+       ActionManager::register_action (common_actions, X_("detach-mixer"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), mixer));
+       ActionManager::register_action (common_actions, X_("detach-preferences"), _("Detach"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::detach_tabbable), rc_option_editor));
+
        /* windows visibility actions */
 
        ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), sigc::mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
@@ -224,8 +253,6 @@ ARDOUR_UI::install_actions ()
 if (Profile->get_mixbus())
        ActionManager::register_action (common_actions, X_("show-ui-prefs"), _("Show more UI preferences"), sigc::mem_fun (*this, &ARDOUR_UI::show_ui_prefs));
 
-       ActionManager::register_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
-       ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer));
        ActionManager::register_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"),  sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
 
        ActionManager::register_action (common_actions, X_("reattach-all-tearoffs"), _("Reattach All Tearoffs"), sigc::mem_fun (*this, &ARDOUR_UI::reattach_all_tearoffs));
@@ -629,6 +656,18 @@ ARDOUR_UI::save_ardour_state ()
        XMLNode* window_node = new XMLNode (X_("UI"));
        window_node->add_property (_status_bar_visibility.get_state_name().c_str(), _status_bar_visibility.get_state_value ());
 
+       /* main window */
+
+       gint mx, my, mw, mh;
+       _main_window.get_position (mx, my);
+       _main_window.get_size (mw, mh);
+
+       XMLNode main_window_node (X_("Main"));
+       main_window_node.add_property (X_("x"), PBD::to_string (mx, std::dec));
+       main_window_node.add_property (X_("y"), PBD::to_string (my, std::dec));
+       main_window_node.add_property (X_("w"), PBD::to_string (mw, std::dec));
+       main_window_node.add_property (X_("h"), PBD::to_string (mh, std::dec));
+
        /* Windows */
 
        WM::Manager::instance().add_state (*window_node);
@@ -657,6 +696,10 @@ ARDOUR_UI::save_ardour_state ()
 
        window_node->add_child_nocopy (*tearoff_node);
 
+       XMLNode& enode (editor->get_state());
+       XMLNode& mnode (mixer->get_state());
+       XMLNode& bnode (meterbridge->get_state());
+
        Config->add_extra_xml (*window_node);
        Config->add_extra_xml (audio_midi_setup->get_state());
 
@@ -664,11 +707,8 @@ ARDOUR_UI::save_ardour_state ()
 
        UIConfiguration::instance().save_state ();
 
-       XMLNode& enode (static_cast<Stateful*>(editor)->get_state());
-       XMLNode& mnode (mixer->get_state());
-       XMLNode& bnode (meterbridge->get_state());
-
        if (_session) {
+               _session->add_instant_xml (main_window_node);
                _session->add_instant_xml (enode);
                _session->add_instant_xml (mnode);
                _session->add_instant_xml (bnode);
@@ -676,8 +716,10 @@ ARDOUR_UI::save_ardour_state ()
                        _session->add_instant_xml (location_ui->ui().get_state ());
                }
        } else {
+               Config->add_instant_xml (main_window_node);
                Config->add_instant_xml (enode);
                Config->add_instant_xml (mnode);
+               Config->add_instant_xml (bnode);
                if (location_ui) {
                        Config->add_instant_xml (location_ui->ui().get_state ());
                }
@@ -717,3 +759,9 @@ ARDOUR_UI::xrun_button_release (GdkEventButton* ev)
        }
        return true;
 }
+
+Gtk::Notebook&
+ARDOUR_UI::tabs()
+{
+       return _tabs;
+}