summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/mackie_control_protocol.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-12-13 16:00:08 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2013-12-13 16:04:34 -0500
commit85cd647226a00205529c483d6cfd2066eda55880 (patch)
tree84e07143763b415e7141feb0737d541b0932f752 /libs/surfaces/mackie/mackie_control_protocol.cc
parenta17bafa96481c17efe0ecf1793b0bcd6728d6e8c (diff)
Mackie Control support now saves & restores port connections for devices not using ipMIDI (not required for ipMIDI anyway)
Diffstat (limited to 'libs/surfaces/mackie/mackie_control_protocol.cc')
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc24
1 files changed, 23 insertions, 1 deletions
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index e74235402c..9711f5dfc2 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -109,6 +109,8 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
, needs_ipmidi_restart (false)
, _metering_active (true)
, _initialized (false)
+ , _surfaces_state (0)
+ , _surfaces_version (0)
{
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
@@ -133,6 +135,7 @@ MackieControlProtocol::~MackieControlProtocol()
tear_down_gui ();
_active = false;
+ delete _surfaces_state;
/* stop event loop */
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::~MackieControlProtocol BaseUI::quit ()\n");
@@ -665,6 +668,8 @@ MackieControlProtocol::create_surfaces ()
return -1;
}
+ surface->set_state (*_surfaces_state, _surfaces_version);
+
{
Glib::Threads::Mutex::Lock lm (surfaces_lock);
surfaces.push_back (surface);
@@ -746,13 +751,20 @@ MackieControlProtocol::get_state()
node->add_property (X_("device-profile"), _device_profile.name());
node->add_property (X_("device-name"), _device_info.name());
+ XMLNode* snode = new XMLNode (X_("Surfaces"));
+ for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+ snode->add_child_nocopy ((*s)->get_state());
+ }
+
+ node->add_child_nocopy (*snode);
+
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::get_state done\n");
return *node;
}
int
-MackieControlProtocol::set_state (const XMLNode & node, int /*version*/)
+MackieControlProtocol::set_state (const XMLNode & node, int version)
{
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("MackieControlProtocol::set_state: active %1\n", _active));
@@ -781,6 +793,16 @@ MackieControlProtocol::set_state (const XMLNode & node, int /*version*/)
if ((prop = node.property (X_("device-profile"))) != 0) {
set_profile (prop->value());
}
+
+ XMLNode* snode = node.child (X_("Surfaces"));
+
+ delete _surfaces_state;
+ _surfaces_state = 0;
+
+ if (snode) {
+ _surfaces_state = new XMLNode (*snode);
+ _surfaces_version = version;
+ }
set_active (active);