diff options
Diffstat (limited to 'libs/ardour/plugin_insert.cc')
-rw-r--r-- | libs/ardour/plugin_insert.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 6786f7a4f6..b65077e868 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -26,6 +26,7 @@ #include "pbd/failed_constructor.h" #include "pbd/xml++.h" +#include "pbd/convert.h" #include "ardour/audio_buffer.h" #include "ardour/automation_list.h" @@ -695,6 +696,31 @@ PluginInsert::state (bool full) return node; } +void +PluginInsert::set_control_ids (const XMLNode& node, int version) +{ + const XMLNodeList& nlist = node.children(); + XMLNodeConstIterator iter; + set<Evoral::Parameter>::const_iterator p; + + for (iter = nlist.begin(); iter != nlist.end(); ++iter) { + if ((*iter)->name() == Controllable::xml_node_name) { + const XMLProperty* prop; + + if ((prop = (*iter)->property (X_("parameter"))) != 0) { + uint32_t p = atoi (prop->value()); + boost::shared_ptr<Evoral::Control> c = control (Evoral::Parameter (PluginAutomation, 0, p)); + if (!c) { + continue; + } + boost::shared_ptr<AutomationControl> ac = boost::dynamic_pointer_cast<AutomationControl> (c); + if (ac) { + ac->set_state (**iter, version); + } + } + } + } +} int PluginInsert::set_state(const XMLNode& node, int version) { @@ -779,6 +805,7 @@ PluginInsert::set_state(const XMLNode& node, int version) if (need_automatables) { set_automatable (); + set_control_ids (node, version); } /* Handle the node list for this Processor (or Insert if an A2 session) */ @@ -962,6 +989,18 @@ PluginInsert::PluginControl::set_value (double val) AutomationControl::set_value(val); } +XMLNode& +PluginInsert::PluginControl::get_state () +{ + stringstream ss; + + XMLNode& node (AutomationControl::get_state()); + ss << parameter().id(); + node.add_property (X_("parameter"), ss.str()); + + return node; +} + double PluginInsert::PluginControl::get_value (void) const { |