set<Evoral::Parameter> a = _plugins.front()->automatable ();
- ParameterDescriptor desc;
-
for (set<Evoral::Parameter>::iterator i = a.begin(); i != a.end(); ++i) {
if (i->type() == PluginAutomation) {
Evoral::Parameter param(*i);
+ ParameterDescriptor desc;
_plugins.front()->get_parameter_descriptor(i->id(), desc);
- /* the Parameter belonging to the actual plugin doesn't have its range set
- but we want the Controllable related to this Parameter to have those limits.
- */
-
- param.set_range (desc.lower, desc.upper, _plugins.front()->default_value(i->id()), desc.toggled);
can_automate (param);
- boost::shared_ptr<AutomationList> list(new AutomationList(param));
+ boost::shared_ptr<AutomationList> list(new AutomationList(param, desc));
add_control (boost::shared_ptr<AutomationControl> (new PluginControl(this, param, desc, list)));
} else if (i->type() == PluginPropertyAutomation) {
Evoral::Parameter param(*i);
const ParameterDescriptor& desc = _plugins.front()->get_property_descriptor(param.id());
- if (desc.datatype != Variant::VOID) {
+ if (desc.datatype != Variant::NOTHING) {
boost::shared_ptr<AutomationList> list;
if (Variant::type_is_numeric(desc.datatype)) {
- list = boost::shared_ptr<AutomationList>(new AutomationList(param));
+ list = boost::shared_ptr<AutomationList>(new AutomationList(param, desc));
}
add_control (boost::shared_ptr<AutomationControl> (new PluginPropertyControl(this, param, desc, list)));
}
if (_plugins.empty()) {
fatal << _("programming error: ") << X_("PluginInsert::default_parameter_value() called with no plugin")
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
}
return _plugins[0]->default_value (param.id());
fatal << string_compose (_("programming error: %1"),
X_("unknown plugin type in PluginInsert::plugin_factory"))
<< endmsg;
- /*NOTREACHED*/
+ abort(); /*NOTREACHED*/
return boost::shared_ptr<Plugin> ((Plugin*) 0);
}
if ((*niter)->name() == plugin->state_node_name()) {
- plugin->set_state (**niter, version);
-
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
(*i)->set_state (**niter, version);
}
{
if (alist()) {
alist()->reset_default (desc.normal);
+ if (desc.toggled) {
+ list->set_interpolation(Evoral::ControlList::Discrete);
+ }
}
if (desc.toggled) {
This is lossy, but better than nothing until Ardour's automation system
can handle various datatypes all the way down. */
const Variant value(_desc.datatype, user_val);
- if (value.type() == Variant::VOID) {
+ if (value.type() == Variant::NOTHING) {
error << "set_value(double) called for non-numeric property" << endmsg;
return;
}
void
PluginInsert::add_plugin (boost::shared_ptr<Plugin> plugin)
{
- plugin->set_insert_info (this);
+ plugin->set_insert_id (this->id());
if (_plugins.empty()) {
/* first (and probably only) plugin instance - connect to relevant signals