From 57f4706204b676a4e30f6df046496a5618354347 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 19 May 2016 10:44:57 -0400 Subject: provisional code to support assigning an entire RouteGroup to a VCA master --- libs/ardour/route_group.cc | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'libs/ardour/route_group.cc') 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 master) +{ + boost::shared_ptr 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 master) +{ + boost::shared_ptr 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); + } +} -- cgit v1.2.3