summaryrefslogtreecommitdiff
path: root/libs/ardour/route_group.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-05-19 10:44:57 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:43 -0400
commit57f4706204b676a4e30f6df046496a5618354347 (patch)
tree2969d54acd830c9d6e3c072846e09a50fb8e2551 /libs/ardour/route_group.cc
parent0e830fb6ec570ef6a067e075b2131001b93a893d (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.cc67
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);
+ }
+}