change return type of AutomationControl::actually_set_value() from void to bool,...
[ardour.git] / libs / ardour / plugin_insert.cc
index 7b3aa60ba48cf49851542cd7660dae584dd47ae9..a8348c1df39b25d1b8888fee127e550b63d22e9d 100644 (file)
@@ -394,13 +394,13 @@ PluginInsert::plugin_latency () const {
 }
 
 bool
-PluginInsert::needs_midi_input() const
+PluginInsert::is_instrument() const
 {
        PluginInfoPtr pip = _plugins[0]->get_info();
-       if (pip->needs_midi_input ()) {
+       if (pip->is_instrument ()) {
                return true;
        }
-       return pip->n_inputs.n_midi() != 0 && pip->n_outputs.n_audio() != 0;
+       return pip->n_inputs.n_midi () != 0 && pip->n_outputs.n_audio () > 0 && pip->n_inputs.n_audio () == 0;
 }
 
 bool
@@ -426,7 +426,7 @@ PluginInsert::has_output_presets (ChanCount in, ChanCount out)
                        return false;
                }
        }
-       if (!needs_midi_input ()) {
+       if (!is_instrument ()) {
                        return false;
        }
        return true;
@@ -1994,7 +1994,7 @@ PluginInsert::internal_can_support_io_configuration (ChanCount const & inx, Chan
                m.strict_io = true;
 
                /* special case MIDI instruments */
-               if (needs_midi_input ()) {
+               if (is_instrument ()) {
                        // output = midi-bypass + at most master-out channels.
                        ChanCount max_out (DataType::AUDIO, 2); // TODO use master-out
                        max_out.set (DataType::MIDI, out.get(DataType::MIDI));
@@ -2617,6 +2617,15 @@ PluginInsert::update_id (PBD::ID id)
        }
 }
 
+void
+PluginInsert::set_owner (SessionObject* o)
+{
+       Processor::set_owner (o);
+       for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+               (*i)->set_owner (o);
+       }
+}
+
 void
 PluginInsert::set_state_dir (const std::string& d)
 {
@@ -2758,7 +2767,7 @@ PluginInsert::PluginControl::PluginControl (PluginInsert*                     p,
 
 /** @param val `user' value */
 
-void
+bool
 PluginInsert::PluginControl::actually_set_value (double user_val, PBD::Controllable::GroupControlDisposition group_override)
 {
        /* FIXME: probably should be taking out some lock here.. */
@@ -2772,13 +2781,13 @@ PluginInsert::PluginControl::actually_set_value (double user_val, PBD::Controlla
                iasp->set_parameter (_list->parameter().id(), user_val);
        }
 
-       AutomationControl::actually_set_value (user_val, group_override);
+       return AutomationControl::actually_set_value (user_val, group_override);
 }
 
 void
 PluginInsert::PluginControl::catch_up_with_external_value (double user_val)
 {
-       AutomationControl::actually_set_value (user_val, Controllable::NoGroup);
+       (void) AutomationControl::actually_set_value (user_val, Controllable::NoGroup);
 }
 
 XMLNode&
@@ -2825,7 +2834,7 @@ PluginInsert::PluginPropertyControl::PluginPropertyControl (PluginInsert*
        }
 }
 
-void
+bool
 PluginInsert::PluginPropertyControl::actually_set_value (double user_val, Controllable::GroupControlDisposition gcd)
 {
        /* Old numeric set_value(), coerce to appropriate datatype if possible.
@@ -2834,7 +2843,7 @@ PluginInsert::PluginPropertyControl::actually_set_value (double user_val, Contro
        const Variant value(_desc.datatype, user_val);
        if (value.type() == Variant::NOTHING) {
                error << "set_value(double) called for non-numeric property" << endmsg;
-               return;
+               return false;
        }
 
        for (Plugins::iterator i = _plugin->_plugins.begin(); i != _plugin->_plugins.end(); ++i) {
@@ -2843,7 +2852,7 @@ PluginInsert::PluginPropertyControl::actually_set_value (double user_val, Contro
 
        _value = value;
 
-       AutomationControl::actually_set_value (user_val, gcd);
+       return AutomationControl::actually_set_value (user_val, gcd);
 }
 
 XMLNode&
@@ -2907,6 +2916,7 @@ void
 PluginInsert::add_plugin (boost::shared_ptr<Plugin> plugin)
 {
        plugin->set_insert_id (this->id());
+       plugin->set_owner (_owner);
 
        if (_plugins.empty()) {
                /* first (and probably only) plugin instance - connect to relevant signals */