#ifndef __ardour_mackie_control_protocol_button_h__
#define __ardour_mackie_control_protocol_button_h__
+#include "ardour/types.h"
+
#include "controls.h"
#include "led.h"
enum ID {
/* Global Buttons */
-
+
Track,
Send,
Pan,
Busses,
Outputs,
User,
- Shift,
- Option,
- Ctrl,
- CmdAlt,
Read,
Write,
Trim,
FinalGlobalButton,
+ /* Global buttons that users should not redefine */
+
+ Shift,
+ Option,
+ Ctrl,
+ CmdAlt,
+
/* Strip buttons */
-
+
RecEnable,
Solo,
Mute,
};
- 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