X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fprocessor.cc;h=3bc9db024bef1873c5b1d0db710cb38f5a8648b6;hb=b88e7fdcca8ef8fa4c22f93c2934b30713ab4716;hp=ab5902efa5e907ad1f83e946cd714d1a99bb1620;hpb=86f24d20e1616ffaafc97de65db49fd6a91270f8;p=ardour.git diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index ab5902efa5..3bc9db024b 100644 --- a/libs/ardour/processor.cc +++ b/libs/ardour/processor.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 Paul Davis + Copyright (C) 2000 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,6 +17,10 @@ */ +#ifdef WAF_BUILD +#include "libardour-config.h" +#endif + #include #include @@ -61,22 +65,27 @@ const string Processor::state_node_name = "Processor"; Processor::Processor(Session& session, const string& name) : SessionObject(session, name) , AutomatableControls(session) + , _pending_active(false) , _active(false) , _next_ab_is_active(false) , _configured(false) , _gui(0) + , _display_to_user (true) { } Processor::Processor (Session& session, const XMLNode& node) : SessionObject(session, "renameMe") , AutomatableControls(session) + , _pending_active(false) , _active(false) , _next_ab_is_active(false) , _configured(false) , _gui(0) + , _display_to_user (true) { - set_state (node); + set_state (node, Stateful::loading_state_version); + _pending_active = _active; } XMLNode& @@ -85,8 +94,8 @@ Processor::get_state (void) return state (true); } -/* NODE STRUCTURE - +/* NODE STRUCTURE + @@ -105,18 +114,18 @@ Processor::state (bool full_state) XMLNode* node = new XMLNode (state_node_name); stringstream sstr; char buf[64]; - + id().print (buf, sizeof (buf)); node->add_property("id", buf); node->add_property("name", _name); - node->add_property("active", active() ? "yes" : "no"); + node->add_property("active", active() ? "yes" : "no"); if (_extra_xml){ node->add_child_copy (*_extra_xml); } - + if (full_state) { - XMLNode& automation = Automatable::get_automation_state(); + XMLNode& automation = Automatable::get_automation_state(); if (!automation.children().empty() || !automation.properties().empty() || !_visible_controls.empty()) { @@ -138,11 +147,45 @@ Processor::state (bool full_state) } int -Processor::set_state (const XMLNode& node) +Processor::set_state_2X (const XMLNode & node, int /*version*/) { + XMLProperty const * prop; + + XMLNodeList children = node.children (); + + for (XMLNodeIterator i = children.begin(); i != children.end(); ++i) { + + if ((*i)->name() == X_("IO")) { + + if ((prop = (*i)->property ("name")) != 0) { + set_name (prop->value ()); + } + + if ((prop = (*i)->property ("id")) != 0) { + _id = prop->value (); + } + + if ((prop = (*i)->property ("active")) != 0) { + if (_active != string_is_affirmative (prop->value())) { + _active = !_active; + ActiveChanged (); /* EMIT_SIGNAL */ + } + } + } + } + + return 0; +} + +int +Processor::set_state (const XMLNode& node, int version) +{ + if (version < 3000) { + return set_state_2X (node, version); + } + const XMLProperty *prop; const XMLProperty *legacy_active = 0; - const XMLProperty *legacy_placement = 0; // may not exist for legacy 3.0 sessions if ((prop = node.property ("name")) != 0) { @@ -152,9 +195,6 @@ Processor::set_state (const XMLNode& node) // may not exist for legacy 3.0 sessions if ((prop = node.property ("id")) != 0) { _id = prop->value(); - cerr << "---------------- ID for processor " << name() << " = " << _id << endl; - } else { - cerr << "---------------- NO ID for processor " << name() << endl; } XMLNodeList nlist = node.children(); @@ -165,7 +205,7 @@ Processor::set_state (const XMLNode& node) if ((*niter)->name() == X_("Automation")) { XMLProperty *prop; - + if ((prop = (*niter)->property ("path")) != 0) { old_set_automation_state (*(*niter)); } else { @@ -177,7 +217,7 @@ Processor::set_state (const XMLNode& node) stringstream sstr; _visible_controls.clear (); - + sstr << prop->value(); while (1) { sstr >> what; @@ -195,9 +235,6 @@ Processor::set_state (const XMLNode& node) if ( !(legacy_active = (*niter)->property("active"))) { error << string_compose(_("No %1 property flag in element %2"), "active", (*niter)->name()) << endl; } - if ( !(legacy_placement = (*niter)->property("placement"))) { - error << string_compose(_("No %1 property flag in element %2"), "placement", (*niter)->name()) << endl; - } } } @@ -212,10 +249,10 @@ Processor::set_state (const XMLNode& node) } } - if (_active != (prop->value() == "yes")) { + if (_active != string_is_affirmative (prop->value())) { _active = !_active; ActiveChanged (); /* EMIT_SIGNAL */ - } + } return 0; } @@ -225,14 +262,21 @@ Processor::configure_io (ChanCount in, ChanCount out) { /* This class assumes 1:1 input:output.static output stream count. Derived classes must override and set _configured_output appropriately - if this is not the case + if this is not the case */ - _configured_input = in; - _configured_output = out; + _configured_input = in; + _configured_output = out; _configured = true; ConfigurationChanged.emit (in, out); return true; } + +void +Processor::set_display_to_user (bool yn) +{ + _display_to_user = yn; +} +