X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fprocessor.cc;h=65517be4b145ecedb74f53134d9d6ba760aa7f10;hb=706d6e8ff06b32f2b7cefcb09fd81051c3f80735;hp=84fb43d68c75468a276402079625fd0f6ca51905;hpb=0569107ddc0d2a8df6ca0a2c8cc16ebe8f3dee99;p=ardour.git diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index 84fb43d68c..65517be4b1 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,9 +17,12 @@ */ +#ifdef WAF_BUILD +#include "libardour-config.h" +#endif + #include -#include #include "pbd/failed_constructor.h" #include "pbd/enumwriter.h" @@ -53,7 +56,7 @@ using namespace std; using namespace ARDOUR; using namespace PBD; -sigc::signal Processor::ProcessorCreated; +PBD::Signal1 Processor::ProcessorCreated; // Always saved as Processor, but may be IOProcessor or Send in legacy sessions const string Processor::state_node_name = "Processor"; @@ -61,28 +64,37 @@ 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) - , _sort_key (0) , _gui(0) + , _display_to_user (true) { } -void -Processor::set_sort_key (uint32_t key) +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) { - _sort_key = key; + set_state (node, Stateful::loading_state_version); + _pending_active = _active; } - + XMLNode& Processor::get_state (void) { return state (true); } -/* NODE STRUCTURE - +/* NODE STRUCTURE + @@ -101,22 +113,18 @@ Processor::state (bool full_state) XMLNode* node = new XMLNode (state_node_name); stringstream sstr; char buf[64]; - - // NOTE: This conflicts with "id" used by plugin for name in legacy sessions id().print (buf, sizeof (buf)); node->add_property("id", buf); node->add_property("name", _name); - node->add_property("active", active() ? "yes" : "no"); - snprintf (buf, sizeof (buf), "%u", _sort_key); - node->add_property("sort-key", buf); + 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 +146,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) { @@ -162,7 +204,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 { @@ -174,7 +216,7 @@ Processor::set_state (const XMLNode& node) stringstream sstr; _visible_controls.clear (); - + sstr << prop->value(); while (1) { sstr >> what; @@ -192,9 +234,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; - } } } @@ -209,10 +248,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,13 +261,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); + ConfigurationChanged (in, out); /* EMIT SIGNAL */ return true; } + +void +Processor::set_display_to_user (bool yn) +{ + _display_to_user = yn; +} +