From 7fdfa981b59537352dde099401a62536f99148e7 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 21 Nov 2009 19:33:09 +0000 Subject: [PATCH] get "solo safe" back in action again git-svn-id: svn://localhost/ardour2/branches/3.0@6149 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/route_ui.cc | 39 ++++++++++++++++++++++++++------------ gtk2_ardour/route_ui.h | 3 +++ libs/ardour/ardour/route.h | 5 ++++- libs/ardour/route.cc | 15 +++++++++++++++ 4 files changed, 49 insertions(+), 13 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 + // shift-click: toggle solo isolated status - 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; - } + _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))); @@ -927,6 +925,12 @@ RouteUI::toggle_solo_isolated (Gtk::CheckMenuItem* check) _route->set_solo_isolated (check->get_active(), this); } +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, bool yn) { @@ -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 @@ -521,6 +521,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) {