- for (Controls::iterator li = _controls.begin(); li != _controls.end(); ++li) {
-
- boost::shared_ptr<AutomationControl> c = li->second;
-
- c->list()->reposition_for_rt_add (now);
-
- if (c->list()->automation_state() != Off) {
- c->set_value(c->list()->eval(now));
+ boost::shared_ptr<AutomationList> list(new AutomationList(param));
+ Evoral::Control* control = NULL;
+ if (param.type() >= MidiCCAutomation && param.type() <= MidiChannelPressureAutomation) {
+ MidiTrack* mt = dynamic_cast<MidiTrack*>(this);
+ if (mt) {
+ control = new MidiTrack::MidiControl(mt, param);
+ } else {
+ warning << "MidiCCAutomation for non-MidiTrack" << endl;
+ }
+ } else if (param.type() == PluginAutomation) {
+ PluginInsert* pi = dynamic_cast<PluginInsert*>(this);
+ if (pi) {
+ control = new PluginInsert::PluginControl(pi, param);
+ } else {
+ warning << "PluginAutomation for non-Plugin" << endl;
+ }
+ } else if (param.type() == GainAutomation) {
+ Amp* amp = dynamic_cast<Amp*>(this);
+ if (amp) {
+ control = new Amp::GainControl(X_("gaincontrol"), _a_session, amp, param);
+ } else {
+ warning << "GainAutomation for non-Amp" << endl;
+ }
+ } else if (param.type() == PanAzimuthAutomation || param.type() == PanWidthAutomation || param.type() == PanElevationAutomation) {
+ Pannable* pannable = dynamic_cast<Pannable*>(this);
+ if (pannable) {
+ control = new PanControllable (_a_session, pannable->describe_parameter (param), pannable, param);
+ } else {
+ warning << "PanAutomation for non-Pannable" << endl;