summaryrefslogtreecommitdiff
path: root/libs/ardour/chan_mapping.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-02 01:11:05 +0200
committerRobin Gareus <robin@gareus.org>2016-04-02 01:11:05 +0200
commite92b7b5ebb2217d052009bb7f81ac7ba5bd53e14 (patch)
tree292b67796a03949846d7bd39814a81fd3f414fbe /libs/ardour/chan_mapping.cc
parent0eea06b6359822fa06956a4e39c3b100ae8fe510 (diff)
implement save/load channel-maps
Diffstat (limited to 'libs/ardour/chan_mapping.cc')
-rw-r--r--libs/ardour/chan_mapping.cc36
1 files changed, 35 insertions, 1 deletions
diff --git a/libs/ardour/chan_mapping.cc b/libs/ardour/chan_mapping.cc
index 9e69294fdb..1d59faff00 100644
--- a/libs/ardour/chan_mapping.cc
+++ b/libs/ardour/chan_mapping.cc
@@ -23,6 +23,10 @@
#include <iostream>
#include "ardour/chan_mapping.h"
+#include "i18n.h"
+
+static const char* state_node_name = "Channelmap";
+
using namespace std;
namespace ARDOUR {
@@ -40,7 +44,7 @@ ChanMapping::ChanMapping(ChanCount identity)
}
}
-ChanMapping::ChanMapping (const ChanMapping& other )
+ChanMapping::ChanMapping (const ChanMapping& other)
{
const ChanMapping::Mappings& mp (other.mappings());
for (Mappings::const_iterator tm = mp.begin(); tm != mp.end(); ++tm) {
@@ -50,6 +54,19 @@ ChanMapping::ChanMapping (const ChanMapping& other )
}
}
+ChanMapping::ChanMapping (const XMLNode& node)
+{
+ XMLNodeConstIterator iter = node.children().begin();
+ for ( ; iter != node.children().end(); ++iter) {
+ if ((*iter)->name() == X_(state_node_name)) {
+ const string& type_str = (*iter)->property("type")->value();
+ const string& from_str = (*iter)->property("from")->value();
+ const string& to_str = (*iter)->property("to")->value();
+ set(DataType(type_str), atol (from_str.c_str()), atol (to_str.c_str()));
+ }
+ }
+}
+
uint32_t
ChanMapping::get(DataType t, uint32_t from, bool* valid) const
{
@@ -135,6 +152,23 @@ ChanMapping::offset_to(DataType t, int32_t delta)
}
}
+XMLNode*
+ChanMapping::state(const std::string& name) const
+{
+ XMLNode* node = new XMLNode (name);
+ const Mappings& mp (mappings());
+ for (Mappings::const_iterator tm = mp.begin(); tm != mp.end(); ++tm) {
+ for (TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) {
+ XMLNode* n = new XMLNode(X_(state_node_name));
+ n->add_property("type", tm->first.to_string());
+ n->add_property("from", i->first);
+ n->add_property("to", i->second);
+ node->add_child_nocopy(*n);
+ }
+ }
+ return node;
+}
+
bool
ChanMapping::is_subset (const ChanMapping& superset) const
{