X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui_dialogs.cc;h=6cbaeb58f0a1f0487291596787cc586e98c7d383;hb=73a6b8ef25bb90ad6c66b25b17da5962a38291d2;hp=3d299e9ac23e33b8a331cd2b8451d8d211881894;hpb=7886d3232ca2eafedc05e12bd0adbd5abe535f64;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 3d299e9ac2..6cbaeb58f0 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -23,21 +23,26 @@ This is to cut down on the compile times. It also helps with my sanity. */ -#include +#include "ardour/session.h" +#include "actions.h" #include "ardour_ui.h" -#include "connection_editor.h" #include "location_ui.h" #include "mixer_ui.h" -#include "option_editor.h" +#include "rc_option_editor.h" +#include "session_option_editor.h" #include "public_editor.h" #include "route_params_ui.h" #include "sfdb_ui.h" -#include "actions.h" +#include "theme_manager.h" +#include "bundle_manager.h" +#include "keyeditor.h" #include "i18n.h" using namespace ARDOUR; +using namespace PBD; +using namespace Glib; using namespace Gtk; using namespace Gtkmm2ext; @@ -46,23 +51,47 @@ ARDOUR_UI::connect_to_session (Session *s) { session = s; - session->HaltOnXrun.connect (mem_fun(*this, &ARDOUR_UI::halt_on_xrun_message)); + session->Xrun.connect (mem_fun(*this, &ARDOUR_UI::xrun_handler)); + 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); - - 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 (session->locations()->num_range_markers()) { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true); + } else { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false); } - if (connection_editor) { - connection_editor->set_session (s); + 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::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 (location_ui) { location_ui->set_session(s); } @@ -71,10 +100,7 @@ ARDOUR_UI::connect_to_session (Session *s) route_params->set_session (s); } - if (option_editor) { - 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)); @@ -85,7 +111,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 */ @@ -94,6 +119,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); @@ -105,17 +134,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,11 +156,12 @@ ARDOUR_UI::connect_to_session (Session *s) } int -ARDOUR_UI::unload_session () +ARDOUR_UI::unload_session (bool hide_stuff) { if (session && session->dirty()) { - switch (ask_about_saving_session (_("close session"))) { + switch (ask_about_saving_session (_("close"))) { case -1: + // cancel return 1; case 1: @@ -137,8 +170,15 @@ ARDOUR_UI::unload_session () } } + if (hide_stuff) { + editor->hide (); + mixer->hide (); + theme_manager->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); @@ -159,152 +199,175 @@ ARDOUR_UI::unload_session () preroll_clock.set_session (0); postroll_clock.set_session (0); - if (option_editor) { - option_editor->set_session (0); - } - - if (mixer) { - mixer->hide_all (); - } - delete session; session = 0; update_buffer_load (); - // update_disk_rate (); return 0; } -int -ARDOUR_UI::create_connection_editor () +void +ARDOUR_UI::toggle_big_clock_window () { - if (connection_editor == 0) { - // GTK2FIX - // connection_editor = new ConnectionEditor (); - // connection_editor->signal_unmap().connect (mem_fun(*this, &ARDOUR_UI::connection_editor_hiding)); - } - - if (session) { - // connection_editor->set_session (session); + 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 (); + } } - - return 0; } void -ARDOUR_UI::toggle_connection_editor () +ARDOUR_UI::toggle_rc_options_window () { - if (create_connection_editor()) { - return; - } - - //GTK2FIX -#if 0 + if (rc_option_editor == 0) { + rc_option_editor = new RCOptionEditor; + rc_option_editor->signal_unmap().connect(sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleRCOptionsEditor"))); + rc_option_editor->set_session (session); + } - if (connection_editor_check->get_active()){ - connection_editor->present(); - } else { - connection_editor->hide_all(); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleRCOptionsEditor")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + rc_option_editor->show_all (); + rc_option_editor->present (); + } else { + rc_option_editor->hide (); + } } -#endif } void -ARDOUR_UI::connection_editor_hiding() +ARDOUR_UI::toggle_session_options_window () { - //GTK2FIX - // connection_editor_check->set_active(false); -} + if (session_option_editor == 0) { + session_option_editor = new SessionOptionEditor (session); + session_option_editor->signal_unmap().connect(sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleSessionOptionsEditor"))); + } -void -ARDOUR_UI::big_clock_hiding() -{ - // GTK2FIX - // big_clock_check->set_active(false); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleSessionOptionsEditor")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic (act); + + if (tact->get_active()) { + session_option_editor->show_all (); + session_option_editor->present (); + } else { + session_option_editor->hide (); + } + } } -void -ARDOUR_UI::toggle_big_clock_window () +int +ARDOUR_UI::create_location_ui () { - if (big_clock_window->is_visible()) { - big_clock_window->hide (); - } else { - big_clock_window->present (); + if (location_ui == 0) { + location_ui = new LocationUI (); + location_ui->set_session (session); + location_ui->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleLocations"))); } + return 0; } void -ARDOUR_UI::toggle_options_window () +ARDOUR_UI::toggle_location_window () { - if (option_editor == 0) { - option_editor = new OptionEditor (*this, *editor, *mixer); - option_editor->signal_unmap().connect(mem_fun(*this, &ARDOUR_UI::option_hiding)); - option_editor->set_session (session); - } + if (create_location_ui()) { + return; + } - if (option_editor->is_visible()) { - option_editor->hide (); - } else { - option_editor->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::option_hiding () +ARDOUR_UI::toggle_key_editor () { - // GTK2FIX - // options_window_check->set_active(false); -} - -void -ARDOUR_UI::toggle_auto_input () + if (key_editor == 0) { + key_editor = new KeyEditor; + key_editor->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleKeyEditor"))); + } -{ - toggle_some_session_state (auto_input_button, - &Session::get_auto_input, - &Session::set_auto_input); + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleKeyEditor")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic(act); + + if (tact->get_active()) { + key_editor->show_all (); + key_editor->present (); + } else { + key_editor->hide (); + } + } } -int -ARDOUR_UI::create_location_ui () +void +ARDOUR_UI::toggle_theme_manager () { - if (location_ui == 0) { - location_ui = new LocationUI (); - location_ui->set_session (session); - location_ui->signal_unmap().connect (mem_fun(*this, &ARDOUR_UI::location_ui_hiding)); - } - return 0; + 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 (); + } + } } void -ARDOUR_UI::toggle_location_window () +ARDOUR_UI::create_bundle_manager () { - if (create_location_ui()) { - return; - } - - if (location_ui->is_visible()) { - location_ui->hide(); - } else { - location_ui->present(); + if (bundle_manager == 0) { + bundle_manager = new BundleManager (*session); + bundle_manager->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("/Common/ToggleBundleManager"))); } } void -ARDOUR_UI::location_ui_hiding() +ARDOUR_UI::toggle_bundle_manager () { - // GTK2FIX - // locations_dialog_check->set_active(false); + create_bundle_manager (); + + RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleBundleManager")); + if (act) { + RefPtr tact = RefPtr::cast_dynamic (act); + + if (tact->get_active()) { + bundle_manager->show_all (); + bundle_manager->present (); + } else { + bundle_manager->hide (); + } + } } 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 (mem_fun(*this, &ARDOUR_UI::route_params_hiding)); + route_params->signal_unmap().connect (sigc::bind(sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("/Common/ToggleInspector"))); } return 0; } @@ -316,37 +379,48 @@ 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 (); + } } } - + void -ARDOUR_UI::route_params_hiding () +ARDOUR_UI::handle_locations_change (Location* ignored) { - // GTK2FIX - // route_params_check->set_active (false); + if (session) { + if (session->locations()->num_range_markers()) { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, true); + } else { + ActionManager::set_sensitive (ActionManager::range_sensitive_actions, false); + } + } } -void -ARDOUR_UI::toggle_sound_file_browser () +bool +ARDOUR_UI::main_window_state_event_handler (GdkEventWindowState* ev, bool window_was_editor) { - /* This is called from the check menu item. If checked on, open - * a new SoundFileBrowser, and connect it's quit method to the - * check menu item so if it is toggled off, it exits. If it exits - * by itself, set the check menu item to false. - * If this is called by checking off, don't do anything, the signals - * should handle everything. I expect this idiom to be useful for - * other Gtk::Dialog's as well. --Taybin */ - - //GTK2FIX - //if (sfdb_check->get_active()) { - //SoundFileBrowser sfdb(_("Sound File Browser")); - //sfdb_check->signal_toggled().connect (bind (mem_fun (sfdb, &Gtk::Dialog::response), Gtk::RESPONSE_CANCEL)); - //sfdb.run(); - //sfdb_check->set_active(false); - //} -} + if (window_was_editor) { + + if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) && + (ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) { + float_big_clock (editor); + } + + } else { + if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) && + (ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) { + float_big_clock (mixer); + } + } + + return false; +}