summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-01-04 20:52:30 +0000
committerCarl Hetherington <carl@carlh.net>2011-01-04 20:52:30 +0000
commit75b1f698a1d328e25a566fe591c673c421e5459c (patch)
tree7c30e90bcb896c182dee26679d51b3432566d4c3 /gtk2_ardour
parent69aa1060509001750be9e1b39b521348d13befb8 (diff)
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/option_editor.h7
-rw-r--r--gtk2_ardour/rc_option_editor.cc43
-rw-r--r--gtk2_ardour/rc_option_editor.h4
-rw-r--r--gtk2_ardour/route_ui.cc4
-rw-r--r--gtk2_ardour/session_option_editor.cc31
-rw-r--r--gtk2_ardour/session_option_editor.h6
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<ListenPosition>* lp = new ComboOption<ListenPosition> (
+ _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<ListenPosition> (
"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"), _listen_position);
- add_option (_("Solo / mute"), lp);
+ 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<ARDOUR::ListenPosition>* _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<SyncSource>* ssrc = new ComboOption<SyncSource> (
+ _sync_source = new ComboOption<SyncSource> (
"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<SyncSource>* sync_opt = dynamic_cast<ComboOption<SyncSource>* > (opt);
-
- vector<SyncSource> sync_opts = s->get_available_sync_options ();
+ vector<SyncSource> sync_opts = _session->get_available_sync_options ();
- sync_opt->clear ();
+ _sync_source->clear ();
for (vector<SyncSource>::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<SyncSource>* sync_opt = dynamic_cast<ComboOption<SyncSource>* > (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<ARDOUR::SyncSource>* _sync_source;
};