From 75b1f698a1d328e25a566fe591c673c421e5459c Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 4 Jan 2011 20:52:30 +0000 Subject: [PATCH] Disable solo-controls-are-listen-controls if we don't have a monitor bus. Should fix #3660. git-svn-id: svn://localhost/ardour2/branches/3.0@8436 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/option_editor.h | 7 ++++- gtk2_ardour/rc_option_editor.cc | 43 +++++++++++++++++++--------- gtk2_ardour/rc_option_editor.h | 4 +++ gtk2_ardour/route_ui.cc | 4 +-- gtk2_ardour/session_option_editor.cc | 31 ++++++++------------ gtk2_ardour/session_option_editor.h | 6 ++-- 6 files changed, 57 insertions(+), 38 deletions(-) diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h index 89a69dfe67..e3f8bf312d 100644 --- a/gtk2_ardour/option_editor.h +++ b/gtk2_ardour/option_editor.h @@ -152,6 +152,10 @@ public: void set_state_from_config (); void add_to_page (OptionEditorPage*); + void set_sensitive (bool yn) { + _button->set_sensitive (yn); + } + private: void toggled (); @@ -398,11 +402,12 @@ public: protected: + virtual void parameter_changed (std::string const &); + ARDOUR::Configuration* _config; private: - void parameter_changed (std::string const &); PBD::ScopedConnection config_connection; Gtk::Notebook _notebook; diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 72229572a2..4a70586e55 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -1212,26 +1212,29 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_gain), sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain) )); - - add_option (_("Solo / mute"), - new BoolOption ( - "solo-control-is-listen-control", - _("Solo controls are Listen controls"), - sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control), - sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control) - )); - ComboOption* lp = new ComboOption ( + _solo_control_is_listen_control = new BoolOption ( + "solo-control-is-listen-control", + _("Solo controls are Listen controls"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control) + ); + + add_option (_("Solo / mute"), _solo_control_is_listen_control); + + _listen_position = new ComboOption ( "listen-position", _("Listen Position"), sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position), sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position) ); - lp->add (AfterFaderListen, _("after-fader listen")); - lp->add (PreFaderListen, _("pre-fader listen")); + _listen_position->add (AfterFaderListen, _("after-fader listen")); + _listen_position->add (PreFaderListen, _("pre-fader listen")); - add_option (_("Solo / mute"), lp); + add_option (_("Solo / mute"), _listen_position); + + parameter_changed ("use-monitor-bus"); add_option (_("Solo / mute"), new BoolOption ( @@ -1389,4 +1392,18 @@ RCOptionEditor::RCOptionEditor () add_option (_("Keyboard"), new KeyboardOptions); } - +void +RCOptionEditor::parameter_changed (string const & p) +{ + OptionEditor::parameter_changed (p); + + if (p == "use-monitor-bus") { + bool const s = Config->get_use_monitor_bus (); + if (!s) { + /* we can't use this if we don't have a monitor bus */ + Config->set_solo_control_is_listen_control (false); + } + _solo_control_is_listen_control->set_sensitive (s); + _listen_position->set_sensitive (s); + } +} diff --git a/gtk2_ardour/rc_option_editor.h b/gtk2_ardour/rc_option_editor.h index 367c85402b..84d92d305b 100644 --- a/gtk2_ardour/rc_option_editor.h +++ b/gtk2_ardour/rc_option_editor.h @@ -15,5 +15,9 @@ public: RCOptionEditor (); private: + void parameter_changed (std::string const &); + ARDOUR::RCConfiguration* _rc_config; + BoolOption* _solo_control_is_listen_control; + ComboOption* _listen_position; }; diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index d004f8cb73..1417883b55 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1645,9 +1645,7 @@ RouteUI::parameter_changed (string const & p) { if (p == "disable-disarm-during-roll") { check_rec_enable_sensitivity (); - } else if (p == "solo-control-is-listen-control") { - set_button_names (); - } else if (p == "listen-position") { + } else if (p == "use-monitor-bus" || p == "solo-control-is-listen-control" || p == "listen-position") { set_button_names (); } } diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index fd2f90d7ac..dbc8bbf233 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -41,19 +41,17 @@ SessionOptionEditor::SessionOptionEditor (Session* s) /* TIMECODE*/ - ComboOption* ssrc = new ComboOption ( + _sync_source = new ComboOption ( "sync-source", _("External timecode source"), sigc::mem_fun (*_session_config, &SessionConfiguration::get_sync_source), sigc::mem_fun (*_session_config, &SessionConfiguration::set_sync_source) ); - s->config.ParameterChanged.connect (_session_connections, invalidator (*this), ui_bind (&SessionOptionEditor::follow_sync_state, this, _1, s, ssrc), gui_context()); + populate_sync_options (); + parameter_changed (string ("external-sync")); - populate_sync_options (s, ssrc); - follow_sync_state (string ("external-sync"), s, ssrc); - - add_option (_("Timecode"), ssrc); + add_option (_("Timecode"), _sync_source); add_option (_("Timecode"), new OptionEditorHeading (_("Timecode Settings"))); @@ -298,28 +296,23 @@ SessionOptionEditor::SessionOptionEditor (Session* s) } void -SessionOptionEditor::populate_sync_options (Session* s, Option* opt) +SessionOptionEditor::populate_sync_options () { - ComboOption* sync_opt = dynamic_cast* > (opt); + vector sync_opts = _session->get_available_sync_options (); - vector sync_opts = s->get_available_sync_options (); - - sync_opt->clear (); + _sync_source->clear (); for (vector::iterator i = sync_opts.begin(); i != sync_opts.end(); ++i) { - sync_opt->add (*i, sync_source_to_string (*i)); + _sync_source->add (*i, sync_source_to_string (*i)); } } void -SessionOptionEditor::follow_sync_state (std::string p, Session* s, Option* opt) +SessionOptionEditor::parameter_changed (std::string const & p) { - ComboOption* sync_opt = dynamic_cast* > (opt); + OptionEditor::parameter_changed (p); + if (p == "external-sync") { - if (s->config.get_external_sync()) { - sync_opt->set_sensitive (false); - } else { - sync_opt->set_sensitive (true); - } + _sync_source->set_sensitive (!_session->config.get_external_sync ()); } } diff --git a/gtk2_ardour/session_option_editor.h b/gtk2_ardour/session_option_editor.h index d7b90fd233..135ef7c816 100644 --- a/gtk2_ardour/session_option_editor.h +++ b/gtk2_ardour/session_option_editor.h @@ -30,7 +30,9 @@ public: SessionOptionEditor (ARDOUR::Session* s); private: + void parameter_changed (std::string const &); + void populate_sync_options (); + ARDOUR::SessionConfiguration* _session_config; - void populate_sync_options (ARDOUR::Session*, Option*); - void follow_sync_state (std::string, ARDOUR::Session*, Option*); + ComboOption* _sync_source; };