13
0

provisional code to support assigning an entire RouteGroup to a VCA master

This commit is contained in:
Paul Davis 2016-05-19 10:44:57 -04:00
parent 0e830fb6ec
commit 57f4706204
2 changed files with 74 additions and 0 deletions

View File

@ -143,6 +143,9 @@ class LIBARDOUR_API RouteGroup : public SessionObject
int set_state (const XMLNode&, int version);
void assign_master (boost::shared_ptr<VCA>);
void unassign_master (boost::shared_ptr<VCA>);
private:
boost::shared_ptr<RouteList> routes;
boost::shared_ptr<Route> subgroup_bus;
@ -159,6 +162,10 @@ class LIBARDOUR_API RouteGroup : public SessionObject
PBD::Property<bool> _color;
PBD::Property<bool> _monitoring;
bool pre_master_gain;
bool pre_master_solo;
bool pre_master_mute;
boost::shared_ptr<ControlGroup> _solo_group;
boost::shared_ptr<ControlGroup> _mute_group;
boost::shared_ptr<ControlGroup> _rec_enable_group;

View File

@ -295,6 +295,10 @@ RouteGroup::set_gain (bool yn)
_gain = yn;
_gain_group->set_active (yn);
if (routes->empty() || !routes->front()->slaved()) {
pre_master_gain = yn;
}
send_change (PropertyChange (Properties::gain));
}
@ -306,6 +310,11 @@ RouteGroup::set_mute (bool yn)
}
_mute = yn;
_mute_group->set_active (yn);
if (routes->empty() || !routes->front()->slaved()) {
pre_master_mute = yn;
}
send_change (PropertyChange (Properties::mute));
}
@ -317,6 +326,11 @@ RouteGroup::set_solo (bool yn)
}
_solo = yn;
_solo_group->set_active (yn);
if (routes->empty() || !routes->front()->slaved()) {
pre_master_solo = yn;
}
send_change (PropertyChange (Properties::solo));
}
@ -544,3 +558,56 @@ RouteGroup::push_to_groups ()
_rec_enable_group->set_active (_recenable);
_monitoring_group->set_active (_monitoring);
}
void
RouteGroup::assign_master (boost::shared_ptr<VCA> master)
{
boost::shared_ptr<Route> front = routes->front ();
if (!front) {
return;
}
if (front->slaved_to (master)) {
return;
}
if (!front->slaved()) {
pre_master_gain = is_gain ();
pre_master_solo = is_solo ();
pre_master_mute = is_mute ();
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
(*r)->assign (master);
}
set_gain (false);
set_solo (false);
set_mute (false);
}
}
void
RouteGroup::unassign_master (boost::shared_ptr<VCA> master)
{
boost::shared_ptr<Route> front = routes->front ();
if (!front) {
return;
}
if (!front->slaved_to (master)) {
return;
}
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
(*r)->unassign (master);
}
if (!front->slaved()) {
set_gain (pre_master_gain);
set_solo (pre_master_solo);
set_mute (pre_master_mute);
}
}