mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
treat VCA assign as a RouteGroup property.
Newly added routes,removed routes etc. all correctly assign or unassign to the group's VCA.
This commit is contained in:
parent
da0bd3d8a5
commit
2cc33684c7
2 changed files with 24 additions and 0 deletions
|
|
@ -150,6 +150,7 @@ class LIBARDOUR_API RouteGroup : public SessionObject
|
||||||
private:
|
private:
|
||||||
boost::shared_ptr<RouteList> routes;
|
boost::shared_ptr<RouteList> routes;
|
||||||
boost::shared_ptr<Route> subgroup_bus;
|
boost::shared_ptr<Route> subgroup_bus;
|
||||||
|
boost::weak_ptr<VCA> group_master;
|
||||||
|
|
||||||
PBD::Property<bool> _relative;
|
PBD::Property<bool> _relative;
|
||||||
PBD::Property<bool> _active;
|
PBD::Property<bool> _active;
|
||||||
|
|
|
||||||
|
|
@ -126,12 +126,18 @@ RouteGroup::~RouteGroup ()
|
||||||
_rec_enable_group->clear ();
|
_rec_enable_group->clear ();
|
||||||
_monitoring_group->clear ();
|
_monitoring_group->clear ();
|
||||||
|
|
||||||
|
boost::shared_ptr<VCA> vca (group_master.lock());
|
||||||
|
|
||||||
for (RouteList::iterator i = routes->begin(); i != routes->end();) {
|
for (RouteList::iterator i = routes->begin(); i != routes->end();) {
|
||||||
RouteList::iterator tmp = i;
|
RouteList::iterator tmp = i;
|
||||||
++tmp;
|
++tmp;
|
||||||
|
|
||||||
(*i)->set_route_group (0);
|
(*i)->set_route_group (0);
|
||||||
|
|
||||||
|
if (vca) {
|
||||||
|
(*i)->unassign (vca);
|
||||||
|
}
|
||||||
|
|
||||||
i = tmp;
|
i = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -164,6 +170,12 @@ RouteGroup::add (boost::shared_ptr<Route> r)
|
||||||
r->set_route_group (this);
|
r->set_route_group (this);
|
||||||
r->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::remove_when_going_away, this, boost::weak_ptr<Route> (r)));
|
r->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::remove_when_going_away, this, boost::weak_ptr<Route> (r)));
|
||||||
|
|
||||||
|
boost::shared_ptr<VCA> vca (group_master.lock());
|
||||||
|
|
||||||
|
if (vca) {
|
||||||
|
r->assign (vca);
|
||||||
|
}
|
||||||
|
|
||||||
_session.set_dirty ();
|
_session.set_dirty ();
|
||||||
RouteAdded (this, boost::weak_ptr<Route> (r)); /* EMIT SIGNAL */
|
RouteAdded (this, boost::weak_ptr<Route> (r)); /* EMIT SIGNAL */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -186,6 +198,13 @@ RouteGroup::remove (boost::shared_ptr<Route> r)
|
||||||
|
|
||||||
if ((i = find (routes->begin(), routes->end(), r)) != routes->end()) {
|
if ((i = find (routes->begin(), routes->end(), r)) != routes->end()) {
|
||||||
r->set_route_group (0);
|
r->set_route_group (0);
|
||||||
|
|
||||||
|
boost::shared_ptr<VCA> vca = group_master.lock();
|
||||||
|
|
||||||
|
if (vca) {
|
||||||
|
r->unassign (vca);
|
||||||
|
}
|
||||||
|
|
||||||
_solo_group->remove_control (r->solo_control());
|
_solo_group->remove_control (r->solo_control());
|
||||||
_mute_group->remove_control (r->mute_control());
|
_mute_group->remove_control (r->mute_control());
|
||||||
_gain_group->remove_control (r->gain_control());
|
_gain_group->remove_control (r->gain_control());
|
||||||
|
|
@ -584,6 +603,8 @@ RouteGroup::assign_master (boost::shared_ptr<VCA> master)
|
||||||
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
|
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
|
||||||
(*r)->assign (master);
|
(*r)->assign (master);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group_master = master;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -602,6 +623,8 @@ RouteGroup::unassign_master (boost::shared_ptr<VCA> master)
|
||||||
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
|
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
|
||||||
(*r)->unassign (master);
|
(*r)->unassign (master);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group_master.reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue