#ifndef __ardour_mackie_control_protocol_button_h__
#define __ardour_mackie_control_protocol_button_h__
+#include "ardour/types.h"
+
#include "controls.h"
#include "led.h"
+namespace ArdourSurface {
+
namespace Mackie {
class Surface;
enum ID {
/* Global Buttons */
-
- IO,
- Sends,
+
+ Track,
+ Send,
Pan,
Plugin,
Eq,
ChannelLeft,
ChannelRight,
Flip,
- Edit,
+ View,
NameValue,
TimecodeBeats,
F1,
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,
Scrub,
UserA,
UserB,
- Assign1,
- Assign2,
- 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,
Select,
VSelect,
FaderTouch,
+
+ /* Master fader */
+
+ MasterFaderTouch,
};
- 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
+} // ArdourSurface namespace
#endif