lincoln's patch to get loading 2.X sessions to work better
git-svn-id: svn://localhost/ardour2/branches/3.0@6804 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
5e8b3f0832
commit
f297e9fa51
|
@ -23,6 +23,7 @@
|
|||
#include "evoral/Parameter.hpp"
|
||||
#include "pbd/signals.h"
|
||||
#include "pbd/stateful.h"
|
||||
#include <string>
|
||||
|
||||
namespace ARDOUR {
|
||||
|
||||
|
@ -61,6 +62,7 @@ class MuteMaster : public PBD::Stateful
|
|||
|
||||
XMLNode& get_state();
|
||||
int set_state(const XMLNode&, int version);
|
||||
int set_state(std::string mute_point);
|
||||
|
||||
private:
|
||||
MutePoint _mute_point;
|
||||
|
|
|
@ -748,8 +748,12 @@ IO::get_port_counts_2X (XMLNode const & node, int /*version*/, ChanCount& n, boo
|
|||
|
||||
if ((prop = node.property ("inputs")) != 0 && _direction == Input) {
|
||||
n_audio = count (prop->value().begin(), prop->value().end(), '{');
|
||||
} else if ((prop = node.property ("input-connection")) != 0 && _direction == Input) {
|
||||
n_audio = 1;
|
||||
} else if ((prop = node.property ("outputs")) != 0 && _direction == Output) {
|
||||
n_audio = count (prop->value().begin(), prop->value().end(), '{');
|
||||
} else if ((prop = node.property ("output-connection")) != 0 && _direction == Output) {
|
||||
n_audio = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -352,7 +352,7 @@ LV2Plugin::has_editor() const
|
|||
}
|
||||
|
||||
int
|
||||
LV2Plugin::set_state(const XMLNode& node, int /*version*/)
|
||||
LV2Plugin::set_state(const XMLNode& node, int version)
|
||||
{
|
||||
XMLNodeList nodes;
|
||||
XMLProperty *prop;
|
||||
|
@ -368,8 +368,12 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
|
|||
return -1;
|
||||
}
|
||||
|
||||
nodes = node.children ("Port");
|
||||
|
||||
if (version < 3000){
|
||||
nodes = node.children ("port");
|
||||
} else {
|
||||
nodes = node.children ("Port");
|
||||
}
|
||||
|
||||
for (iter = nodes.begin(); iter != nodes.end(); ++iter){
|
||||
|
||||
child = *iter;
|
||||
|
@ -382,6 +386,7 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
|
|||
}
|
||||
|
||||
map<string,uint32_t>::iterator i = _port_indices.find(sym);
|
||||
|
||||
if (i != _port_indices.end()) {
|
||||
port_id = i->second;
|
||||
} else {
|
||||
|
|
|
@ -76,6 +76,14 @@ MuteMaster::mute_gain_at (MutePoint mp) const
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
MuteMaster::set_state (std::string mute_point)
|
||||
{
|
||||
_mute_point = (MutePoint) string_2_enum (mute_point, _mute_point);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
MuteMaster::set_state (const XMLNode& node, int /*version*/)
|
||||
{
|
||||
|
|
|
@ -798,8 +798,11 @@ PluginInsert::set_state(const XMLNode& node, int version)
|
|||
set_automatable ();
|
||||
}
|
||||
|
||||
/* Handle the node list for this Processor (or Insert if an A2 session) */
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||
|
||||
if ((*niter)->name() == plugin->state_node_name()) {
|
||||
|
||||
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
|
||||
(*i)->set_state (**niter, version);
|
||||
}
|
||||
|
@ -808,6 +811,7 @@ PluginInsert::set_state(const XMLNode& node, int version)
|
|||
}
|
||||
|
||||
if (version < 3000) {
|
||||
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||
if ((*niter)->name() == "Redirect") {
|
||||
/* XXX do we need to tackle placement? i think not (pd; oct 16 2009) */
|
||||
|
@ -815,7 +819,9 @@ PluginInsert::set_state(const XMLNode& node, int version)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
set_parameter_state_2X (node, version);
|
||||
|
||||
} else {
|
||||
Processor::set_state (node, version);
|
||||
set_parameter_state (node, version);
|
||||
|
@ -910,7 +916,7 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
|
|||
|
||||
cnodes = (*niter)->children ("port");
|
||||
|
||||
for(iter = cnodes.begin(); iter != cnodes.end(); ++iter){
|
||||
for (iter = cnodes.begin(); iter != cnodes.end(); ++iter){
|
||||
|
||||
child = *iter;
|
||||
|
||||
|
|
|
@ -1214,6 +1214,14 @@ Region::_set_state (const XMLNode& node, int version, PropertyChange& what_chang
|
|||
cerr << endl;
|
||||
send_change (what_changed);
|
||||
}
|
||||
|
||||
/* Quick fix for 2.x sessions when region is muted */
|
||||
if ((prop = node.property (X_("flags")))) {
|
||||
if (string::npos != prop->value().find("Muted")){
|
||||
set_muted (true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2037,11 +2037,6 @@ Route::_set_state_2X (const XMLNode& node, int version)
|
|||
|
||||
/* 2X things which still remain to be handled:
|
||||
* default-type
|
||||
* muted
|
||||
* mute-affects-pre-fader
|
||||
* mute-affects-post-fader
|
||||
* mute-affects-control-outs
|
||||
* mute-affects-main-outs
|
||||
* automation
|
||||
* controlouts
|
||||
*/
|
||||
|
@ -2056,58 +2051,7 @@ Route::_set_state_2X (const XMLNode& node, int version)
|
|||
} else {
|
||||
_flags = Flag (0);
|
||||
}
|
||||
|
||||
/* add standard processors */
|
||||
|
||||
_meter.reset (new PeakMeter (_session));
|
||||
add_processor (_meter, PreFader);
|
||||
|
||||
if (is_monitor()) {
|
||||
/* where we listen to tracks */
|
||||
_intreturn.reset (new InternalReturn (_session));
|
||||
add_processor (_intreturn, PreFader);
|
||||
|
||||
_monitor_control.reset (new MonitorProcessor (_session));
|
||||
add_processor (_monitor_control, PostFader);
|
||||
}
|
||||
|
||||
_main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
|
||||
add_processor (_main_outs, PostFader);
|
||||
|
||||
/* IOs */
|
||||
|
||||
nlist = node.children ();
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||
|
||||
child = *niter;
|
||||
|
||||
if (child->name() == IO::state_node_name) {
|
||||
|
||||
/* there is a note in IO::set_state_2X() about why we have to call
|
||||
this directly.
|
||||
*/
|
||||
|
||||
_input->set_state_2X (*child, version, true);
|
||||
_output->set_state_2X (*child, version, false);
|
||||
|
||||
if ((prop = child->property (X_("name"))) != 0) {
|
||||
set_name (prop->value ());
|
||||
}
|
||||
|
||||
if ((prop = child->property (X_("id"))) != 0) {
|
||||
_id = prop->value ();
|
||||
}
|
||||
|
||||
if ((prop = child->property (X_("active"))) != 0) {
|
||||
bool yn = string_is_affirmative (prop->value());
|
||||
_active = !yn; // force switch
|
||||
set_active (yn);
|
||||
}
|
||||
}
|
||||
|
||||
/* XXX: panners? */
|
||||
}
|
||||
|
||||
|
||||
if ((prop = node.property (X_("phase-invert"))) != 0) {
|
||||
set_phase_invert (string_is_affirmative (prop->value()));
|
||||
}
|
||||
|
@ -2124,6 +2068,65 @@ Route::_set_state_2X (const XMLNode& node, int version)
|
|||
set_solo (yn, this);
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("muted"))) != 0) {
|
||||
|
||||
bool first = true;
|
||||
bool muted = string_is_affirmative (prop->value());
|
||||
|
||||
if(muted){
|
||||
|
||||
string mute_point;
|
||||
|
||||
if ((prop = node.property (X_("mute-affects-pre-fader"))) != 0) {
|
||||
|
||||
if (string_is_affirmative (prop->value())){
|
||||
mute_point = mute_point + "PreFader";
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("mute-affects-post-fader"))) != 0) {
|
||||
|
||||
if (string_is_affirmative (prop->value())){
|
||||
|
||||
if (!first) {
|
||||
mute_point = mute_point + ",";
|
||||
}
|
||||
|
||||
mute_point = mute_point + "PostFader";
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("mute-affects-control-outs"))) != 0) {
|
||||
|
||||
if (string_is_affirmative (prop->value())){
|
||||
|
||||
if (!first) {
|
||||
mute_point = mute_point + ",";
|
||||
}
|
||||
|
||||
mute_point = mute_point + "Listen";
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("mute-affects-main-outs"))) != 0) {
|
||||
|
||||
if (string_is_affirmative (prop->value())){
|
||||
|
||||
if (!first) {
|
||||
mute_point = mute_point + ",";
|
||||
}
|
||||
|
||||
mute_point = mute_point + "Main";
|
||||
}
|
||||
}
|
||||
|
||||
_mute_master->set_state (mute_point);
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("meter-point"))) != 0) {
|
||||
_meter_point = MeterPoint (string_2_enum (prop->value (), _meter_point));
|
||||
}
|
||||
|
@ -2163,6 +2166,78 @@ Route::_set_state_2X (const XMLNode& node, int version)
|
|||
}
|
||||
}
|
||||
|
||||
/* add standard processors */
|
||||
|
||||
//_meter.reset (new PeakMeter (_session));
|
||||
//add_processor (_meter, PreFader);
|
||||
|
||||
if (is_monitor()) {
|
||||
/* where we listen to tracks */
|
||||
_intreturn.reset (new InternalReturn (_session));
|
||||
add_processor (_intreturn, PreFader);
|
||||
|
||||
_monitor_control.reset (new MonitorProcessor (_session));
|
||||
add_processor (_monitor_control, PostFader);
|
||||
}
|
||||
|
||||
_main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
|
||||
add_processor (_main_outs, PostFader);
|
||||
|
||||
/* IOs */
|
||||
|
||||
nlist = node.children ();
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||
|
||||
child = *niter;
|
||||
|
||||
if (child->name() == IO::state_node_name) {
|
||||
|
||||
/* there is a note in IO::set_state_2X() about why we have to call
|
||||
this directly.
|
||||
*/
|
||||
|
||||
_input->set_state_2X (*child, version, true);
|
||||
_output->set_state_2X (*child, version, false);
|
||||
|
||||
if ((prop = child->property (X_("name"))) != 0) {
|
||||
Route::set_name (prop->value ());
|
||||
}
|
||||
|
||||
if ((prop = child->property (X_("id"))) != 0) {
|
||||
_id = prop->value ();
|
||||
}
|
||||
|
||||
if ((prop = child->property (X_("active"))) != 0) {
|
||||
bool yn = string_is_affirmative (prop->value());
|
||||
_active = !yn; // force switch
|
||||
set_active (yn);
|
||||
}
|
||||
|
||||
if ((prop = child->property (X_("gain"))) != 0) {
|
||||
gain_t val;
|
||||
|
||||
if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
|
||||
_amp->gain_control()->set_value (val);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Panners in the IO */
|
||||
XMLNodeList io_nlist = child->children ();
|
||||
|
||||
XMLNodeConstIterator io_niter;
|
||||
XMLNode *io_child;
|
||||
|
||||
for (io_niter = io_nlist.begin(); io_niter != io_nlist.end(); ++io_niter) {
|
||||
|
||||
io_child = *io_niter;
|
||||
|
||||
if (io_child->name() == X_("Panner")) {
|
||||
_main_outs->panner()->set_state(*io_child, version);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
XMLNodeList redirect_nodes;
|
||||
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter){
|
||||
|
|
Loading…
Reference in New Issue
Block a user