VCA::~VCA ()
{
DEBUG_TRACE (DEBUG::Destruction, string_compose ("delete VCA %1\n", number()));
+ {
+ Glib::Threads::Mutex::Lock lm (_control_lock);
+ for (Controls::const_iterator li = _controls.begin(); li != _controls.end(); ++li) {
+ boost::dynamic_pointer_cast<AutomationControl>(li->second)->drop_references ();
+ }
+ }
{
Glib::Threads::Mutex::Lock lm (number_lock);
if (_number == next_number - 1) {
}
} else if ((*i)->name() == Slavable::xml_node_name) {
Slavable::set_state (**i, version);
+ } else if ((*i)->name() == Automatable::xml_node_name) {
+ set_automation_xml_state (**i, Evoral::Parameter(NullAutomation));
}
}
return _gain_control->slaved_to (vca->gain_control());
}
+
+void
+VCA::assign (boost::shared_ptr<VCA> v)
+{
+ /* prevent recursive assignments */
+ if (assigned_to (_session.vca_manager_ptr (), v)) {
+ warning << _("Master assignment inored to prevent recursion") << endmsg;
+ return;
+ }
+ Slavable::assign (v);
+}
+
+SlavableControlList
+VCA::slavables () const
+{
+ SlavableControlList rv;
+ rv.push_back (_gain_control);
+ rv.push_back (_mute_control);
+ rv.push_back (_solo_control);
+ return rv;
+}