summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-25 13:41:38 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:41 -0400
commitf485cfa324717f57b9f820f43f1b53307b96a8b9 (patch)
tree39ad198f588b521e748356809d255a3c4c6f4c08 /libs/ardour/slavable.cc
parenteee3837245f570d36e5d4d92409660c8ff777b5b (diff)
rearrange inheritance so that Automatable IS-A Slavable
Share assign code via Slavable; add visibility tags to Slavable+SlavableAutomationControl
Diffstat (limited to 'libs/ardour/slavable.cc')
-rw-r--r--libs/ardour/slavable.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/libs/ardour/slavable.cc b/libs/ardour/slavable.cc
index 7a7b8e2919..4a759f5fef 100644
--- a/libs/ardour/slavable.cc
+++ b/libs/ardour/slavable.cc
@@ -26,6 +26,7 @@
#include "pbd/xml++.h"
#include "ardour/slavable.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/vca.h"
#include "ardour/vca_manager.h"
@@ -127,3 +128,59 @@ Slavable::unassign (boost::shared_ptr<VCA> v)
(void) unassign_controls (v);
_masters.erase (v->number());
}
+
+int
+Slavable::assign_controls (boost::shared_ptr<VCA> vca)
+{
+ boost::shared_ptr<SlavableAutomationControl> slave;
+ boost::shared_ptr<AutomationControl> master;
+ AutomationType types[] = {
+ GainAutomation,
+ SoloAutomation,
+ MuteAutomation,
+ RecEnableAutomation,
+ MonitoringAutomation,
+ NullAutomation
+ };
+
+ for (uint32_t n = 0; types[n] != NullAutomation; ++n) {
+
+ slave = boost::dynamic_pointer_cast<SlavableAutomationControl> (automation_control (types[n]));
+ master = vca->automation_control (types[n]);
+
+ if (slave && master) {
+ slave->add_master (master);
+ }
+ }
+
+ return 0;
+}
+
+int
+Slavable::unassign_controls (boost::shared_ptr<VCA> vca)
+{
+ boost::shared_ptr<SlavableAutomationControl> slave;
+ boost::shared_ptr<AutomationControl> master;
+ AutomationType types[] = {
+ GainAutomation,
+ SoloAutomation,
+ MuteAutomation,
+ RecEnableAutomation,
+ MonitoringAutomation,
+ NullAutomation
+ };
+
+ for (uint32_t n = 0; types[n] != NullAutomation; ++n) {
+
+ slave = boost::dynamic_pointer_cast<SlavableAutomationControl> (automation_control (types[n]));
+ if (!vca) {
+ /* unassign from all */
+ slave->clear_masters ();
+ } else {
+ slave->remove_master (master);
+ }
+ }
+
+ return 0;
+}
+