remove Route::listening_via_monitor()
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 21 Apr 2016 06:02:13 +0000 (02:02 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 31 May 2016 19:30:41 +0000 (15:30 -0400)
This is better tested with direct use of the solo_control and
Config->get_solo_controls_are_listen_controls()

gtk2_ardour/editor_routes.cc
gtk2_ardour/route_ui.cc
libs/ardour/ardour/route.h
libs/ardour/ardour/solo_control.h
libs/ardour/route.cc
libs/ardour/session.cc
libs/surfaces/faderport/faderport.cc
libs/surfaces/faderport/operations.cc
libs/surfaces/mackie/strip.cc

index 9a2153f99f7866af3a23082b792e76e97e117864..7daeea3d7c9e585933e4f1dd54cd75ca012bfa1a 100644 (file)
@@ -468,15 +468,7 @@ EditorRoutes::on_tv_solo_enable_toggled (std::string const & path_string)
        RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
 
        if (rtv != 0) {
-               bool newval;
-
-               if (Config->get_solo_control_is_listen_control()) {
-                       newval = !rtv->route()->listening_via_monitor();
-               } else {
-                       newval = !rtv->route()->self_soloed();
-               }
-
-               rtv->route()->solo_control()->set_value (newval ? 1.0 : 0.0, Controllable::UseGroup);
+               rtv->route()->solo_control()->set_value (rtv->route()->soloed() ? 0.0 : 1.0, Controllable::UseGroup);
        }
 }
 
index bfd3ed10067c1dda7dd0531c725f7bed72314c58..126e3af99670696b9ec270c6cf423f302baf65c2 100644 (file)
@@ -1120,22 +1120,10 @@ RouteUI::solo_active_state (boost::shared_ptr<Route> r)
                return Gtkmm2ext::Off;
        }
 
-       if (Config->get_solo_control_is_listen_control()) {
-
-               if (r->listening_via_monitor()) {
-                       return Gtkmm2ext::ExplicitActive;
-               } else {
-                       return Gtkmm2ext::Off;
-               }
-
-       }
-
-       if (r->soloed()) {
-                if (!r->self_soloed()) {
-                        return Gtkmm2ext::ImplicitActive;
-                } else {
-                        return Gtkmm2ext::ExplicitActive;
-                }
+       if (r->self_soloed()) {
+               return Gtkmm2ext::ExplicitActive;
+       } else if (r->soloed_by_others()) {
+               return Gtkmm2ext::ImplicitActive;
        } else {
                return Gtkmm2ext::Off;
        }
index d93883b600361090fdb8fd570f6e74e68f2f168b..46c5b1f3c7a7a57d97cc3d54bad8189cbc8d96f2 100644 (file)
@@ -181,8 +181,6 @@ public:
        bool is_safe () const {
                return _solo_safe_control->get_value();
        }
-
-       bool listening_via_monitor () const;
        void enable_monitor_send ();
 
        void set_denormal_protection (bool yn);
index bcb01344a4f2c86bebbf2278509a148e7bfafe81..24b8353dc1f8fdab44368a20a5a1090a389587b2 100644 (file)
@@ -60,6 +60,15 @@ class LIBARDOUR_API SoloControl : public SlavableAutomationControl
        /* API to check different aspects of solo substate
         */
 
+       bool self_soloed () const {
+               return _self_solo;
+       }
+       bool soloed_by_masters () const {
+               return get_masters_value();
+       }
+       bool soloed_by_self_or_masters () const {
+               return self_soloed() || get_masters_value ();
+       }
        bool soloed_by_others () const {
                return _soloed_by_others_downstream || _soloed_by_others_downstream || get_masters_value ();
        }
@@ -69,9 +78,6 @@ class LIBARDOUR_API SoloControl : public SlavableAutomationControl
        uint32_t soloed_by_others_downstream () const {
                return _soloed_by_others_downstream;
        }
-       bool self_soloed () const {
-               return _self_solo;
-       }
        bool soloed() const { return self_soloed() || soloed_by_others(); }
 
        /* The session object needs to respond to solo
index fef9fb507b4365ae07fb18bf6c3cdcb01e99503b..64f8764303de6a21e3fbda649b3091c6addf5782 100644 (file)
@@ -759,16 +759,6 @@ Route::solo_control_changed (bool, Controllable::GroupControlDisposition)
        }
 }
 
-bool
-Route::listening_via_monitor () const
-{
-       if (_monitor_send) {
-               return _monitor_send->active ();
-       } else {
-               return false;
-       }
-}
-
 void
 Route::push_solo_isolate_upstream (int32_t delta)
 {
index c207934534ceffcf5476839d1ab38ec677b43c79..f706dd00ee977d54702f7344ed66eeeaba743e13 100644 (file)
@@ -3701,7 +3701,9 @@ Session::route_listen_changed (Controllable::GroupControlDisposition group_overr
                return;
        }
 
-       if (route->listening_via_monitor ()) {
+       assert (Config->get_solo_control_is_listen_control());
+
+       if (route->solo_control()->soloed_by_self_or_masters()) {
 
                if (Config->get_exclusive_solo()) {
 
index 1cc47b52e1ba7c3815f8069b96fb55259131e8ae..3d549348f4df458d6d01475a6af0fade44f1d2d2 100644 (file)
@@ -1241,7 +1241,7 @@ void
 FaderPort::map_solo ()
 {
        if (_current_route) {
-               get_button (Solo).set_led_state (_output_port, _current_route->soloed() || _current_route->listening_via_monitor());
+               get_button (Solo).set_led_state (_output_port, _current_route->soloed());
        } else {
                get_button (Solo).set_led_state (_output_port, false);
        }
index 592b26da23068979341cba81f810458d7d5f64c0..ec607273929f9422c36d1ca92ead8d9953926f45 100644 (file)
@@ -141,15 +141,7 @@ FaderPort::solo ()
                return;
        }
 
-       bool yn;
-
-       if (Config->get_solo_control_is_listen_control()) {
-               yn = !_current_route->listening_via_monitor();
-       } else {
-               yn = !_current_route->soloed();
-       }
-
-       _current_route->solo_control()->set_value (yn ? 1.0 : 0.0, PBD::Controllable::UseGroup);
+       _current_route->solo_control()->set_value (_current_route->soloed() ? 0.0 : 1.0, PBD::Controllable::UseGroup);
 }
 
 void
index 0062c3b4fb85874d9e8a17364b787bf217457af8..9c3fc21bdacaa16089f26a4f5e12e100ff78b4b1 100644 (file)
@@ -285,7 +285,7 @@ void
 Strip::notify_solo_changed ()
 {
        if (_route && _solo) {
-               _surface->write (_solo->set_state ((_route->soloed() || _route->listening_via_monitor()) ? on : off));
+               _surface->write (_solo->set_state (_route->soloed() ? on : off));
        }
 }