From 2cc33684c71131fd483346fe05e3b1a0e1706de9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 8 Jul 2016 09:25:18 -0400 Subject: [PATCH] treat VCA assign as a RouteGroup property. Newly added routes,removed routes etc. all correctly assign or unassign to the group's VCA. --- libs/ardour/ardour/route_group.h | 1 + libs/ardour/route_group.cc | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index 0fc185ea0d..5263aceb0f 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -150,6 +150,7 @@ class LIBARDOUR_API RouteGroup : public SessionObject private: boost::shared_ptr routes; boost::shared_ptr subgroup_bus; + boost::weak_ptr group_master; PBD::Property _relative; PBD::Property _active; diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index 91303af07e..959342c282 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -126,12 +126,18 @@ RouteGroup::~RouteGroup () _rec_enable_group->clear (); _monitoring_group->clear (); + boost::shared_ptr vca (group_master.lock()); + for (RouteList::iterator i = routes->begin(); i != routes->end();) { RouteList::iterator tmp = i; ++tmp; (*i)->set_route_group (0); + if (vca) { + (*i)->unassign (vca); + } + i = tmp; } } @@ -164,6 +170,12 @@ RouteGroup::add (boost::shared_ptr r) r->set_route_group (this); r->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::remove_when_going_away, this, boost::weak_ptr (r))); + boost::shared_ptr vca (group_master.lock()); + + if (vca) { + r->assign (vca); + } + _session.set_dirty (); RouteAdded (this, boost::weak_ptr (r)); /* EMIT SIGNAL */ return 0; @@ -186,6 +198,13 @@ RouteGroup::remove (boost::shared_ptr r) if ((i = find (routes->begin(), routes->end(), r)) != routes->end()) { r->set_route_group (0); + + boost::shared_ptr vca = group_master.lock(); + + if (vca) { + r->unassign (vca); + } + _solo_group->remove_control (r->solo_control()); _mute_group->remove_control (r->mute_control()); _gain_group->remove_control (r->gain_control()); @@ -584,6 +603,8 @@ RouteGroup::assign_master (boost::shared_ptr master) for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) { (*r)->assign (master); } + + group_master = master; } void @@ -602,6 +623,8 @@ RouteGroup::unassign_master (boost::shared_ptr master) for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) { (*r)->unassign (master); } + + group_master.reset (); } bool -- 2.30.2