X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fardour_ui_dialogs.cc;h=532b7ce76b3d6cb7db0d621f3c26f9d3a6a6bb01;hb=fda1de74a125e4ffdddff5f11d40d61aed856588;hp=1a0ba6618f6f8361a241fd132082f138c61e9dd4;hpb=170d6b24cec9b7fe51d74b75544a097948e03082;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 1a0ba6618f..532b7ce76b 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -34,10 +34,12 @@ #include "public_editor.h" #include "route_params_ui.h" #include "sfdb_ui.h" +#include "theme_manager.h" #include "i18n.h" using namespace ARDOUR; +using namespace PBD; using namespace Glib; using namespace Gtk; using namespace Gtkmm2ext; @@ -48,18 +50,47 @@ 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 */ ActionManager::set_sensitive (ActionManager::session_sensitive_actions, true); + + if (session->locations()->num_range_markers()) { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true); + } else { + 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); + ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::line_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::point_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::playlist_selection_sensitive_actions, false); + + session->locations()->added.connect (mem_fun (*this, &ARDOUR_UI::handle_locations_change)); + session->locations()->removed.connect (mem_fun (*this, &ARDOUR_UI::handle_locations_change)); 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); } @@ -76,6 +107,7 @@ ARDOUR_UI::connect_to_session (Session *s) option_editor->set_session (s); } + setup_session_options (); Blink.connect (mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink)); Blink.connect (mem_fun(*this, &ARDOUR_UI::solo_blink)); @@ -86,7 +118,6 @@ ARDOUR_UI::connect_to_session (Session *s) */ session->TransportStateChange.connect (mem_fun(*this, &ARDOUR_UI::queue_transport_change)); - session->ControlChanged.connect (mem_fun(*this, &ARDOUR_UI::queue_map_control_change)); /* alert the user to these things happening */ @@ -95,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); @@ -106,17 +141,20 @@ ARDOUR_UI::connect_to_session (Session *s) /* Clocks are on by default after we are connected to a session, so show that here. */ - map_button_state (); - 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); @@ -124,22 +162,24 @@ 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 session"))) { + switch (ask_about_saving_session (_("close"))) { case -1: - return 1; + // cancel + return false; case 1: session->save_state (""); break; } } - + 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); @@ -172,22 +212,23 @@ ARDOUR_UI::unload_session () session = 0; update_buffer_load (); - // update_disk_rate (); - return 0; + return true; } int ARDOUR_UI::create_connection_editor () { +#if 0 if (connection_editor == 0) { -// connection_editor = new ConnectionEditor (); -// connection_editor->signal_unmap().connect (sigc::bind (ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleConnections"))); + connection_editor = new ConnectionEditor (); + connection_editor->signal_unmap().connect (sigc::bind (ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleConnections"))); } if (session) { -// connection_editor->set_session (session); + connection_editor->set_session (session); } +#endif return 0; } @@ -199,13 +240,17 @@ ARDOUR_UI::toggle_connection_editor () return; } - //GTK2FIX #if 0 - - if (connection_editor_check->get_active()){ - connection_editor->present(); - } else { - connection_editor->hide_all(); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleConnections")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + connection_editor->show_all (); + connection_editor->present (); + } else { + connection_editor->hide (); + } } #endif } @@ -213,11 +258,16 @@ ARDOUR_UI::toggle_connection_editor () void ARDOUR_UI::toggle_big_clock_window () { - if (big_clock_window->is_visible()) { - big_clock_window->hide (); - } else { - big_clock_window->show_all (); - big_clock_window->present (); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleBigClock")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + big_clock_window->show_all (); + big_clock_window->present (); + } else { + big_clock_window->hide (); + } } } @@ -230,22 +280,19 @@ ARDOUR_UI::toggle_options_window () option_editor->set_session (session); } - if (option_editor->is_visible()) { - option_editor->hide (); - } else { - option_editor->present (); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleOptionsEditor")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + option_editor->show_all (); + option_editor->present (); + } else { + option_editor->hide (); + } } } -void -ARDOUR_UI::toggle_auto_input () - -{ - toggle_some_session_state (auto_input_button, - &Session::get_auto_input, - &Session::set_auto_input); -} - int ARDOUR_UI::create_location_ui () { @@ -264,10 +311,32 @@ ARDOUR_UI::toggle_location_window () return; } - if (location_ui->is_visible()) { - location_ui->hide(); - } else { - location_ui->present(); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleLocations")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + location_ui->show_all (); + location_ui->present (); + } else { + location_ui->hide (); + } + } +} + +void +ARDOUR_UI::toggle_theme_manager () +{ + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleThemeManager")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + theme_manager->show_all (); + theme_manager->present (); + } else { + theme_manager->hide (); + } } } @@ -275,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"))); } @@ -289,39 +358,27 @@ ARDOUR_UI::toggle_route_params_window () return; } - if (route_params->is_visible ()) { - route_params->hide (); - } else { - route_params->present (); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleInspector")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + route_params->show_all (); + route_params->present (); + } else { + route_params->hide (); + } } } -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 () +ARDOUR_UI::handle_locations_change (Location* ignored) { - if (create_sound_file_browser()) { - return; - } - - RefPtr act = ActionManager::ui_manager->get_action (X_("/Common/ToggleSoundFileBrowser")); - if (act) { - RefPtr tact = RefPtr::cast_dynamic(act); - - if (tact->get_active()) { - sfdb->present(); + if (session) { + if (session->locations()->num_range_markers()) { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true); } else { - sfdb->hide (); + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false); } } }