mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-22 22:56:32 +01:00
implement save/load channel-maps
This commit is contained in:
parent
0eea06b635
commit
e92b7b5ebb
2 changed files with 39 additions and 1 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include <ostream>
|
||||
#include <utility>
|
||||
|
||||
#include "pbd/xml++.h"
|
||||
#include "ardour/data_type.h"
|
||||
#include "ardour/chan_count.h"
|
||||
|
||||
|
|
@ -42,6 +43,7 @@ public:
|
|||
ChanMapping() {}
|
||||
ChanMapping(ARDOUR::ChanCount identity);
|
||||
ChanMapping(const ChanMapping&);
|
||||
ChanMapping(const XMLNode& node);
|
||||
|
||||
uint32_t get(DataType t, uint32_t from, bool* valid) const;
|
||||
|
||||
|
|
@ -88,6 +90,8 @@ public:
|
|||
|
||||
uint32_t count () const;
|
||||
|
||||
XMLNode* state(const std::string& name) const;
|
||||
|
||||
/** Test if this mapping is a subset
|
||||
* @param superset to test against
|
||||
* @returns true if all mapping are also present in the superset
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue