X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fprocessor.cc;h=555dff5092e2a4ec015e47b7105939336bbcc4a5;hb=df2fd9491904aba95e08e1e26552be609530ee83;hp=2e39c52d674e668ed8dd90e9bc86f98450146d12;hpb=e6eb059576eefd9a26c177627ae7dd3ba2feb727;p=ardour.git diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index 2e39c52d67..555dff5092 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,18 +56,18 @@ using namespace std; using namespace ARDOUR; using namespace PBD; -sigc::signal Processor::ProcessorCreated; - // Always saved as Processor, but may be IOProcessor or Send in legacy sessions const string Processor::state_node_name = "Processor"; Processor::Processor(Session& session, const string& name) : SessionObject(session, name) - , AutomatableControls(session) + , Automatable (session) + , _pending_active(false) , _active(false) , _next_ab_is_active(false) , _configured(false) - , _gui(0) + , _display_to_user (true) + , _pre_fader (false) { } @@ -74,8 +77,8 @@ Processor::get_state (void) return state (true); } -/* NODE STRUCTURE - +/* NODE STRUCTURE + @@ -92,30 +95,31 @@ XMLNode& 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()) { + stringstream sstr; for (set::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()); @@ -127,11 +131,49 @@ 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) { + bool const a = string_is_affirmative (prop->value ()); + if (_active != a) { + if (a) { + activate (); + } else { + deactivate (); + } + } + } + } + } + + 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) { @@ -151,7 +193,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 { @@ -163,7 +205,7 @@ Processor::set_state (const XMLNode& node) stringstream sstr; _visible_controls.clear (); - + sstr << prop->value(); while (1) { sstr >> what; @@ -181,15 +223,10 @@ 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; - } } } if ((prop = node.property ("active")) == 0) { - warning << _("XML node describing a processor is missing the `active' field," - "trying legacy active flag from child node") << endmsg; if (legacy_active) { prop = legacy_active; } else { @@ -198,10 +235,14 @@ Processor::set_state (const XMLNode& node) } } - if (_active != (prop->value() == "yes")) { - _active = !_active; - ActiveChanged (); /* EMIT_SIGNAL */ - } + bool const a = string_is_affirmative (prop->value ()); + if (_active != a) { + if (a) { + activate (); + } else { + deactivate (); + } + } return 0; } @@ -211,14 +252,26 @@ 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; +} + +void +Processor::set_pre_fader (bool p) +{ + _pre_fader = p; +}