Automatable::~Automatable ()
{
- {
- 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 (_control_lock);
+ for (Controls::const_iterator li = _controls.begin(); li != _controls.end(); ++li) {
+ boost::dynamic_pointer_cast<AutomationControl>(li->second)->drop_references ();
}
}
ControlSet::clear_controls ();
}
-string
-Automatable::value_as_string (boost::shared_ptr<const AutomationControl> ac) const
-{
- return ARDOUR::value_as_string(ac->desc(), ac->get_value());
-}
-
bool
Automatable::find_next_event (double now, double end, Evoral::ControlEvent& next_event, bool only_active) const
{
continue;
}
+ boost::shared_ptr<SlavableAutomationControl> sc
+ = boost::dynamic_pointer_cast<SlavableAutomationControl>(li->second);
+
+ if (sc) {
+ sc->find_next_event (now, end, next_event);
+ }
+
Evoral::ControlList::const_iterator i;
boost::shared_ptr<const Evoral::ControlList> alist (li->second->list());
Evoral::ControlEvent cp (now, 0.0f);