X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui_dialogs.cc;h=e382406eea46fc54bd635b95593169093064662a;hb=1296b7fe89129e17b76f4b8c4adebef21f04b429;hp=a0d61afdffeac95411baeed35605486257237436;hpb=302b08c0592a6b7c40dec8c04f52c346e14b17af;p=ardour.git diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index a0d61afdff..e382406eea 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -23,13 +23,12 @@ This is to cut down on the compile times. It also helps with my sanity. */ -#include "ardour/session.h" #include "ardour/audioengine.h" #include "ardour/automation_watch.h" - -#ifdef interface -#undef interface -#endif +#include "ardour/control_protocol_manager.h" +#include "ardour/profile.h" +#include "ardour/session.h" +#include "control_protocol/control_protocol.h" #include "actions.h" #include "add_route_dialog.h" @@ -56,6 +55,7 @@ #include "sfdb_ui.h" #include "theme_manager.h" #include "time_info_box.h" +#include "timers.h" #include @@ -72,7 +72,6 @@ ARDOUR_UI::set_session (Session *s) { SessionHandlePtr::set_session (s); - if (!_session) { WM::Manager::instance().set_session (s); /* Session option editor cannot exist across change-of-session */ @@ -147,12 +146,9 @@ ARDOUR_UI::set_session (Session *s) setup_session_options (); - Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink)); - Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::solo_blink)); - Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::sync_blink)); - Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink)); - Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::feedback_blink)); + blink_connection = Timers::blink_connect (sigc::mem_fun(*this, &ARDOUR_UI::blink_handler)); + _session->SaveSessionRequested.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::save_session_at_its_request, this, _1), gui_context()); _session->RecordStateChanged.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::record_state_changed, this), gui_context()); _session->StepEditStatusChange.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::step_edit_status_change, this, _1), gui_context()); _session->TransportStateChange.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::map_transport_state, this), gui_context()); @@ -180,16 +176,21 @@ ARDOUR_UI::set_session (Session *s) Glib::signal_idle().connect (sigc::mem_fun (*this, &ARDOUR_UI::first_idle)); start_clocking (); - start_blinking (); map_transport_state (); - second_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ARDOUR_UI::every_second), 1000); - point_one_second_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ARDOUR_UI::every_point_one_seconds), 100); - point_zero_something_second_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ARDOUR_UI::every_point_zero_something_seconds), 40); + second_connection = Timers::second_connect (sigc::mem_fun(*this, &ARDOUR_UI::every_second)); + point_one_second_connection = Timers::rapid_connect (sigc::mem_fun(*this, &ARDOUR_UI::every_point_one_seconds)); + point_zero_something_second_connection = Timers::super_rapid_connect (sigc::mem_fun(*this, &ARDOUR_UI::every_point_zero_something_seconds)); + set_fps_timeout_connection(); update_format (); + if (meter_box.get_parent()) { + transport_tearoff_hbox.remove (meter_box); + transport_tearoff_hbox.remove (editor_meter_peak_display); + } + if (editor_meter) { meter_box.remove(*editor_meter); delete editor_meter; @@ -197,37 +198,44 @@ ARDOUR_UI::set_session (Session *s) editor_meter_peak_display.hide(); } - if (_session && _session->master_out()) { - editor_meter = new LevelMeterHBox(_session); - editor_meter->set_meter (_session->master_out()->shared_peak_meter().get()); - editor_meter->clear_meters(); - editor_meter->set_type (_session->master_out()->meter_type()); - editor_meter->setup_meters (30, 12, 6); - editor_meter->show(); - meter_box.pack_start(*editor_meter); + if (meter_box.get_parent()) { + transport_tearoff_hbox.remove (meter_box); + transport_tearoff_hbox.remove (editor_meter_peak_display); + } + + if (_session && + _session->master_out() && + _session->master_out()->n_outputs().n(DataType::AUDIO) > 0) { + + if (!ARDOUR::Profile->get_trx()) { + editor_meter = new LevelMeterHBox(_session); + editor_meter->set_meter (_session->master_out()->shared_peak_meter().get()); + editor_meter->clear_meters(); + editor_meter->set_type (_session->master_out()->meter_type()); + editor_meter->setup_meters (30, 12, 6); + editor_meter->show(); + meter_box.pack_start(*editor_meter); + } ArdourMeter::ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_peak_display)); ArdourMeter::ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_route_peak_display)); ArdourMeter::ResetGroupPeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_group_peak_display)); editor_meter_peak_display.set_name ("meterbridge peakindicator"); - editor_meter_peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body)); editor_meter_peak_display.unset_flags (Gtk::CAN_FOCUS); - editor_meter_peak_display.set_size_request(6, -1); - editor_meter_peak_display.set_corner_radius(2); + editor_meter_peak_display.set_size_request(8, -1); + editor_meter_peak_display.set_corner_radius(3); editor_meter_max_peak = -INFINITY; editor_meter_peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &ARDOUR_UI::editor_meter_peak_button_release), false); - if (Config->get_show_editor_meter()) { + if (ARDOUR_UI::config()->get_show_editor_meter() && !ARDOUR::Profile->get_trx()) { + transport_tearoff_hbox.pack_start (meter_box, false, false); + transport_tearoff_hbox.pack_start (editor_meter_peak_display, false, false); meter_box.show(); editor_meter_peak_display.show(); - } else { - meter_box.hide(); - editor_meter_peak_display.hide(); } } - } int @@ -253,11 +261,20 @@ ARDOUR_UI::unload_session (bool hide_stuff) } } + { + // tear down session specific CPI (owned by rc_config_editor which can remain) + ControlProtocolManager& m = ControlProtocolManager::instance (); + for (std::list::iterator i = m.control_protocol_info.begin(); i != m.control_protocol_info.end(); ++i) { + if (*i && (*i)->protocol && (*i)->protocol->has_editor ()) { + (*i)->protocol->tear_down_gui (); + } + } + } + if (hide_stuff) { editor->hide (); mixer->hide (); meterbridge->hide (); - theme_manager->hide (); audio_port_matrix->hide(); midi_port_matrix->hide(); route_params->hide(); @@ -266,6 +283,7 @@ ARDOUR_UI::unload_session (bool hide_stuff) second_connection.disconnect (); point_one_second_connection.disconnect (); point_zero_something_second_connection.disconnect(); + fps_connection.disconnect(); if (editor_meter) { meter_box.remove(*editor_meter); @@ -284,12 +302,11 @@ ARDOUR_UI::unload_session (bool hide_stuff) ARDOUR_UI::instance()->video_timeline->close_session(); } - stop_blinking (); stop_clocking (); /* drop everything attached to the blink signal */ - Blink.clear (); + blink_connection.disconnect (); delete _session; _session = 0; @@ -319,7 +336,9 @@ ARDOUR_UI::goto_editor_window () editor->show_window (); editor->present (); /* mixer should now be on top */ - WM::Manager::instance().set_transient_for (editor); + if (ARDOUR_UI::config()->get_transients_follow_front()) { + WM::Manager::instance().set_transient_for (editor); + } _mixer_on_top = false; } @@ -339,7 +358,7 @@ ARDOUR_UI::goto_mixer_window () screen = Gdk::Screen::get_default(); } - if (screen && screen->get_height() < 700) { + if (g_getenv ("ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && screen && screen->get_height() < 700) { Gtk::MessageDialog msg (_("This screen is not tall enough to display the mixer window")); msg.run (); return; @@ -348,7 +367,9 @@ ARDOUR_UI::goto_mixer_window () mixer->show_window (); mixer->present (); /* mixer should now be on top */ - WM::Manager::instance().set_transient_for (mixer); + if (ARDOUR_UI::config()->get_transients_follow_front()) { + WM::Manager::instance().set_transient_for (mixer); + } _mixer_on_top = true; } @@ -562,5 +583,20 @@ ARDOUR_UI::editor_meter_peak_button_release (GdkEventButton* ev) } else if (_session->master_out()) { ArdourMeter::ResetRoutePeakDisplays (_session->master_out().get()); } - return true; + return false; +} + +void +ARDOUR_UI::toggle_mixer_space() +{ + Glib::RefPtr act = ActionManager::get_action ("Common", "ToggleMaximalMixer"); + + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + if (tact->get_active()) { + mixer->maximise_mixer_space (); + } else { + mixer->restore_mixer_space (); + } + } }