Mackie Control: Need signal from session if group parameters change so strips redispl...
[ardour.git] / libs / surfaces / mackie / button.h
index e836ff9c184f065eddb4e7db754857aa333e67f6..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,9 +41,9 @@ public:
 
        enum ID {
                /* Global Buttons */
-               
-               IO,
-               Sends,
+
+               Track,
+               Send,
                Pan,
                Plugin,
                Eq,
@@ -51,7 +53,7 @@ public:
                ChannelLeft,
                ChannelRight,
                Flip,
-               Edit,
+               View,
                NameValue,
                TimecodeBeats,
                F1,
@@ -62,35 +64,31 @@ public:
                F6,
                F7,
                F8,
-               F9,
-               F10,
-               F11,
-               F12,
-               F13,
-               F14,
-               F15,
-               F16,
-               Shift,
-               Option,
-               Ctrl,
-               CmdAlt,
-               On,
-               RecReady,
-               Undo,
-               Save,
+               MidiTracks,
+               Inputs,
+               AudioTracks,
+               AudioInstruments,
+               Aux,
+               Busses,
+               Outputs,
+               User,
+               Read,
+               Write,
+               Trim,
                Touch,
-               Redo,
-               Marker,
-               Enter,
+               Latch,
+               Grp,
+               Save,
+               Undo,
                Cancel,
-               Mixer,
-               FrmLeft,
-               FrmRight,
+               Enter,
+               Marker,
+               Nudge,
                Loop,
-               PunchIn,
-               PunchOut,
-               Home,
-               End,
+               Drop,
+               Replace,
+               Click,
+               ClearSolo,
                Rewind,
                Ffwd,
                Stop,
@@ -104,34 +102,18 @@ public:
                Scrub,
                UserA,
                UserB,
-               Snapshot,
-               Read,
-               Write,
-               FdrGroup,
-               ClearSolo,
-               Track,
-               Send,
-               MidiTracks,
-               Inputs,
-               AudioTracks,
-               AudioInstruments,
-               Aux,
-               Busses,
-               Outputs,
-               User,
-               Trim,
-               Latch,
-               Grp,
-               Nudge,
-               Drop,
-               Replace,
-               Click,
-               View,
 
                FinalGlobalButton,
 
+               /* Global buttons that users should not redefine */
+
+               Shift,
+               Option,
+               Ctrl,
+               CmdAlt,
+
                /* Strip buttons */
-               
+
                RecEnable,
                Solo,
                Mute,
@@ -145,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