NOOP, remove trailing tabs/whitespace.
[ardour.git] / libs / surfaces / mackie / button.h
1 /*
2         Copyright (C) 2006,2007 John Anderson
3         Copyright (C) 2012 Paul Davis
4
5         This program is free software; you can redistribute it and/or modify
6         it under the terms of the GNU General Public License as published by
7         the Free Software Foundation; either version 2 of the License, or
8         (at your option) any later version.
9
10         This program is distributed in the hope that it will be useful,
11         but WITHOUT ANY WARRANTY; without even the implied warranty of
12         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13         GNU General Public License for more details.
14
15         You should have received a copy of the GNU General Public License
16         along with this program; if not, write to the Free Software
17         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 #ifndef __ardour_mackie_control_protocol_button_h__
21 #define __ardour_mackie_control_protocol_button_h__
22
23 #include "controls.h"
24 #include "led.h"
25
26 namespace ArdourSurface {
27
28 namespace Mackie {
29
30 class Surface;
31
32 class Button : public Control
33 {
34 public:
35 /* These values uniquely identify each possible button that an MCP device may
36    send. Each DeviceInfo object contains its own set of button definitions that
37    define what device ID will be sent for each button, and there is no reason
38    for them to be the same.  */
39
40         enum ID {
41                 /* Global Buttons */
42
43                 Track,
44                 Send,
45                 Pan,
46                 Plugin,
47                 Eq,
48                 Dyn,
49                 Left,
50                 Right,
51                 ChannelLeft,
52                 ChannelRight,
53                 Flip,
54                 View,
55                 NameValue,
56                 TimecodeBeats,
57                 F1,
58                 F2,
59                 F3,
60                 F4,
61                 F5,
62                 F6,
63                 F7,
64                 F8,
65                 MidiTracks,
66                 Inputs,
67                 AudioTracks,
68                 AudioInstruments,
69                 Aux,
70                 Busses,
71                 Outputs,
72                 User,
73                 Read,
74                 Write,
75                 Trim,
76                 Touch,
77                 Latch,
78                 Grp,
79                 Save,
80                 Undo,
81                 Cancel,
82                 Enter,
83                 Marker,
84                 Nudge,
85                 Loop,
86                 Drop,
87                 Replace,
88                 Click,
89                 ClearSolo,
90                 Rewind,
91                 Ffwd,
92                 Stop,
93                 Play,
94                 Record,
95                 CursorUp,
96                 CursorDown,
97                 CursorLeft,
98                 CursorRight,
99                 Zoom,
100                 Scrub,
101                 UserA,
102                 UserB,
103
104                 FinalGlobalButton,
105
106                 /* Global buttons that users should not redefine */
107
108                 Shift,
109                 Option,
110                 Ctrl,
111                 CmdAlt,
112
113                 /* Strip buttons */
114
115                 RecEnable,
116                 Solo,
117                 Mute,
118                 Select,
119                 VSelect,
120                 FaderTouch,
121
122                 /* Master fader */
123
124                 MasterFaderTouch,
125         };
126
127
128         Button (ID bid, int did, std::string name, Group & group)
129                 : Control (did, name, group)
130                 , _bid (bid)
131                 , _led  (did, name + "_led", group) {}
132
133         MidiByteArray zero() { return _led.zero (); }
134         MidiByteArray set_state (LedState ls) { return _led.set_state (ls); }
135
136         ID bid() const { return _bid; }
137
138         static Control* factory (Surface& surface, Button::ID bid, int id, const std::string&, Group& group);
139         static int name_to_id (const std::string& name);
140         static std::string id_to_name (Button::ID);
141
142 private:
143         ID  _bid; /* device independent button ID */
144         Led _led;
145 };
146
147 } // Mackie namespace
148 } // ArdourSurface namespace
149
150 #endif