fix load+save of plugin parameter automation
git-svn-id: svn://localhost/ardour2/branches/3.0@7678 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
da392b880d
commit
be85889464
|
@ -210,6 +210,10 @@ AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool
|
||||||
ensure_xml_node ();
|
ensure_xml_node ();
|
||||||
ensure_pan_views (show);
|
ensure_pan_views (show);
|
||||||
|
|
||||||
|
} else if (param.type() == PluginAutomation) {
|
||||||
|
|
||||||
|
/* handled elsewhere */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error << "AudioTimeAxisView: unknown automation child " << EventTypeMap::instance().to_symbol(param) << endmsg;
|
error << "AudioTimeAxisView: unknown automation child " << EventTypeMap::instance().to_symbol(param) << endmsg;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1827,9 +1827,10 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr<Processor>
|
||||||
ProcessorAutomationNode* pan;
|
ProcessorAutomationNode* pan;
|
||||||
|
|
||||||
if ((pan = find_processor_automation_node (processor, what)) == 0) {
|
if ((pan = find_processor_automation_node (processor, what)) == 0) {
|
||||||
error << _("programming error: ")
|
/* session state may never have been saved with new plugin */
|
||||||
<< string_compose (X_("processor automation curve for %1:%2 not registered with track!"),
|
error << _("programming error: ")
|
||||||
processor->name(), what)
|
<< string_compose (X_("processor automation curve for %1:%2/%3/%4 not registered with track!"),
|
||||||
|
processor->name(), what.type(), (int) what.channel(), what.id() )
|
||||||
<< endmsg;
|
<< endmsg;
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
return;
|
return;
|
||||||
|
@ -1846,7 +1847,7 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr<Processor>
|
||||||
/* FIXME: ew */
|
/* FIXME: ew */
|
||||||
|
|
||||||
char state_name[256];
|
char state_name[256];
|
||||||
snprintf (state_name, sizeof (state_name), "Redirect-%s-%" PRIu32, legalize_for_xml_node (processor->name()).c_str(), what.id());
|
snprintf (state_name, sizeof (state_name), "%s-%" PRIu32, legalize_for_xml_node (processor->name()).c_str(), what.id());
|
||||||
|
|
||||||
boost::shared_ptr<AutomationControl> control
|
boost::shared_ptr<AutomationControl> control
|
||||||
= boost::dynamic_pointer_cast<AutomationControl>(processor->control(what, true));
|
= boost::dynamic_pointer_cast<AutomationControl>(processor->control(what, true));
|
||||||
|
|
|
@ -1140,9 +1140,15 @@ Selection::set_state (XMLNode const & node, int)
|
||||||
assert (rtv);
|
assert (rtv);
|
||||||
|
|
||||||
boost::shared_ptr<AutomationTimeAxisView> atv = rtv->automation_child (EventTypeMap::instance().new_parameter (prop_parameter->value ()));
|
boost::shared_ptr<AutomationTimeAxisView> atv = rtv->automation_child (EventTypeMap::instance().new_parameter (prop_parameter->value ()));
|
||||||
assert (atv);
|
|
||||||
|
/* the automation could be for an entity that was never saved
|
||||||
add (atv.get());
|
in the session file. Don't freak out if we can't find
|
||||||
|
it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (atv) {
|
||||||
|
add (atv.get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ Automatable::set_automation_state (const XMLNode& node, Evoral::Parameter legacy
|
||||||
if (param.type() == NullAutomation) {
|
if (param.type() == NullAutomation) {
|
||||||
warning << "Automation has null type" << endl;
|
warning << "Automation has null type" << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<AutomationList> al (new AutomationList(**niter, param));
|
boost::shared_ptr<AutomationList> al (new AutomationList(**niter, param));
|
||||||
|
|
||||||
|
|
|
@ -41,13 +41,12 @@ PBD::Signal1<void,AutomationList *> AutomationList::AutomationListCreated;
|
||||||
static void dumpit (const AutomationList& al, string prefix = "")
|
static void dumpit (const AutomationList& al, string prefix = "")
|
||||||
{
|
{
|
||||||
cerr << prefix << &al << endl;
|
cerr << prefix << &al << endl;
|
||||||
for (AutomationList::const_iterator i = al.const_begin(); i != al.const_end(); ++i) {
|
for (AutomationList::const_iterator i = al.begin(); i != al.end(); ++i) {
|
||||||
cerr << prefix << '\t' << (*i)->when << ',' << (*i)->value << endl;
|
cerr << prefix << '\t' << (*i)->when << ',' << (*i)->value << endl;
|
||||||
}
|
}
|
||||||
cerr << "\n";
|
cerr << "\n";
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AutomationList::AutomationList (Evoral::Parameter id)
|
AutomationList::AutomationList (Evoral::Parameter id)
|
||||||
: ControlList(id)
|
: ControlList(id)
|
||||||
{
|
{
|
||||||
|
@ -364,7 +363,7 @@ AutomationList::deserialize_events (const XMLNode& node)
|
||||||
}
|
}
|
||||||
|
|
||||||
thaw ();
|
thaw ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -465,19 +464,19 @@ AutomationList::set_state (const XMLNode& node, int version)
|
||||||
_state = Off;
|
_state = Off;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node.property (X_("min_yval"))) != 0) {
|
if ((prop = node.property (X_("min-yval"))) != 0) {
|
||||||
_min_yval = atof (prop->value ().c_str());
|
_min_yval = atof (prop->value ().c_str());
|
||||||
} else {
|
} else {
|
||||||
_min_yval = FLT_MIN;
|
_min_yval = FLT_MIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node.property (X_("max_yval"))) != 0) {
|
if ((prop = node.property (X_("max-yval"))) != 0) {
|
||||||
_max_yval = atof (prop->value ().c_str());
|
_max_yval = atof (prop->value ().c_str());
|
||||||
} else {
|
} else {
|
||||||
_max_yval = FLT_MAX;
|
_max_yval = FLT_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = node.property (X_("max_xval"))) != 0) {
|
if ((prop = node.property (X_("max-xval"))) != 0) {
|
||||||
_max_xval = atof (prop->value ().c_str());
|
_max_xval = atof (prop->value ().c_str());
|
||||||
} else {
|
} else {
|
||||||
_max_xval = 0; // means "no limit ;
|
_max_xval = 0; // means "no limit ;
|
||||||
|
|
|
@ -684,25 +684,6 @@ PluginInsert::state (bool full)
|
||||||
node.add_property("count", string_compose("%1", _plugins.size()));
|
node.add_property("count", string_compose("%1", _plugins.size()));
|
||||||
node.add_child_nocopy (_plugins[0]->get_state());
|
node.add_child_nocopy (_plugins[0]->get_state());
|
||||||
|
|
||||||
/* add port automation state */
|
|
||||||
XMLNode *autonode = new XMLNode(port_automation_node_name);
|
|
||||||
set<Evoral::Parameter> automatable = _plugins[0]->automatable();
|
|
||||||
|
|
||||||
for (set<Evoral::Parameter>::iterator x = automatable.begin(); x != automatable.end(); ++x) {
|
|
||||||
|
|
||||||
/*XMLNode* child = new XMLNode("port");
|
|
||||||
snprintf(buf, sizeof(buf), "%" PRIu32, *x);
|
|
||||||
child->add_property("number", string(buf));
|
|
||||||
|
|
||||||
child->add_child_nocopy (automation_list (*x).state (full));
|
|
||||||
autonode->add_child_nocopy (*child);
|
|
||||||
*/
|
|
||||||
AutomationList* list = dynamic_cast<AutomationList*>(control(*x)->list().get());
|
|
||||||
autonode->add_child_nocopy (list->state (full));
|
|
||||||
}
|
|
||||||
|
|
||||||
node.add_child_nocopy (*autonode);
|
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -816,11 +797,11 @@ PluginInsert::set_state(const XMLNode& node, int version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_parameter_state_2X (node, version);
|
// set_parameter_state_2X (node, version);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
set_parameter_state (node, version);
|
// set_parameter_state (node, version);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The name of the PluginInsert comes from the plugin, nothing else
|
// The name of the PluginInsert comes from the plugin, nothing else
|
||||||
|
|
|
@ -115,10 +115,11 @@ Processor::state (bool full_state)
|
||||||
stringstream sstr;
|
stringstream sstr;
|
||||||
for (set<Evoral::Parameter>::iterator x = _visible_controls.begin();
|
for (set<Evoral::Parameter>::iterator x = _visible_controls.begin();
|
||||||
x != _visible_controls.end(); ++x) {
|
x != _visible_controls.end(); ++x) {
|
||||||
|
|
||||||
if (x != _visible_controls.begin()) {
|
if (x != _visible_controls.begin()) {
|
||||||
sstr << ' ';
|
sstr << ' ';
|
||||||
}
|
}
|
||||||
sstr << *x;
|
sstr << (*x).id();
|
||||||
}
|
}
|
||||||
|
|
||||||
automation.add_property ("visible", sstr.str());
|
automation.add_property ("visible", sstr.str());
|
||||||
|
|
Loading…
Reference in New Issue
Block a user