diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-04-25 13:41:38 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:41 -0400 |
commit | f485cfa324717f57b9f820f43f1b53307b96a8b9 (patch) | |
tree | 39ad198f588b521e748356809d255a3c4c6f4c08 /libs/ardour/slavable.cc | |
parent | eee3837245f570d36e5d4d92409660c8ff777b5b (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.cc | 57 |
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; +} + |