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);
}
}
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;
}
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);
/* 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 ();
}
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
}
}
-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)
{
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()) {
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);
}
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
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));
}
}