summaryrefslogtreecommitdiff
path: root/libs/ardour/automatable.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/automatable.cc')
-rw-r--r--libs/ardour/automatable.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc
index a4d0de0958..c145c3c501 100644
--- a/libs/ardour/automatable.cc
+++ b/libs/ardour/automatable.cc
@@ -29,6 +29,7 @@
#include <ardour/automatable.h>
#include <ardour/midi_track.h>
#include <ardour/plugin_insert.h>
+#include <ardour/panner.h>
#include "i18n.h"
@@ -67,7 +68,7 @@ Automatable::old_set_automation_state (const XMLNode& node)
if (sstr.fail()) {
break;
}
- mark_automation_visible (Evoral::Parameter(PluginAutomation, what), true);
+ mark_automation_visible (Evoral::Parameter(PluginAutomation, 0, what), true);
}
}
@@ -110,7 +111,7 @@ Automatable::load_automation (const string& path)
in >> when; if (!in) goto bad;
in >> value; if (!in) goto bad;
- Evoral::Parameter param(PluginAutomation, port);
+ Evoral::Parameter param(PluginAutomation, 0, port);
/* FIXME: this is legacy and only used for plugin inserts? I think? */
boost::shared_ptr<Evoral::Control> c = control (param, true);
c->list()->add (when, value);
@@ -234,10 +235,14 @@ Automatable::set_automation_state (const XMLNode& node, Evoral::Parameter legacy
}
boost::shared_ptr<Evoral::Control> existing = control(param);
- if (existing)
+ if (existing) {
existing->set_list(al);
- else
- add_control(control_factory(param));
+ } else {
+ boost::shared_ptr<Evoral::Control> newcontrol = control_factory(param);
+ add_control(newcontrol);
+ newcontrol->set_list(al);
+ warning << "Control did not exist";
+ }
} else {
error << "Expected AutomationList node, got '" << (*niter)->name() << endmsg;
@@ -401,6 +406,10 @@ Automatable::control_factory(const Evoral::Parameter& param)
control = new MidiTrack::MidiControl((MidiTrack*)this, param);
} else if (param.type() == PluginAutomation) {
control = new PluginInsert::PluginControl((PluginInsert*)this, param);
+ } else if (param.type() == GainAutomation) {
+ control = new IO::GainControl( X_("gaincontrol"), (IO*)this, param);
+ } else if (param.type() == PanAutomation) {
+ control = new Panner::PanControllable( ((Panner *)this)->session(), X_("panner"), *(Panner *)this, param);
} else {
control = new AutomationControl(_a_session, param);
}