summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-11-21 19:33:09 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-11-21 19:33:09 +0000
commit7fdfa981b59537352dde099401a62536f99148e7 (patch)
treec8c6bb69776dea77aea8cea7c3519010c19feb99
parent3ef1fe249318d5f4331ac4187ea07b9ec5863c60 (diff)
get "solo safe" back in action again
git-svn-id: svn://localhost/ardour2/branches/3.0@6149 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/route_ui.cc41
-rw-r--r--gtk2_ardour/route_ui.h3
-rw-r--r--libs/ardour/ardour/route.h5
-rw-r--r--libs/ardour/route.cc15
4 files changed, 50 insertions, 14 deletions
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 95cb6b66ef..2de7c6964e 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -398,19 +398,10 @@ RouteUI::solo_press(GdkEventButton* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
- // shift-click: set this route to solo safe
-
- if (Profile->get_sae() && ev->button == 1) {
- // button 1 and shift-click: disables solo_latched for this click
- if (!Config->get_solo_latched ()) {
- Config->set_solo_latched (true);
- reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this);
- Config->set_solo_latched (false);
- }
- } else {
- _route->set_solo_isolated (!_route->solo_isolated(), this);
- wait_for_release = false;
- }
+ // shift-click: toggle solo isolated status
+
+ _route->set_solo_isolated (!_route->solo_isolated(), this);
+ wait_for_release = false;
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -827,6 +818,13 @@ RouteUI::build_solo_menu (void)
items.push_back (CheckMenuElem(*check));
check->show_all();
+ check = new CheckMenuItem(_("Solo Safe"));
+ check->set_active (_route->solo_safe());
+ check->signal_toggled().connect (bind (mem_fun (*this, &RouteUI::toggle_solo_safe), check));
+ _route->solo_safe_changed.connect(bind (mem_fun (*this, &RouteUI::solo_safe_toggle), check));
+ items.push_back (CheckMenuElem(*check));
+ check->show_all();
+
//items.push_back (SeparatorElem());
// items.push_back (MenuElem (_("MIDI Bind"), mem_fun (*mute_button, &BindableToggleButton::midi_learn)));
@@ -928,6 +926,12 @@ RouteUI::toggle_solo_isolated (Gtk::CheckMenuItem* check)
}
void
+RouteUI::toggle_solo_safe (Gtk::CheckMenuItem* check)
+{
+ _route->set_solo_safe (check->get_active(), this);
+}
+
+void
RouteUI::set_route_group_solo(boost::shared_ptr<Route> route, bool yn)
{
RouteGroup* route_group;
@@ -1231,6 +1235,17 @@ RouteUI::solo_isolated_toggle(void* /*src*/, Gtk::CheckMenuItem* check)
}
}
+
+void
+RouteUI::solo_safe_toggle(void* /*src*/, Gtk::CheckMenuItem* check)
+{
+ bool yn = _route->solo_safe ();
+
+ if (check->get_active() != yn) {
+ check->set_active (yn);
+ }
+}
+
void
RouteUI::disconnect_input ()
{
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 15eafb4e18..53dd810541 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -139,6 +139,9 @@ class RouteUI : public virtual AxisView
void solo_isolated_toggle (void*, Gtk::CheckMenuItem*);
void toggle_solo_isolated (Gtk::CheckMenuItem*);
+ void solo_safe_toggle (void*, Gtk::CheckMenuItem*);
+ void toggle_solo_safe (Gtk::CheckMenuItem*);
+
Gtk::CheckMenuItem* pre_fader_mute_check;
Gtk::CheckMenuItem* post_fader_mute_check;
Gtk::CheckMenuItem* listen_mute_check;
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index db67cab17b..e3c3a370a9 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -129,14 +129,17 @@ class Route : public SessionObject, public AutomatableControls
*/
void set_solo (bool yn, void *src);
+ bool soloed () const {return self_soloed () || soloed_by_others (); }
bool soloed_by_others () const { return !_solo_isolated && _soloed_by_others; }
bool self_soloed () const { return _self_solo; }
- bool soloed () const {return self_soloed () || soloed_by_others (); }
void set_solo_isolated (bool yn, void *src);
bool solo_isolated() const;
+ void set_solo_safe (bool yn, void *src);
+ bool solo_safe() const;
+
void set_listen (bool yn, void* src);
bool listening () const;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 372e9ade68..6941b537f3 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -522,6 +522,21 @@ Route::listening () const
}
void
+Route::set_solo_safe (bool yn, void *src)
+{
+ if (_solo_safe != yn) {
+ _solo_safe = yn;
+ solo_safe_changed (src);
+ }
+}
+
+bool
+Route::solo_safe() const
+{
+ return _solo_safe;
+}
+
+void
Route::set_solo (bool yn, void *src)
{
if (_solo_safe) {