rationalize save/restore of control surface "feedback" property
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 24 Jun 2015 17:46:07 +0000 (13:46 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 24 Jun 2015 17:46:07 +0000 (13:46 -0400)
libs/surfaces/control_protocol/control_protocol.cc
libs/surfaces/control_protocol/control_protocol/control_protocol.h
libs/surfaces/generic_midi/generic_midi_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.h
libs/surfaces/osc/osc.cc

index 71cae3608619e54be1beb32c34b47ca70b6fea9b..6ac673925a52d347f7fe1700197e20135cc52dde 100644 (file)
@@ -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;
+}
index f5af008e4a85881c2c55165ccfe7cdd470e99230..13b8dcad7a76c7bda186523ce5afd7a8c3fa3420 100644 (file)
@@ -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:
index 702d361965d6f0d385d1857daf1b63cf2e7edf57..85a81400c45b351a02edcdfce1babd6052fb7829 100644 (file)
@@ -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) {
index fc036513ccde4ded564999ea366d5d8cdd29aa96..5d6e55e74259e418f073f89d995a27f3bdf48329 100644 (file)
@@ -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()));
        }
index 510cbf11ba4318298a67d2ecf9ffdb5d5d42058d..f521684a807eaa7f3acc1a3259d06a87582456c3 100644 (file)
@@ -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;
index 5878b34d80bfdcaeeca58d989c60cd6c93389b0e..727485d83c9db76e36124d04e18219336054001c 100644 (file)
@@ -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;