diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-19 10:44:57 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:43 -0400 |
commit | 57f4706204b676a4e30f6df046496a5618354347 (patch) | |
tree | 2969d54acd830c9d6e3c072846e09a50fb8e2551 /libs/ardour/route_group.cc | |
parent | 0e830fb6ec570ef6a067e075b2131001b93a893d (diff) |
provisional code to support assigning an entire RouteGroup to a VCA master
Diffstat (limited to 'libs/ardour/route_group.cc')
-rw-r--r-- | libs/ardour/route_group.cc | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index b5f15412f9..ef1a232896 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -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); + } +} |