X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fprocessor.cc;h=3bc9db024bef1873c5b1d0db710cb38f5a8648b6;hb=b88e7fdcca8ef8fa4c22f93c2934b30713ab4716;hp=e3a2b0b15ef5caf361e821d6f5326be75d5b4546;hpb=88beef2e93d26d28467fe151f5ef2972d0ca9169;p=ardour.git diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index e3a2b0b15e..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 @@ -65,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& @@ -89,8 +94,8 @@ Processor::get_state (void) return state (true); } -/* NODE STRUCTURE - +/* NODE STRUCTURE + @@ -109,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()) { @@ -142,8 +147,43 @@ 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; @@ -155,7 +195,7 @@ Processor::set_state (const XMLNode& node) // may not exist for legacy 3.0 sessions if ((prop = node.property ("id")) != 0) { _id = prop->value(); - } + } XMLNodeList nlist = node.children(); XMLNodeIterator niter; @@ -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; @@ -209,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; } @@ -222,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; +} +