-bool
-Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter)
-{
- const XMLProperty *prop;
-
- if (node.name() != "Processor") {
- return false;
- }
-
- try {
- if ((prop = node.property ("type")) != 0) {
-
- boost::shared_ptr<Processor> processor;
-
- if (prop->value() == "ladspa" || prop->value() == "Ladspa" ||
- prop->value() == "lv2" ||
- prop->value() == "vst" ||
- prop->value() == "audiounit") {
-
- processor.reset (new PluginInsert(_session, node));
-
- } else if (prop->value() == "port") {
-
- processor.reset (new PortInsert (_session, _mute_master, node));
-
- } else if (prop->value() == "send") {
-
- processor.reset (new Send (_session, _mute_master, node));
-
- } else if (prop->value() == "meter") {
-
- if (_meter) {
- if (_meter->set_state (node, Stateful::loading_state_version)) {
- return false;
- } else {
- return true;
- }
- }
-
- _meter.reset (new PeakMeter (_session, node));
- _meter->set_display_to_user (_meter_point == MeterCustom);
- processor = _meter;
-
- } else if (prop->value() == "amp") {
-
- /* amp always exists */
-
- processor = _amp;
- if (processor->set_state (node, Stateful::loading_state_version)) {
- return false;
- } else {
- /* never any reason to add it */
- return true;
- }
-
- } else if (prop->value() == "intsend") {
-
- processor.reset (new InternalSend (_session, _mute_master, node));
-
- } else if (prop->value() == "intreturn") {
-
- if (_intreturn) {
- if (_intreturn->set_state (node, Stateful::loading_state_version)) {
- return false;
- } else {
- return true;
- }
- }
- _intreturn.reset (new InternalReturn (_session, node));
- processor = _intreturn;
-
- } else if (prop->value() == "main-outs") {
-
- if (_main_outs) {
- if (_main_outs->set_state (node, Stateful::loading_state_version)) {
- return false;
- } else {
- return true;
- }
- }
-
- _main_outs.reset (new Delivery (_session, _output, _mute_master, node));
- processor = _main_outs;
-
- } else {
- error << string_compose(_("unknown Processor type \"%1\"; ignored"), prop->value()) << endmsg;
- return false;
- }
-
- if (iter == _processors.end() && processor->display_to_user() && !_processors.empty()) {
- /* check for invisible processors stacked at the end and leave them there */
- ProcessorList::iterator p;
- p = _processors.end();
- --p;
- while (!(*p)->display_to_user() && p != _processors.begin()) {
- --p;
- }
- ++p;
- iter = p;
- }
-
- return (add_processor (processor, iter) == 0);
-
- } else {
- error << _("Processor XML node has no type property") << endmsg;
- return false;
- }
- }
-
- catch (failed_constructor &err) {
- warning << _("processor could not be created. Ignored.") << endmsg;
- return false;
- }
-}
-
-