From 2ea5962af2a389277703c6eebc2160cf52302468 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 24 Jun 2015 13:46:07 -0400 Subject: rationalize save/restore of control surface "feedback" property --- libs/surfaces/control_protocol/control_protocol.cc | 13 +++++++++++++ .../control_protocol/control_protocol.h | 2 ++ .../generic_midi/generic_midi_control_protocol.cc | 7 ++----- libs/surfaces/mackie/mackie_control_protocol.cc | 4 ++++ libs/surfaces/mackie/mackie_control_protocol.h | 7 ++++++- libs/surfaces/osc/osc.cc | 19 ++++--------------- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc index 71cae36086..6ac673925a 100644 --- a/libs/surfaces/control_protocol/control_protocol.cc +++ b/libs/surfaces/control_protocol/control_protocol.cc @@ -374,6 +374,19 @@ ControlProtocol::get_state () XMLNode* node = new XMLNode (state_node_name); node->add_property ("name", _name); + node->add_property ("feedback", get_feedback() ? "yes" : "no"); return *node; } + +int +ControlProtocol::set_state (XMLNode const & node, int /* version */) +{ + const XMLProperty* prop; + + if ((prop = node.property ("feedback")) != 0) { + set_feedback (string_is_affirmative (prop->value())); + } + + return 0; +} diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h index f5af008e4a..13b8dcad7a 100644 --- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h +++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h @@ -135,6 +135,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope virtual void tear_down_gui() { } XMLNode& get_state (); + int set_state (XMLNode const &, int version); + static const std::string state_node_name; protected: diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc index 702d361965..85a81400c4 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc @@ -464,7 +464,6 @@ GenericMidiControlProtocol::get_state () XMLNode& node (ControlProtocol::get_state()); char buf[32]; - node.add_property (X_("feedback"), do_feedback ? "1" : "0"); snprintf (buf, sizeof (buf), "%" PRIu64, _feedback_interval); node.add_property (X_("feedback_interval"), buf); snprintf (buf, sizeof (buf), "%d", _threshold); @@ -501,10 +500,8 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) XMLNodeConstIterator niter; const XMLProperty* prop; - if ((prop = node.property ("feedback")) != 0) { - do_feedback = (bool) atoi (prop->value().c_str()); - } else { - do_feedback = false; + if (ControlProtocol::set_state (node, version)) { + return -1; } if ((prop = node.property ("feedback_interval")) != 0) { diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index fc036513cc..5d6e55e742 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -827,6 +827,10 @@ MackieControlProtocol::set_state (const XMLNode & node, int version) const XMLProperty* prop; uint32_t bank = 0; + if (ControlProtocol::set_state (node, version)) { + return -1; + } + if ((prop = node.property (X_("ipmidi-base"))) != 0) { set_ipmidi_base (atoi (prop->value())); } diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 510cbf11ba..f521684a80 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -140,7 +140,12 @@ class MackieControlProtocol XMLNode& get_state (); int set_state (const XMLNode&, int version); - + + /* Note: because Mackie control is inherently a duplex protocol, + we do not implement get/set_feedback() since this aspect of + support for the protocol is not optional. + */ + static bool probe(); Glib::Threads::Mutex surfaces_lock; diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 5878b34d80..727485d83c 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -1090,25 +1090,14 @@ OSC::route_plugin_parameter_print (int rid, int piid, int par) XMLNode& OSC::get_state () { - XMLNode& node (ControlProtocol::get_state()); - - node.add_property (X_("feedback"), _send_route_changes ? "1" : "0"); - return node; + return ControlProtocol::get_state(); } int -OSC::set_state (const XMLNode& node, int /*version*/) +OSC::set_state (const XMLNode& node, int version) { - const XMLProperty* prop = node.property (X_("feedback")); - - if (prop) { - if (PBD::string_is_affirmative (prop->value())) { - _send_route_changes = true; - } else { - _send_route_changes = false; - } - } else { - /* leave it alone */ + if (ControlProtocol::set_state (node, version)) { + return -1; } return 0; -- cgit v1.2.3