rework Stateful::set_state() patch to avoid default version argument
[ardour.git] / libs / surfaces / generic_midi / generic_midi_control_protocol.h
index f86f5f64347d8bab56b22dadf63f4775da71d183..6473a869ae4a56c50407d7bc927c8e56e324fa0e 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef ardour_generic_midi_control_protocol_h
 #define ardour_generic_midi_control_protocol_h
 
-#include <vector>
+#include <set>
 #include <glibmm/thread.h>
 #include <ardour/types.h>
 
@@ -32,17 +32,27 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
        MIDI::Port* port () const { return _port; }
        void set_feedback_interval (ARDOUR::microseconds_t);
 
+       int set_feedback (bool yn);
+       bool get_feedback () const;
+
+       XMLNode& get_state ();
+       int set_state (const XMLNode&, int version);
+
   private:
        MIDI::Port* _port;
        ARDOUR::microseconds_t _feedback_interval;
        ARDOUR::microseconds_t last_feedback_time;
 
+       bool  do_feedback;
+       bool  auto_binding;
        void _send_feedback ();
        void  send_feedback ();
 
-       typedef std::vector<MIDIControllable*> MIDIControllables;
+       typedef std::set<MIDIControllable*> MIDIControllables;
        MIDIControllables controllables;
-       MIDIControllables pending_controllables;
+
+       typedef std::list<std::pair<MIDIControllable*,sigc::connection> > MIDIPendingControllables;
+       MIDIPendingControllables pending_controllables;
        Glib::Mutex controllables_lock;
        Glib::Mutex pending_lock;
 
@@ -50,6 +60,13 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
        void stop_learning (PBD::Controllable*);
 
        void learning_stopped (MIDIControllable*);
+
+       void create_binding (PBD::Controllable*, int, int);
+       void delete_binding (PBD::Controllable*);
+
+       void auto_binding_on();
+       void auto_binding_off();
+
 };
 
 #endif /* ardour_generic_midi_control_protocol_h */