mackie: stop crashes when switching to X-Touch Compact device
[ardour.git] / libs / surfaces / mackie / button.h
index 61f09d7a038bad5dfe54827224248dbeb8fd99c3..e9cbdd7b4be517765425e4ffb8080856c8248681 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef __ardour_mackie_control_protocol_button_h__
 #define __ardour_mackie_control_protocol_button_h__
 
+#include "ardour/types.h"
+
 #include "controls.h"
 #include "led.h"
 
@@ -39,7 +41,7 @@ public:
 
        enum ID {
                /* Global Buttons */
-               
+
                Track,
                Send,
                Pan,
@@ -111,7 +113,7 @@ public:
                CmdAlt,
 
                /* Strip buttons */
-               
+
                RecEnable,
                Solo,
                Mute,
@@ -125,23 +127,34 @@ public:
        };
 
 
-       Button (ID bid, int did, std::string name, Group & group)
+       Button (Surface& s, ID bid, int did, std::string name, Group & group)
                : Control (did, name, group)
+               , _surface (s)
                , _bid (bid)
-               , _led  (did, name + "_led", group) {}
-       
+               , _led  (did, name + "_led", group)
+               , press_time (0) {}
+
        MidiByteArray zero() { return _led.zero (); }
        MidiByteArray set_state (LedState ls) { return _led.set_state (ls); }
-       
+
        ID bid() const { return _bid; }
-       
+
        static Control* factory (Surface& surface, Button::ID bid, int id, const std::string&, Group& group);
        static int name_to_id (const std::string& name);
        static std::string id_to_name (Button::ID);
 
+       Surface& surface() const { return _surface; }
+
+       void pressed ();
+       void released ();
+
+       int32_t long_press_count ();
+
 private:
+       Surface& _surface;
        ID  _bid; /* device independent button ID */
        Led _led;
+       ARDOUR::microseconds_t press_time;
 };
 
 } // Mackie namespace