ensure_xml_node ();
ensure_pan_views (show);
+ } else if (param.type() == PluginAutomation) {
+
+ /* handled elsewhere */
+
} else {
error << "AudioTimeAxisView: unknown automation child " << EventTypeMap::instance().to_symbol(param) << endmsg;
}
ProcessorAutomationNode* pan;
if ((pan = find_processor_automation_node (processor, what)) == 0) {
- error << _("programming error: ")
- << string_compose (X_("processor automation curve for %1:%2 not registered with track!"),
- processor->name(), what)
+ /* session state may never have been saved with new plugin */
+ error << _("programming error: ")
+ << 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;
/*NOTREACHED*/
return;
/* FIXME: ew */
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::dynamic_pointer_cast<AutomationControl>(processor->control(what, true));
assert (rtv);
boost::shared_ptr<AutomationTimeAxisView> atv = rtv->automation_child (EventTypeMap::instance().new_parameter (prop_parameter->value ()));
- assert (atv);
-
- add (atv.get());
+
+ /* the automation could be for an entity that was never saved
+ in the session file. Don't freak out if we can't find
+ it.
+ */
+
+ if (atv) {
+ add (atv.get());
+ }
}
}
if (param.type() == NullAutomation) {
warning << "Automation has null type" << endl;
continue;
- }
+ }
boost::shared_ptr<AutomationList> al (new AutomationList(**niter, param));
static void dumpit (const AutomationList& al, string prefix = "")
{
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 << "\n";
}
#endif
-
AutomationList::AutomationList (Evoral::Parameter id)
: ControlList(id)
{
}
thaw ();
-
+
return 0;
}
_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());
} else {
_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());
} else {
_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());
} else {
_max_xval = 0; // means "no limit ;
node.add_property("count", string_compose("%1", _plugins.size()));
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;
}
}
}
- set_parameter_state_2X (node, version);
+ // set_parameter_state_2X (node, version);
} else {
- set_parameter_state (node, version);
+ // set_parameter_state (node, version);
}
// The name of the PluginInsert comes from the plugin, nothing else
stringstream sstr;
for (set<Evoral::Parameter>::iterator x = _visible_controls.begin();
x != _visible_controls.end(); ++x) {
+
if (x != _visible_controls.begin()) {
sstr << ' ';
}
- sstr << *x;
+ sstr << (*x).id();
}
automation.add_property ("visible", sstr.str());