forward propagate solo-isolated status to everything fed by a route by something other than a send
git-svn-id: svn://localhost/ardour2/branches/3.0@6340 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
e25862d787
commit
4341e67894
@ -353,7 +353,7 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou
|
|||||||
uint32_t _phase_invert;
|
uint32_t _phase_invert;
|
||||||
bool _self_solo;
|
bool _self_solo;
|
||||||
uint32_t _soloed_by_others;
|
uint32_t _soloed_by_others;
|
||||||
bool _solo_isolated;
|
uint32_t _solo_isolated;
|
||||||
|
|
||||||
bool _denormal_protection;
|
bool _denormal_protection;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ Route::init ()
|
|||||||
{
|
{
|
||||||
_self_solo = false;
|
_self_solo = false;
|
||||||
_soloed_by_others = 0;
|
_soloed_by_others = 0;
|
||||||
_solo_isolated = false;
|
_solo_isolated = 0;
|
||||||
_solo_safe = false;
|
_solo_safe = false;
|
||||||
_active = true;
|
_active = true;
|
||||||
processor_max_streams.reset();
|
processor_max_streams.reset();
|
||||||
@ -608,13 +608,46 @@ Route::set_delivery_solo ()
|
|||||||
void
|
void
|
||||||
Route::set_solo_isolated (bool yn, void *src)
|
Route::set_solo_isolated (bool yn, void *src)
|
||||||
{
|
{
|
||||||
|
if (is_master() || is_control() || is_hidden()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_route_group && src != _route_group && _route_group->active_property (RouteGroup::Solo)) {
|
if (_route_group && src != _route_group && _route_group->active_property (RouteGroup::Solo)) {
|
||||||
_route_group->apply (&Route::set_solo_isolated, yn, _route_group);
|
_route_group->apply (&Route::set_solo_isolated, yn, _route_group);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* forward propagate solo-isolate status to everything fed by this route, but not those via sends only */
|
||||||
|
|
||||||
if (yn != _solo_isolated) {
|
boost::shared_ptr<RouteList> routes = _session.get_routes ();
|
||||||
_solo_isolated = yn;
|
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
|
||||||
|
bool sends_only;
|
||||||
|
bool does_feed = feeds (*i, &sends_only);
|
||||||
|
|
||||||
|
if (does_feed && !sends_only) {
|
||||||
|
(*i)->set_solo_isolated (yn, (*i)->route_group());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
cerr << _name << " Solo isolated was " << _solo_isolated << endl;
|
||||||
|
|
||||||
|
if (yn) {
|
||||||
|
if (_solo_isolated == 0) {
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
_solo_isolated++;
|
||||||
|
} else {
|
||||||
|
changed = (_solo_isolated == 1);
|
||||||
|
if (_solo_isolated > 0) {
|
||||||
|
_solo_isolated--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << "\tnow " << _solo_isolated << endl;
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
set_delivery_solo ();
|
set_delivery_solo ();
|
||||||
solo_isolated_changed (src);
|
solo_isolated_changed (src);
|
||||||
}
|
}
|
||||||
@ -623,7 +656,7 @@ Route::set_solo_isolated (bool yn, void *src)
|
|||||||
bool
|
bool
|
||||||
Route::solo_isolated () const
|
Route::solo_isolated () const
|
||||||
{
|
{
|
||||||
return _solo_isolated;
|
return _solo_isolated > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user