13
0

Use XMLNode::get/set_property in ARDOUR::IO class

This commit is contained in:
Tim Mayberry 2016-08-25 12:59:02 +10:00
parent c02729de52
commit 325d2c09c9
2 changed files with 28 additions and 29 deletions

View File

@ -30,6 +30,7 @@
#include "pbd/undo.h"
#include "pbd/statefuldestructible.h"
#include "pbd/controllable.h"
#include "pbd/enum_convert.h"
#include "ardour/ardour.h"
#include "ardour/automation_control.h"
@ -258,4 +259,8 @@ class LIBARDOUR_API IO : public SessionObject, public Latent
} // namespace ARDOUR
namespace PBD {
DEFINE_ENUM_CONVERT (ARDOUR::IO::Direction)
}
#endif /*__ardour_io_h__ */

View File

@ -31,6 +31,7 @@
#include "pbd/replace_all.h"
#include "pbd/unknown_type.h"
#include "pbd/enumwriter.h"
#include "pbd/types_convert.h"
#include "ardour/audioengine.h"
#include "ardour/buffer.h"
@ -41,6 +42,7 @@
#include "ardour/profile.h"
#include "ardour/route.h"
#include "ardour/session.h"
#include "ardour/types_convert.h"
#include "ardour/user_bundle.h"
#include "pbd/i18n.h"
@ -550,24 +552,22 @@ XMLNode&
IO::state (bool /*full_state*/)
{
XMLNode* node = new XMLNode (state_node_name);
char buf[64];
string str;
int n;
LocaleGuard lg;
Glib::Threads::Mutex::Lock lm (io_lock);
node->add_property("name", _name);
node->add_property ("id", id ().to_s ());
node->add_property ("direction", enum_2_string (_direction));
node->add_property ("default-type", _default_type.to_string());
node->set_property ("name", name());
node->set_property ("id", id ());
node->set_property ("direction", _direction);
node->set_property ("default-type", _default_type);
if (!_pretty_name_prefix.empty ()) {
node->add_property("pretty-name", _pretty_name_prefix);
node->set_property("pretty-name", _pretty_name_prefix);
}
for (std::vector<UserBundleInfo*>::iterator i = _bundles_connected.begin(); i != _bundles_connected.end(); ++i) {
XMLNode* n = new XMLNode ("Bundle");
n->add_property ("name", (*i)->bundle->name ());
n->set_property ("name", (*i)->bundle->name ());
node->add_child_nocopy (*n);
}
@ -576,8 +576,8 @@ IO::state (bool /*full_state*/)
vector<string> connections;
XMLNode* pnode = new XMLNode (X_("Port"));
pnode->add_property (X_("type"), i->type().to_string());
pnode->add_property (X_("name"), i->name());
pnode->set_property (X_("type"), i->type());
pnode->set_property (X_("name"), i->name());
if (i->get_connections (connections)) {
vector<string>::const_iterator ci;
@ -594,7 +594,7 @@ IO::state (bool /*full_state*/)
XMLNode* cnode = new XMLNode (X_("Connection"));
cnode->add_property (X_("other"), _session.engine().make_port_name_relative (*ci));
cnode->set_property (X_("other"), _session.engine().make_port_name_relative (*ci));
pnode->add_child_nocopy (*cnode);
}
}
@ -602,8 +602,7 @@ IO::state (bool /*full_state*/)
node->add_child_nocopy (*pnode);
}
snprintf (buf, sizeof (buf), "%" PRId64, _user_latency);
node->add_property (X_("user-latency"), buf);
node->set_property (X_("user-latency"), _user_latency);
return *node;
}
@ -617,7 +616,6 @@ IO::set_state (const XMLNode& node, int version)
*/
assert (version >= 3000);
XMLProperty const * prop;
XMLNodeConstIterator iter;
LocaleGuard lg;
@ -631,28 +629,26 @@ IO::set_state (const XMLNode& node, int version)
}
bool ignore_name = node.property ("ignore-name");
if ((prop = node.property ("name")) != 0 && !ignore_name) {
set_name (prop->value());
std::string name;
if (node.get_property ("name", name) && !ignore_name) {
set_name (name);
}
if ((prop = node.property (X_("default-type"))) != 0) {
_default_type = DataType(prop->value());
if (node.get_property (X_("default-type"), _default_type)) {
assert(_default_type != DataType::NIL);
}
set_id (node);
if ((prop = node.property ("direction")) != 0) {
_direction = (Direction) string_2_enum (prop->value(), _direction);
}
node.get_property ("direction", _direction);
if (create_ports (node, version)) {
return -1;
}
// after create_ports, updates names
if ((prop = node.property ("pretty-name")) != 0) {
set_pretty_name (prop->value());
if (node.get_property ("pretty-name", name)) {
set_pretty_name (name);
}
if (connecting_legal) {
@ -670,9 +666,7 @@ IO::set_state (const XMLNode& node, int version)
ConnectingLegal.connect_same_thread (connection_legal_c, boost::bind (&IO::connecting_became_legal, this));
}
if ((prop = node.property ("user-latency")) != 0) {
_user_latency = atoi (prop->value ());
}
node.get_property ("user-latency", _user_latency);
return 0;
}
@ -1007,7 +1001,7 @@ void
IO::prepare_for_reset (XMLNode& node, const std::string& name)
{
/* reset name */
node.add_property ("name", name);
node.set_property ("name", name);
/* now find connections and reset the name of the port
in one so that when we re-use it it will match
@ -1633,13 +1627,13 @@ IO::name_from_state (const XMLNode& node)
void
IO::set_name_in_state (XMLNode& node, const string& new_name)
{
node.add_property (X_("name"), new_name);
node.set_property (X_("name"), new_name);
XMLNodeList children = node.children ();
for (XMLNodeIterator i = children.begin(); i != children.end(); ++i) {
if ((*i)->name() == X_("Port")) {
string const old_name = (*i)->property(X_("name"))->value();
string const old_name_second_part = old_name.substr (old_name.find_first_of ("/") + 1);
(*i)->add_property (X_("name"), string_compose ("%1/%2", new_name, old_name_second_part));
(*i)->set_property (X_("name"), string_compose ("%1/%2", new_name, old_name_second_part));
}
}
}