+PluginInsert::PluginControl::PluginControl (PluginInsert* p, const Evoral::Parameter ¶m, boost::shared_ptr<AutomationList> list)
+ : AutomationControl (p->session(), param, list, p->describe_parameter(param))
+ , _plugin (p)
+{
+ Plugin::ParameterDescriptor desc;
+ p->plugin(0)->get_parameter_descriptor (param.id(), desc);
+ _logarithmic = desc.logarithmic;
+ _toggled = desc.toggled;
+}
+
+void
+PluginInsert::PluginControl::set_value (float val)
+{
+ /* FIXME: probably should be taking out some lock here.. */
+
+ if (_toggled) {
+ if (val > 0.5) {
+ val = 1.0;
+ } else {
+ val = 0.0;
+ }
+ } else {
+
+ /*const float range = _list->get_max_y() - _list->get_min_y();
+ const float lower = _list->get_min_y();
+
+ if (!_logarithmic) {
+ val = lower + (range * val);
+ } else {
+ float log_lower = 0.0f;
+ if (lower > 0.0f) {
+ log_lower = log(lower);
+ }
+
+ val = exp(log_lower + log(range) * val);
+ }*/
+
+ }
+
+ for (Plugins::iterator i = _plugin->_plugins.begin();
+ i != _plugin->_plugins.end(); ++i) {
+ (*i)->set_parameter (_list->parameter().id(), val);
+ }
+
+ boost::shared_ptr<Plugin> iasp = _plugin->_impulseAnalysisPlugin.lock();
+ if (iasp) {
+ iasp->set_parameter (_list->parameter().id(), val);
+ }
+
+ AutomationControl::set_value(val);
+}
+
+float
+PluginInsert::PluginControl::get_value (void) const
+{
+ /* FIXME: probably should be taking out some lock here.. */
+
+ float val = _plugin->get_parameter (_list->parameter());
+
+ return val;
+
+ /*if (_toggled) {
+
+ return val;
+
+ } else {
+
+ if (_logarithmic) {
+ val = log(val);
+ }
+
+ return ((val - lower) / range);
+ }*/
+}
+
+boost::shared_ptr<Plugin>
+PluginInsert::get_impulse_analysis_plugin()
+{
+ boost::shared_ptr<Plugin> ret;
+ if (_impulseAnalysisPlugin.expired()) {
+ ret = plugin_factory(_plugins[0]);
+ _impulseAnalysisPlugin = ret;