From bd82dfce946a22eb23e6b3582726ce186a52c4b6 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 17 Sep 2009 02:09:31 +0000 Subject: more NSD changes. if JACK is not running and no interface has ever been chosen, show JUST the audio setup tab. once JACK is successfully started, reshow the NSD with just new/open tabs. still not finished with this utter piece of dreck git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@5670 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 16 +++++++- gtk2_ardour/engine_dialog.cc | 9 +++++ gtk2_ardour/engine_dialog.h | 3 ++ gtk2_ardour/new_session_dialog.cc | 83 +++++++++++++++++++++++++++++---------- gtk2_ardour/new_session_dialog.h | 3 ++ 5 files changed, 91 insertions(+), 23 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 2dfec7fe2a..4f57dec905 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -2301,8 +2301,13 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be response = Gtk::RESPONSE_REJECT; goto try_again; } + + /* hide the NSD while we start up the engine */ + + new_session_dialog->hide (); + flush_pending (); } - + if (create_engine ()) { backend_audio_error (!backend_audio_is_running, new_session_dialog); @@ -2346,10 +2351,17 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be switch (new_session_dialog->which_page()) { case NewSessionDialog::OpenPage: - case NewSessionDialog::EnginePage: goto loadit; break; + case NewSessionDialog::EnginePage: + if (new_session_dialog->engine_control.interface_chosen() && !session_path.empty()) { + goto loadit; + } else { + goto try_again; + } + break; + case NewSessionDialog::NewPage: /* nominally the "new" session creator, but could be in use for an old session */ should_be_new = true; diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 90151fb85d..f643324720 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -884,6 +884,15 @@ EngineControl::driver_changed () hw_meter_button.set_sensitive (false); monitor_button.set_sensitive (false); } + + interface_combo.signal_changed().connect (mem_fun (*this, &EngineControl::emit_interface_chosen)); +} + +void +EngineControl::emit_interface_chosen () +{ + cerr << "interface combo changed\n"; + InterfaceChosen(); } uint32_t diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index c439719d75..6fc075271c 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -29,6 +29,9 @@ class EngineControl : public Gtk::VBox { XMLNode& get_state (); void set_state (const XMLNode&); + sigc::signal InterfaceChosen; + void emit_interface_chosen(); /* grr, need to figure out how to connect signalsl directly */ + private: Gtk::Adjustment periods_adjustment; Gtk::SpinButton periods_spinner; diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc index b094e3a635..7799131737 100644 --- a/gtk2_ardour/new_session_dialog.cc +++ b/gtk2_ardour/new_session_dialog.cc @@ -497,12 +497,20 @@ NewSessionDialog::set_have_engine (bool yn) engine_control.discover_servers (); if (engine_control.interface_chosen()) { m_notebook->append_page (engine_control, _("Audio Setup")); + m_notebook->show_all_children(); + page_set = Pages (page_set | EnginePage); } else { - /* no interface ever selected - make it the first page */ + /* no interface ever selected - make it the first and only page */ m_notebook->prepend_page (engine_control, _("Audio Setup")); + if (page_set & NewPage) { + m_notebook->remove_page (*new_session_table); + } + if (page_set & OpenPage) { + m_notebook->remove_page (*open_session_vbox); + } + m_notebook->show_all_children(); + page_set = Pages (EnginePage); } - m_notebook->show_all_children(); - page_set = Pages (page_set | EnginePage); } } } @@ -776,29 +784,58 @@ NewSessionDialog::which_page () const } } else if (page_set == (NewPage|EnginePage)) { - switch (num) { - case 0: - return NewPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return NewPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + default: + return NewPage; + } } } else if (page_set == (NewPage|EnginePage|OpenPage)) { - switch (num) { - case 0: - return NewPage; - case 1: - return OpenPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return NewPage; + case 1: + return OpenPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + case 1: + return NewPage; + default: + return OpenPage; + } } } else if (page_set == (OpenPage|EnginePage)) { - switch (num) { - case 0: - return OpenPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return OpenPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + default: + return OpenPage; + } } } @@ -852,7 +889,11 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum) case EnginePage: on_new_session_page = false; - m_okbutton->set_label(_("Open")); + if (!engine_control.interface_chosen()) { + m_okbutton->set_label(_("Start Audio Engine")); + } else { + m_okbutton->set_label(_("Open")); + } m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)))); set_response_sensitive (Gtk::RESPONSE_NONE, false); set_response_sensitive (Gtk::RESPONSE_OK, true); diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h index 658b2a8b90..81a0bebfac 100644 --- a/gtk2_ardour/new_session_dialog.h +++ b/gtk2_ardour/new_session_dialog.h @@ -217,6 +217,9 @@ protected: bool have_engine; Glib::ustring engine_page_session_folder; Glib::ustring engine_page_session_name; + + sigc::connection ic_connection; + void engine_interface_chosen(); }; #endif // NEW_SESSION_DIALOG_H -- cgit v1.2.3