diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-11-28 18:31:18 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-11-28 18:31:18 +0000 |
commit | 9b7a35cdc0d63d05d91f9deba294bcb7113a9106 (patch) | |
tree | 566657c72ba088461bdcd858402a01fab2738090 /libs/ardour/plugin_insert.cc | |
parent | 422309880c0448d95c7be2cec43384b604fa427c (diff) |
more or less complete restoration of Controllable::_id from XML, with all that implies for MIDI bindings continuing to work across session reloads, and also that the controlled parameter is now set from Controllable::set_value() during session loading, not directly from its "own" XML value; still some funny stuff going on with Panners. This may have broken 2.X session loading in that panners may not be setup correctly
git-svn-id: svn://localhost/ardour2/branches/3.0@8117 d708f5d6-7413-0410-9779-e7cbd77b26cf
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 { |