diff options
author | Robin Gareus <robin@gareus.org> | 2016-06-05 19:04:33 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-06-05 19:05:05 +0200 |
commit | 86607097d618f778ea984cba2a7dc9c403fe8966 (patch) | |
tree | 237e686b2db1d1317b1a081979987c0191117054 /libs/ardour/plugin_insert.cc | |
parent | 03d2939f279c12ebf18d2cb95270ba2fb6dba9f0 (diff) |
plugin support for Controllable::NotAutomatable
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r-- | libs/ardour/plugin_insert.cc | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 688645eb94..291ccbfc54 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -409,31 +409,42 @@ PluginInsert::create_automatable_parameters () { assert (!_plugins.empty()); + boost::shared_ptr<Plugin> plugin = _plugins.front(); set<Evoral::Parameter> a = _plugins.front()->automatable (); - for (set<Evoral::Parameter>::iterator i = a.begin(); i != a.end(); ++i) { - if (i->type() == PluginAutomation) { + for (uint32_t i = 0; i < plugin->parameter_count(); ++i) { + if (!plugin->parameter_is_control (i) || !plugin->parameter_is_input (i)) { + continue; + } + Evoral::Parameter param (PluginAutomation, 0, i); - Evoral::Parameter param(*i); + ParameterDescriptor desc; + plugin->get_parameter_descriptor(i, desc); - ParameterDescriptor desc; - _plugins.front()->get_parameter_descriptor(i->id(), desc); + const bool automatable = a.find(param) != a.end(); + if (automatable) { can_automate (param); - boost::shared_ptr<AutomationList> list(new AutomationList(param, desc)); - boost::shared_ptr<AutomationControl> c (new PluginControl(this, param, desc, list)); - add_control (c); - _plugins.front()->set_automation_control (i->id(), c); - } else if (i->type() == PluginPropertyAutomation) { - Evoral::Parameter param(*i); - const ParameterDescriptor& desc = _plugins.front()->get_property_descriptor(param.id()); - 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, desc)); - } - add_control (boost::shared_ptr<AutomationControl> (new PluginPropertyControl(this, param, desc, list))); + } + boost::shared_ptr<AutomationList> list(new AutomationList(param, desc)); + boost::shared_ptr<AutomationControl> c (new PluginControl(this, param, desc, list)); + if (!automatable) { + c->set_flags (Controllable::Flag ((int)c->flags() | Controllable::NotAutomatable)); + } + add_control (c); + plugin->set_automation_control (i, c); + } + + const Plugin::PropertyDescriptors& pdl (plugin->get_supported_properties ()); + for (Plugin::PropertyDescriptors::const_iterator p = pdl.begin(); p != pdl.end(); ++p) { + Evoral::Parameter param (PluginPropertyAutomation, 0, p->first); + const ParameterDescriptor& desc = plugin->get_property_descriptor(param.id()); + 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, desc)); } + add_control (boost::shared_ptr<AutomationControl> (new PluginPropertyControl(this, param, desc, list))); } } } |