X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui_dialogs.cc;h=ff2a5065581e9122fb86e0bb0a078ffb90153041;hb=1315ee3dff1e4966ab28bd47e81b5f003cac6e40;hp=1c270ef38d11e6653cbe8fe992278ee4396824bc;hpb=484debb45c5ea45bccf0f9cb05b1239a9c2244a3;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 1c270ef38d..ff2a506558 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -39,6 +39,7 @@ #include "i18n.h" using namespace ARDOUR; +using namespace PBD; using namespace Glib; using namespace Gtk; using namespace Gtkmm2ext; @@ -49,6 +50,7 @@ ARDOUR_UI::connect_to_session (Session *s) session = s; session->HaltOnXrun.connect (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message)); + session->RecordStateChanged.connect (mem_fun (*this, &ARDOUR_UI::record_state_changed)); /* sensitize menu bar options that are now valid */ @@ -60,6 +62,20 @@ ARDOUR_UI::connect_to_session (Session *s) ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false); } + if (!session->control_out()) { + Glib::RefPtr act = ActionManager::get_action (X_("options"), X_("SoloViaBus")); + if (act) { + act->set_sensitive (false); + } + } + + /* allow wastebasket flush again */ + + Glib::RefPtr act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket")); + if (act) { + act->set_sensitive (true); + } + /* there are never any selections on startup */ ActionManager::set_sensitive (ActionManager::region_selection_sensitive_actions, false); @@ -75,10 +91,6 @@ ARDOUR_UI::connect_to_session (Session *s) rec_button.set_sensitive (true); shuttle_box.set_sensitive (true); - if (session->n_diskstreams() == 0) { - session->DiskStreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added)); - } - if (connection_editor) { connection_editor->set_session (s); } @@ -95,10 +107,6 @@ ARDOUR_UI::connect_to_session (Session *s) option_editor->set_session (s); } - if (sfdb) { - sfdb->set_session (s); - } - setup_session_options (); Blink.connect (mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink)); @@ -118,6 +126,10 @@ ARDOUR_UI::connect_to_session (Session *s) solo_alert_button.set_active (session->soloing()); + /* update autochange callback on dirty state changing */ + + session->DirtyChanged.connect (mem_fun(*this, &ARDOUR_UI::update_autosave)); + /* can't be auditioning here */ primary_clock.set_session (s); @@ -131,13 +143,18 @@ ARDOUR_UI::connect_to_session (Session *s) connect_dependents_to_session (s); + /* listen to clock mode changes. don't do this earlier because otherwise as the clocks + restore their modes or are explicitly set, we will cause the "new" mode to be saved + back to the session XML ("extra") state. + */ + + AudioClock::ModeChanged.connect (mem_fun (*this, &ARDOUR_UI::store_clock_modes)); + + Glib::signal_idle().connect (mem_fun (*this, &ARDOUR_UI::first_idle)); + start_clocking (); start_blinking (); - if (editor) { - editor->present(); - } - transport_stopped (); second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_second), 1000); @@ -145,13 +162,14 @@ ARDOUR_UI::connect_to_session (Session *s) point_zero_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_zero_one_seconds), 40); } -int +bool ARDOUR_UI::unload_session () { if (session && session->dirty()) { switch (ask_about_saving_session (_("close"))) { case -1: - return 1; + // cancel + return false; case 1: session->save_state (""); @@ -161,6 +179,7 @@ ARDOUR_UI::unload_session () editor->hide (); second_connection.disconnect (); point_one_second_connection.disconnect (); + point_oh_five_second_connection.disconnect (); point_zero_one_second_connection.disconnect(); ActionManager::set_sensitive (ActionManager::session_sensitive_actions, false); @@ -194,7 +213,7 @@ ARDOUR_UI::unload_session () update_buffer_load (); - return 0; + return true; } int @@ -325,7 +344,7 @@ int ARDOUR_UI::create_route_params () { if (route_params == 0) { - route_params = new RouteParams_UI (*engine); + route_params = new RouteParams_UI (); route_params->set_session (session); route_params->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleInspector"))); } @@ -352,37 +371,6 @@ ARDOUR_UI::toggle_route_params_window () } } -int -ARDOUR_UI::create_sound_file_browser () -{ - if (sfdb == 0) { - sfdb = new SoundFileBrowser (_("Sound File Browser")); - sfdb->set_session (session); - sfdb->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleSoundFileBrowser"))); - } - return 0; -} - -void -ARDOUR_UI::toggle_sound_file_browser () -{ - if (create_sound_file_browser()) { - return; - } - - RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleSoundFileBrowser")); - if (act) { - RefPtr tact = RefPtr::cast_dynamic(act); - - if (tact->get_active()) { - sfdb->show_all(); - sfdb->present(); - } else { - sfdb->hide (); - } - } -} - void ARDOUR_UI::handle_locations_change (Location* ignored) {