remove PBD::Connection (replace use with PBD::ScopedConnection); remove limitation...
[ardour.git] / libs / surfaces / mackie / mackie_surface_generated.cc
1 /*
2         Generated by scripts/generate-surface.rb
3 */
4
5 #include "mackie_surface.h"
6
7 #include "controls.h"
8 #include "mackie_button_handler.h"
9
10 using namespace Mackie;
11
12 void Mackie::MackieSurface::init_controls()
13 {
14         // intialise groups and strips
15         Group * group = 0;
16         
17         // make sure there are enough strips
18         strips.resize( 8 );
19         
20         group = new Group ( "user" );
21         groups["user"] = group;
22         
23         group = new Group ( "assignment" );
24         groups["assignment"] = group;
25         
26         group = new Group ( "none" );
27         groups["none"] = group;
28         
29         group = new MasterStrip ( "master", 0 );
30         groups["master"] = group;
31         strips[0] = dynamic_cast<Strip*>( group );
32         
33         group = new Strip ( "strip_1", 0 );
34         groups["strip_1"] = group;
35         strips[0] = dynamic_cast<Strip*>( group );
36         
37         group = new Group ( "cursor" );
38         groups["cursor"] = group;
39         
40         group = new Strip ( "strip_2", 1 );
41         groups["strip_2"] = group;
42         strips[1] = dynamic_cast<Strip*>( group );
43         
44         group = new Group ( "functions" );
45         groups["functions"] = group;
46         
47         group = new Group ( "automation" );
48         groups["automation"] = group;
49         
50         group = new Strip ( "strip_3", 2 );
51         groups["strip_3"] = group;
52         strips[2] = dynamic_cast<Strip*>( group );
53         
54         group = new Group ( "display" );
55         groups["display"] = group;
56         
57         group = new Strip ( "strip_4", 3 );
58         groups["strip_4"] = group;
59         strips[3] = dynamic_cast<Strip*>( group );
60         
61         group = new Strip ( "strip_5", 4 );
62         groups["strip_5"] = group;
63         strips[4] = dynamic_cast<Strip*>( group );
64         
65         group = new Strip ( "strip_6", 5 );
66         groups["strip_6"] = group;
67         strips[5] = dynamic_cast<Strip*>( group );
68         
69         group = new Group ( "transport" );
70         groups["transport"] = group;
71         
72         group = new Strip ( "strip_7", 6 );
73         groups["strip_7"] = group;
74         strips[6] = dynamic_cast<Strip*>( group );
75         
76         group = new Group ( "modifiers" );
77         groups["modifiers"] = group;
78         
79         group = new Group ( "bank" );
80         groups["bank"] = group;
81         
82         group = new Strip ( "strip_8", 7 );
83         groups["strip_8"] = group;
84         strips[7] = dynamic_cast<Strip*>( group );
85         
86
87         // initialise controls
88         Fader * fader = 0;
89         Pot * pot = 0;
90         Button * button = 0;
91         Led * led = 0;
92
93         group = groups["strip_1"];
94         fader = new Fader ( 0, 1, "gain", *group );
95         faders[0x00] = fader;
96         controls.push_back( fader );
97         group->add( *fader );
98
99         group = groups["strip_2"];
100         fader = new Fader ( 1, 2, "gain", *group );
101         faders[0x01] = fader;
102         controls.push_back( fader );
103         group->add( *fader );
104
105         group = groups["strip_3"];
106         fader = new Fader ( 2, 3, "gain", *group );
107         faders[0x02] = fader;
108         controls.push_back( fader );
109         group->add( *fader );
110
111         group = groups["strip_4"];
112         fader = new Fader ( 3, 4, "gain", *group );
113         faders[0x03] = fader;
114         controls.push_back( fader );
115         group->add( *fader );
116
117         group = groups["strip_5"];
118         fader = new Fader ( 4, 5, "gain", *group );
119         faders[0x04] = fader;
120         controls.push_back( fader );
121         group->add( *fader );
122
123         group = groups["strip_6"];
124         fader = new Fader ( 5, 6, "gain", *group );
125         faders[0x05] = fader;
126         controls.push_back( fader );
127         group->add( *fader );
128
129         group = groups["strip_7"];
130         fader = new Fader ( 6, 7, "gain", *group );
131         faders[0x06] = fader;
132         controls.push_back( fader );
133         group->add( *fader );
134
135         group = groups["strip_8"];
136         fader = new Fader ( 7, 8, "gain", *group );
137         faders[0x07] = fader;
138         controls.push_back( fader );
139         group->add( *fader );
140
141         group = groups["master"];
142         fader = new Fader ( 8, 1, "gain", *group );
143         faders[0x08] = fader;
144         controls.push_back( fader );
145         group->add( *fader );
146
147         group = groups["strip_1"];
148         pot = new Pot ( 16, 1, "vpot", *group );
149         pots[0x10] = pot;
150         controls.push_back( pot );
151         group->add( *pot );
152
153         group = groups["strip_2"];
154         pot = new Pot ( 17, 2, "vpot", *group );
155         pots[0x11] = pot;
156         controls.push_back( pot );
157         group->add( *pot );
158
159         group = groups["strip_3"];
160         pot = new Pot ( 18, 3, "vpot", *group );
161         pots[0x12] = pot;
162         controls.push_back( pot );
163         group->add( *pot );
164
165         group = groups["strip_4"];
166         pot = new Pot ( 19, 4, "vpot", *group );
167         pots[0x13] = pot;
168         controls.push_back( pot );
169         group->add( *pot );
170
171         group = groups["strip_5"];
172         pot = new Pot ( 20, 5, "vpot", *group );
173         pots[0x14] = pot;
174         controls.push_back( pot );
175         group->add( *pot );
176
177         group = groups["strip_6"];
178         pot = new Pot ( 21, 6, "vpot", *group );
179         pots[0x15] = pot;
180         controls.push_back( pot );
181         group->add( *pot );
182
183         group = groups["strip_7"];
184         pot = new Pot ( 22, 7, "vpot", *group );
185         pots[0x16] = pot;
186         controls.push_back( pot );
187         group->add( *pot );
188
189         group = groups["strip_8"];
190         pot = new Pot ( 23, 8, "vpot", *group );
191         pots[0x17] = pot;
192         controls.push_back( pot );
193         group->add( *pot );
194
195         group = groups["none"];
196         pot = new Jog ( 60, 1, "jog", *group );
197         pots[0x3c] = pot;
198         controls.push_back( pot );
199         controls_by_name["jog"] = pot;
200         group->add( *pot );
201
202         group = groups["none"];
203         pot = new Pot ( 46, 1, "external", *group );
204         pots[0x2e] = pot;
205         controls.push_back( pot );
206         controls_by_name["external"] = pot;
207         group->add( *pot );
208
209         group = groups["strip_1"];
210         button = new Button ( 0, 1, "recenable", *group );
211         buttons[0x00] = button;
212         controls.push_back( button );
213         group->add( *button );
214
215         group = groups["strip_2"];
216         button = new Button ( 1, 2, "recenable", *group );
217         buttons[0x01] = button;
218         controls.push_back( button );
219         group->add( *button );
220
221         group = groups["strip_3"];
222         button = new Button ( 2, 3, "recenable", *group );
223         buttons[0x02] = button;
224         controls.push_back( button );
225         group->add( *button );
226
227         group = groups["strip_4"];
228         button = new Button ( 3, 4, "recenable", *group );
229         buttons[0x03] = button;
230         controls.push_back( button );
231         group->add( *button );
232
233         group = groups["strip_5"];
234         button = new Button ( 4, 5, "recenable", *group );
235         buttons[0x04] = button;
236         controls.push_back( button );
237         group->add( *button );
238
239         group = groups["strip_6"];
240         button = new Button ( 5, 6, "recenable", *group );
241         buttons[0x05] = button;
242         controls.push_back( button );
243         group->add( *button );
244
245         group = groups["strip_7"];
246         button = new Button ( 6, 7, "recenable", *group );
247         buttons[0x06] = button;
248         controls.push_back( button );
249         group->add( *button );
250
251         group = groups["strip_8"];
252         button = new Button ( 7, 8, "recenable", *group );
253         buttons[0x07] = button;
254         controls.push_back( button );
255         group->add( *button );
256
257         group = groups["strip_1"];
258         button = new Button ( 8, 1, "solo", *group );
259         buttons[0x08] = button;
260         controls.push_back( button );
261         group->add( *button );
262
263         group = groups["strip_2"];
264         button = new Button ( 9, 2, "solo", *group );
265         buttons[0x09] = button;
266         controls.push_back( button );
267         group->add( *button );
268
269         group = groups["strip_3"];
270         button = new Button ( 10, 3, "solo", *group );
271         buttons[0x0a] = button;
272         controls.push_back( button );
273         group->add( *button );
274
275         group = groups["strip_4"];
276         button = new Button ( 11, 4, "solo", *group );
277         buttons[0x0b] = button;
278         controls.push_back( button );
279         group->add( *button );
280
281         group = groups["strip_5"];
282         button = new Button ( 12, 5, "solo", *group );
283         buttons[0x0c] = button;
284         controls.push_back( button );
285         group->add( *button );
286
287         group = groups["strip_6"];
288         button = new Button ( 13, 6, "solo", *group );
289         buttons[0x0d] = button;
290         controls.push_back( button );
291         group->add( *button );
292
293         group = groups["strip_7"];
294         button = new Button ( 14, 7, "solo", *group );
295         buttons[0x0e] = button;
296         controls.push_back( button );
297         group->add( *button );
298
299         group = groups["strip_8"];
300         button = new Button ( 15, 8, "solo", *group );
301         buttons[0x0f] = button;
302         controls.push_back( button );
303         group->add( *button );
304
305         group = groups["strip_1"];
306         button = new Button ( 16, 1, "mute", *group );
307         buttons[0x10] = button;
308         controls.push_back( button );
309         group->add( *button );
310
311         group = groups["strip_2"];
312         button = new Button ( 17, 2, "mute", *group );
313         buttons[0x11] = button;
314         controls.push_back( button );
315         group->add( *button );
316
317         group = groups["strip_3"];
318         button = new Button ( 18, 3, "mute", *group );
319         buttons[0x12] = button;
320         controls.push_back( button );
321         group->add( *button );
322
323         group = groups["strip_4"];
324         button = new Button ( 19, 4, "mute", *group );
325         buttons[0x13] = button;
326         controls.push_back( button );
327         group->add( *button );
328
329         group = groups["strip_5"];
330         button = new Button ( 20, 5, "mute", *group );
331         buttons[0x14] = button;
332         controls.push_back( button );
333         group->add( *button );
334
335         group = groups["strip_6"];
336         button = new Button ( 21, 6, "mute", *group );
337         buttons[0x15] = button;
338         controls.push_back( button );
339         group->add( *button );
340
341         group = groups["strip_7"];
342         button = new Button ( 22, 7, "mute", *group );
343         buttons[0x16] = button;
344         controls.push_back( button );
345         group->add( *button );
346
347         group = groups["strip_8"];
348         button = new Button ( 23, 8, "mute", *group );
349         buttons[0x17] = button;
350         controls.push_back( button );
351         group->add( *button );
352
353         group = groups["strip_1"];
354         button = new Button ( 24, 1, "select", *group );
355         buttons[0x18] = button;
356         controls.push_back( button );
357         group->add( *button );
358
359         group = groups["strip_2"];
360         button = new Button ( 25, 2, "select", *group );
361         buttons[0x19] = button;
362         controls.push_back( button );
363         group->add( *button );
364
365         group = groups["strip_3"];
366         button = new Button ( 26, 3, "select", *group );
367         buttons[0x1a] = button;
368         controls.push_back( button );
369         group->add( *button );
370
371         group = groups["strip_4"];
372         button = new Button ( 27, 4, "select", *group );
373         buttons[0x1b] = button;
374         controls.push_back( button );
375         group->add( *button );
376
377         group = groups["strip_5"];
378         button = new Button ( 28, 5, "select", *group );
379         buttons[0x1c] = button;
380         controls.push_back( button );
381         group->add( *button );
382
383         group = groups["strip_6"];
384         button = new Button ( 29, 6, "select", *group );
385         buttons[0x1d] = button;
386         controls.push_back( button );
387         group->add( *button );
388
389         group = groups["strip_7"];
390         button = new Button ( 30, 7, "select", *group );
391         buttons[0x1e] = button;
392         controls.push_back( button );
393         group->add( *button );
394
395         group = groups["strip_8"];
396         button = new Button ( 31, 8, "select", *group );
397         buttons[0x1f] = button;
398         controls.push_back( button );
399         group->add( *button );
400
401         group = groups["strip_1"];
402         button = new Button ( 32, 1, "vselect", *group );
403         buttons[0x20] = button;
404         controls.push_back( button );
405         group->add( *button );
406
407         group = groups["strip_2"];
408         button = new Button ( 33, 2, "vselect", *group );
409         buttons[0x21] = button;
410         controls.push_back( button );
411         group->add( *button );
412
413         group = groups["strip_3"];
414         button = new Button ( 34, 3, "vselect", *group );
415         buttons[0x22] = button;
416         controls.push_back( button );
417         group->add( *button );
418
419         group = groups["strip_4"];
420         button = new Button ( 35, 4, "vselect", *group );
421         buttons[0x23] = button;
422         controls.push_back( button );
423         group->add( *button );
424
425         group = groups["strip_5"];
426         button = new Button ( 36, 5, "vselect", *group );
427         buttons[0x24] = button;
428         controls.push_back( button );
429         group->add( *button );
430
431         group = groups["strip_6"];
432         button = new Button ( 37, 6, "vselect", *group );
433         buttons[0x25] = button;
434         controls.push_back( button );
435         group->add( *button );
436
437         group = groups["strip_7"];
438         button = new Button ( 38, 7, "vselect", *group );
439         buttons[0x26] = button;
440         controls.push_back( button );
441         group->add( *button );
442
443         group = groups["strip_8"];
444         button = new Button ( 39, 8, "vselect", *group );
445         buttons[0x27] = button;
446         controls.push_back( button );
447         group->add( *button );
448
449         group = groups["assignment"];
450         button = new Button ( 40, 1, "io", *group );
451         buttons[0x28] = button;
452         controls.push_back( button );
453         controls_by_name["io"] = button;
454         group->add( *button );
455
456         group = groups["assignment"];
457         button = new Button ( 41, 1, "sends", *group );
458         buttons[0x29] = button;
459         controls.push_back( button );
460         controls_by_name["sends"] = button;
461         group->add( *button );
462
463         group = groups["assignment"];
464         button = new Button ( 42, 1, "pan", *group );
465         buttons[0x2a] = button;
466         controls.push_back( button );
467         controls_by_name["pan"] = button;
468         group->add( *button );
469
470         group = groups["assignment"];
471         button = new Button ( 43, 1, "plugin", *group );
472         buttons[0x2b] = button;
473         controls.push_back( button );
474         controls_by_name["plugin"] = button;
475         group->add( *button );
476
477         group = groups["assignment"];
478         button = new Button ( 44, 1, "eq", *group );
479         buttons[0x2c] = button;
480         controls.push_back( button );
481         controls_by_name["eq"] = button;
482         group->add( *button );
483
484         group = groups["assignment"];
485         button = new Button ( 45, 1, "dyn", *group );
486         buttons[0x2d] = button;
487         controls.push_back( button );
488         controls_by_name["dyn"] = button;
489         group->add( *button );
490
491         group = groups["bank"];
492         button = new Button ( 46, 1, "left", *group );
493         buttons[0x2e] = button;
494         controls.push_back( button );
495         controls_by_name["left"] = button;
496         group->add( *button );
497
498         group = groups["bank"];
499         button = new Button ( 47, 1, "right", *group );
500         buttons[0x2f] = button;
501         controls.push_back( button );
502         controls_by_name["right"] = button;
503         group->add( *button );
504
505         group = groups["bank"];
506         button = new Button ( 48, 1, "channel_left", *group );
507         buttons[0x30] = button;
508         controls.push_back( button );
509         controls_by_name["channel_left"] = button;
510         group->add( *button );
511
512         group = groups["bank"];
513         button = new Button ( 49, 1, "channel_right", *group );
514         buttons[0x31] = button;
515         controls.push_back( button );
516         controls_by_name["channel_right"] = button;
517         group->add( *button );
518
519         group = groups["none"];
520         button = new Button ( 50, 1, "flip", *group );
521         buttons[0x32] = button;
522         controls.push_back( button );
523         controls_by_name["flip"] = button;
524         group->add( *button );
525
526         group = groups["none"];
527         button = new Button ( 51, 1, "edit", *group );
528         buttons[0x33] = button;
529         controls.push_back( button );
530         controls_by_name["edit"] = button;
531         group->add( *button );
532
533         group = groups["display"];
534         button = new Button ( 52, 1, "name_value", *group );
535         buttons[0x34] = button;
536         controls.push_back( button );
537         controls_by_name["name_value"] = button;
538         group->add( *button );
539
540         group = groups["display"];
541         button = new Button ( 53, 1, "timecode_beats", *group );
542         buttons[0x35] = button;
543         controls.push_back( button );
544         controls_by_name["timecode_beats"] = button;
545         group->add( *button );
546
547         group = groups["none"];
548         button = new Button ( 54, 1, "F1", *group );
549         buttons[0x36] = button;
550         controls.push_back( button );
551         controls_by_name["F1"] = button;
552         group->add( *button );
553
554         group = groups["none"];
555         button = new Button ( 55, 1, "F2", *group );
556         buttons[0x37] = button;
557         controls.push_back( button );
558         controls_by_name["F2"] = button;
559         group->add( *button );
560
561         group = groups["none"];
562         button = new Button ( 56, 1, "F3", *group );
563         buttons[0x38] = button;
564         controls.push_back( button );
565         controls_by_name["F3"] = button;
566         group->add( *button );
567
568         group = groups["none"];
569         button = new Button ( 57, 1, "F4", *group );
570         buttons[0x39] = button;
571         controls.push_back( button );
572         controls_by_name["F4"] = button;
573         group->add( *button );
574
575         group = groups["none"];
576         button = new Button ( 58, 1, "F5", *group );
577         buttons[0x3a] = button;
578         controls.push_back( button );
579         controls_by_name["F5"] = button;
580         group->add( *button );
581
582         group = groups["none"];
583         button = new Button ( 59, 1, "F6", *group );
584         buttons[0x3b] = button;
585         controls.push_back( button );
586         controls_by_name["F6"] = button;
587         group->add( *button );
588
589         group = groups["none"];
590         button = new Button ( 60, 1, "F7", *group );
591         buttons[0x3c] = button;
592         controls.push_back( button );
593         controls_by_name["F7"] = button;
594         group->add( *button );
595
596         group = groups["none"];
597         button = new Button ( 61, 1, "F8", *group );
598         buttons[0x3d] = button;
599         controls.push_back( button );
600         controls_by_name["F8"] = button;
601         group->add( *button );
602
603         group = groups["none"];
604         button = new Button ( 62, 1, "F9", *group );
605         buttons[0x3e] = button;
606         controls.push_back( button );
607         controls_by_name["F9"] = button;
608         group->add( *button );
609
610         group = groups["none"];
611         button = new Button ( 63, 1, "F10", *group );
612         buttons[0x3f] = button;
613         controls.push_back( button );
614         controls_by_name["F10"] = button;
615         group->add( *button );
616
617         group = groups["none"];
618         button = new Button ( 64, 1, "F11", *group );
619         buttons[0x40] = button;
620         controls.push_back( button );
621         controls_by_name["F11"] = button;
622         group->add( *button );
623
624         group = groups["none"];
625         button = new Button ( 65, 1, "F12", *group );
626         buttons[0x41] = button;
627         controls.push_back( button );
628         controls_by_name["F12"] = button;
629         group->add( *button );
630
631         group = groups["none"];
632         button = new Button ( 66, 1, "F13", *group );
633         buttons[0x42] = button;
634         controls.push_back( button );
635         controls_by_name["F13"] = button;
636         group->add( *button );
637
638         group = groups["none"];
639         button = new Button ( 67, 1, "F14", *group );
640         buttons[0x43] = button;
641         controls.push_back( button );
642         controls_by_name["F14"] = button;
643         group->add( *button );
644
645         group = groups["none"];
646         button = new Button ( 68, 1, "F15", *group );
647         buttons[0x44] = button;
648         controls.push_back( button );
649         controls_by_name["F15"] = button;
650         group->add( *button );
651
652         group = groups["none"];
653         button = new Button ( 69, 1, "F16", *group );
654         buttons[0x45] = button;
655         controls.push_back( button );
656         controls_by_name["F16"] = button;
657         group->add( *button );
658
659         group = groups["modifiers"];
660         button = new Button ( 70, 1, "shift", *group );
661         buttons[0x46] = button;
662         controls.push_back( button );
663         controls_by_name["shift"] = button;
664         group->add( *button );
665
666         group = groups["modifiers"];
667         button = new Button ( 71, 1, "option", *group );
668         buttons[0x47] = button;
669         controls.push_back( button );
670         controls_by_name["option"] = button;
671         group->add( *button );
672
673         group = groups["modifiers"];
674         button = new Button ( 72, 1, "control", *group );
675         buttons[0x48] = button;
676         controls.push_back( button );
677         controls_by_name["control"] = button;
678         group->add( *button );
679
680         group = groups["modifiers"];
681         button = new Button ( 73, 1, "cmd_alt", *group );
682         buttons[0x49] = button;
683         controls.push_back( button );
684         controls_by_name["cmd_alt"] = button;
685         group->add( *button );
686
687         group = groups["automation"];
688         button = new Button ( 74, 1, "on", *group );
689         buttons[0x4a] = button;
690         controls.push_back( button );
691         controls_by_name["on"] = button;
692         group->add( *button );
693
694         group = groups["automation"];
695         button = new Button ( 75, 1, "rec_ready", *group );
696         buttons[0x4b] = button;
697         controls.push_back( button );
698         controls_by_name["rec_ready"] = button;
699         group->add( *button );
700
701         group = groups["functions"];
702         button = new Button ( 76, 1, "undo", *group );
703         buttons[0x4c] = button;
704         controls.push_back( button );
705         controls_by_name["undo"] = button;
706         group->add( *button );
707
708         group = groups["automation"];
709         button = new Button ( 77, 1, "snapshot", *group );
710         buttons[0x4d] = button;
711         controls.push_back( button );
712         controls_by_name["snapshot"] = button;
713         group->add( *button );
714
715         group = groups["automation"];
716         button = new Button ( 78, 1, "touch", *group );
717         buttons[0x4e] = button;
718         controls.push_back( button );
719         controls_by_name["touch"] = button;
720         group->add( *button );
721
722         group = groups["functions"];
723         button = new Button ( 79, 1, "redo", *group );
724         buttons[0x4f] = button;
725         controls.push_back( button );
726         controls_by_name["redo"] = button;
727         group->add( *button );
728
729         group = groups["functions"];
730         button = new Button ( 80, 1, "marker", *group );
731         buttons[0x50] = button;
732         controls.push_back( button );
733         controls_by_name["marker"] = button;
734         group->add( *button );
735
736         group = groups["functions"];
737         button = new Button ( 81, 1, "enter", *group );
738         buttons[0x51] = button;
739         controls.push_back( button );
740         controls_by_name["enter"] = button;
741         group->add( *button );
742
743         group = groups["functions"];
744         button = new Button ( 82, 1, "cancel", *group );
745         buttons[0x52] = button;
746         controls.push_back( button );
747         controls_by_name["cancel"] = button;
748         group->add( *button );
749
750         group = groups["functions"];
751         button = new Button ( 83, 1, "mixer", *group );
752         buttons[0x53] = button;
753         controls.push_back( button );
754         controls_by_name["mixer"] = button;
755         group->add( *button );
756
757         group = groups["transport"];
758         button = new Button ( 84, 1, "frm_left", *group );
759         buttons[0x54] = button;
760         controls.push_back( button );
761         controls_by_name["frm_left"] = button;
762         group->add( *button );
763
764         group = groups["transport"];
765         button = new Button ( 85, 1, "frm_right", *group );
766         buttons[0x55] = button;
767         controls.push_back( button );
768         controls_by_name["frm_right"] = button;
769         group->add( *button );
770
771         group = groups["transport"];
772         button = new Button ( 86, 1, "loop", *group );
773         buttons[0x56] = button;
774         controls.push_back( button );
775         controls_by_name["loop"] = button;
776         group->add( *button );
777
778         group = groups["transport"];
779         button = new Button ( 87, 1, "punch_in", *group );
780         buttons[0x57] = button;
781         controls.push_back( button );
782         controls_by_name["punch_in"] = button;
783         group->add( *button );
784
785         group = groups["transport"];
786         button = new Button ( 88, 1, "punch_out", *group );
787         buttons[0x58] = button;
788         controls.push_back( button );
789         controls_by_name["punch_out"] = button;
790         group->add( *button );
791
792         group = groups["transport"];
793         button = new Button ( 89, 1, "home", *group );
794         buttons[0x59] = button;
795         controls.push_back( button );
796         controls_by_name["home"] = button;
797         group->add( *button );
798
799         group = groups["transport"];
800         button = new Button ( 90, 1, "end", *group );
801         buttons[0x5a] = button;
802         controls.push_back( button );
803         controls_by_name["end"] = button;
804         group->add( *button );
805
806         group = groups["transport"];
807         button = new Button ( 91, 1, "rewind", *group );
808         buttons[0x5b] = button;
809         controls.push_back( button );
810         controls_by_name["rewind"] = button;
811         group->add( *button );
812
813         group = groups["transport"];
814         button = new Button ( 92, 1, "ffwd", *group );
815         buttons[0x5c] = button;
816         controls.push_back( button );
817         controls_by_name["ffwd"] = button;
818         group->add( *button );
819
820         group = groups["transport"];
821         button = new Button ( 93, 1, "stop", *group );
822         buttons[0x5d] = button;
823         controls.push_back( button );
824         controls_by_name["stop"] = button;
825         group->add( *button );
826
827         group = groups["transport"];
828         button = new Button ( 94, 1, "play", *group );
829         buttons[0x5e] = button;
830         controls.push_back( button );
831         controls_by_name["play"] = button;
832         group->add( *button );
833
834         group = groups["transport"];
835         button = new Button ( 95, 1, "record", *group );
836         buttons[0x5f] = button;
837         controls.push_back( button );
838         controls_by_name["record"] = button;
839         group->add( *button );
840
841         group = groups["cursor"];
842         button = new Button ( 96, 1, "cursor_up", *group );
843         buttons[0x60] = button;
844         controls.push_back( button );
845         controls_by_name["cursor_up"] = button;
846         group->add( *button );
847
848         group = groups["cursor"];
849         button = new Button ( 97, 1, "cursor_down", *group );
850         buttons[0x61] = button;
851         controls.push_back( button );
852         controls_by_name["cursor_down"] = button;
853         group->add( *button );
854
855         group = groups["cursor"];
856         button = new Button ( 98, 1, "cursor_left", *group );
857         buttons[0x62] = button;
858         controls.push_back( button );
859         controls_by_name["cursor_left"] = button;
860         group->add( *button );
861
862         group = groups["cursor"];
863         button = new Button ( 99, 1, "cursor_right", *group );
864         buttons[0x63] = button;
865         controls.push_back( button );
866         controls_by_name["cursor_right"] = button;
867         group->add( *button );
868
869         group = groups["none"];
870         button = new Button ( 100, 1, "zoom", *group );
871         buttons[0x64] = button;
872         controls.push_back( button );
873         controls_by_name["zoom"] = button;
874         group->add( *button );
875
876         group = groups["none"];
877         button = new Button ( 101, 1, "scrub", *group );
878         buttons[0x65] = button;
879         controls.push_back( button );
880         controls_by_name["scrub"] = button;
881         group->add( *button );
882
883         group = groups["user"];
884         button = new Button ( 102, 1, "user_a", *group );
885         buttons[0x66] = button;
886         controls.push_back( button );
887         controls_by_name["user_a"] = button;
888         group->add( *button );
889
890         group = groups["user"];
891         button = new Button ( 103, 1, "user_b", *group );
892         buttons[0x67] = button;
893         controls.push_back( button );
894         controls_by_name["user_b"] = button;
895         group->add( *button );
896
897         group = groups["strip_1"];
898         button = new Button ( 104, 1, "fader_touch", *group );
899         buttons[0x68] = button;
900         controls.push_back( button );
901         group->add( *button );
902
903         group = groups["strip_2"];
904         button = new Button ( 105, 2, "fader_touch", *group );
905         buttons[0x69] = button;
906         controls.push_back( button );
907         group->add( *button );
908
909         group = groups["strip_3"];
910         button = new Button ( 106, 3, "fader_touch", *group );
911         buttons[0x6a] = button;
912         controls.push_back( button );
913         group->add( *button );
914
915         group = groups["strip_4"];
916         button = new Button ( 107, 4, "fader_touch", *group );
917         buttons[0x6b] = button;
918         controls.push_back( button );
919         group->add( *button );
920
921         group = groups["strip_5"];
922         button = new Button ( 108, 5, "fader_touch", *group );
923         buttons[0x6c] = button;
924         controls.push_back( button );
925         group->add( *button );
926
927         group = groups["strip_6"];
928         button = new Button ( 109, 6, "fader_touch", *group );
929         buttons[0x6d] = button;
930         controls.push_back( button );
931         group->add( *button );
932
933         group = groups["strip_7"];
934         button = new Button ( 110, 7, "fader_touch", *group );
935         buttons[0x6e] = button;
936         controls.push_back( button );
937         group->add( *button );
938
939         group = groups["strip_8"];
940         button = new Button ( 111, 8, "fader_touch", *group );
941         buttons[0x6f] = button;
942         controls.push_back( button );
943         group->add( *button );
944
945         group = groups["master"];
946         button = new Button ( 112, 1, "fader_touch", *group );
947         buttons[0x70] = button;
948         controls.push_back( button );
949         group->add( *button );
950
951         group = groups["none"];
952         led = new Led ( 113, 1, "timecode", *group );
953         leds[0x71] = led;
954         controls.push_back( led );
955         controls_by_name["timecode"] = led;
956         group->add( *led );
957
958         group = groups["none"];
959         led = new Led ( 114, 1, "beats", *group );
960         leds[0x72] = led;
961         controls.push_back( led );
962         controls_by_name["beats"] = led;
963         group->add( *led );
964
965         group = groups["none"];
966         led = new Led ( 115, 1, "solo", *group );
967         leds[0x73] = led;
968         controls.push_back( led );
969         controls_by_name["solo"] = led;
970         group->add( *led );
971
972         group = groups["none"];
973         led = new Led ( 118, 1, "relay_click", *group );
974         leds[0x76] = led;
975         controls.push_back( led );
976         controls_by_name["relay_click"] = led;
977         group->add( *led );
978
979 }
980
981 void Mackie::MackieSurface::handle_button( MackieButtonHandler & mbh, ButtonState bs, Button & button )
982 {
983         if ( bs != press && bs != release )
984         {
985                 mbh.update_led( button, none );
986                 return;
987         }
988         
989         LedState ls;
990         switch ( button.id() )
991         {
992
993                 case 0x9028: // io
994                         switch ( bs ) {
995                                 case press: ls = mbh.io_press( button ); break;
996                                 case release: ls = mbh.io_release( button ); break;
997                                 case neither: break;
998                         }
999                         break;
1000
1001                 case 0x9029: // sends
1002                         switch ( bs ) {
1003                                 case press: ls = mbh.sends_press( button ); break;
1004                                 case release: ls = mbh.sends_release( button ); break;
1005                                 case neither: break;
1006                         }
1007                         break;
1008
1009                 case 0x902a: // pan
1010                         switch ( bs ) {
1011                                 case press: ls = mbh.pan_press( button ); break;
1012                                 case release: ls = mbh.pan_release( button ); break;
1013                                 case neither: break;
1014                         }
1015                         break;
1016
1017                 case 0x902b: // plugin
1018                         switch ( bs ) {
1019                                 case press: ls = mbh.plugin_press( button ); break;
1020                                 case release: ls = mbh.plugin_release( button ); break;
1021                                 case neither: break;
1022                         }
1023                         break;
1024
1025                 case 0x902c: // eq
1026                         switch ( bs ) {
1027                                 case press: ls = mbh.eq_press( button ); break;
1028                                 case release: ls = mbh.eq_release( button ); break;
1029                                 case neither: break;
1030                         }
1031                         break;
1032
1033                 case 0x902d: // dyn
1034                         switch ( bs ) {
1035                                 case press: ls = mbh.dyn_press( button ); break;
1036                                 case release: ls = mbh.dyn_release( button ); break;
1037                                 case neither: break;
1038                         }
1039                         break;
1040
1041                 case 0x902e: // left
1042                         switch ( bs ) {
1043                                 case press: ls = mbh.left_press( button ); break;
1044                                 case release: ls = mbh.left_release( button ); break;
1045                                 case neither: break;
1046                         }
1047                         break;
1048
1049                 case 0x902f: // right
1050                         switch ( bs ) {
1051                                 case press: ls = mbh.right_press( button ); break;
1052                                 case release: ls = mbh.right_release( button ); break;
1053                                 case neither: break;
1054                         }
1055                         break;
1056
1057                 case 0x9030: // channel_left
1058                         switch ( bs ) {
1059                                 case press: ls = mbh.channel_left_press( button ); break;
1060                                 case release: ls = mbh.channel_left_release( button ); break;
1061                                 case neither: break;
1062                         }
1063                         break;
1064
1065                 case 0x9031: // channel_right
1066                         switch ( bs ) {
1067                                 case press: ls = mbh.channel_right_press( button ); break;
1068                                 case release: ls = mbh.channel_right_release( button ); break;
1069                                 case neither: break;
1070                         }
1071                         break;
1072
1073                 case 0x9032: // flip
1074                         switch ( bs ) {
1075                                 case press: ls = mbh.flip_press( button ); break;
1076                                 case release: ls = mbh.flip_release( button ); break;
1077                                 case neither: break;
1078                         }
1079                         break;
1080
1081                 case 0x9033: // edit
1082                         switch ( bs ) {
1083                                 case press: ls = mbh.edit_press( button ); break;
1084                                 case release: ls = mbh.edit_release( button ); break;
1085                                 case neither: break;
1086                         }
1087                         break;
1088
1089                 case 0x9034: // name_value
1090                         switch ( bs ) {
1091                                 case press: ls = mbh.name_value_press( button ); break;
1092                                 case release: ls = mbh.name_value_release( button ); break;
1093                                 case neither: break;
1094                         }
1095                         break;
1096
1097                 case 0x9035: // timecode_beats
1098                         switch ( bs ) {
1099                                 case press: ls = mbh.timecode_beats_press( button ); break;
1100                                 case release: ls = mbh.timecode_beats_release( button ); break;
1101                                 case neither: break;
1102                         }
1103                         break;
1104
1105                 case 0x9036: // F1
1106                         switch ( bs ) {
1107                                 case press: ls = mbh.F1_press( button ); break;
1108                                 case release: ls = mbh.F1_release( button ); break;
1109                                 case neither: break;
1110                         }
1111                         break;
1112
1113                 case 0x9037: // F2
1114                         switch ( bs ) {
1115                                 case press: ls = mbh.F2_press( button ); break;
1116                                 case release: ls = mbh.F2_release( button ); break;
1117                                 case neither: break;
1118                         }
1119                         break;
1120
1121                 case 0x9038: // F3
1122                         switch ( bs ) {
1123                                 case press: ls = mbh.F3_press( button ); break;
1124                                 case release: ls = mbh.F3_release( button ); break;
1125                                 case neither: break;
1126                         }
1127                         break;
1128
1129                 case 0x9039: // F4
1130                         switch ( bs ) {
1131                                 case press: ls = mbh.F4_press( button ); break;
1132                                 case release: ls = mbh.F4_release( button ); break;
1133                                 case neither: break;
1134                         }
1135                         break;
1136
1137                 case 0x903a: // F5
1138                         switch ( bs ) {
1139                                 case press: ls = mbh.F5_press( button ); break;
1140                                 case release: ls = mbh.F5_release( button ); break;
1141                                 case neither: break;
1142                         }
1143                         break;
1144
1145                 case 0x903b: // F6
1146                         switch ( bs ) {
1147                                 case press: ls = mbh.F6_press( button ); break;
1148                                 case release: ls = mbh.F6_release( button ); break;
1149                                 case neither: break;
1150                         }
1151                         break;
1152
1153                 case 0x903c: // F7
1154                         switch ( bs ) {
1155                                 case press: ls = mbh.F7_press( button ); break;
1156                                 case release: ls = mbh.F7_release( button ); break;
1157                                 case neither: break;
1158                         }
1159                         break;
1160
1161                 case 0x903d: // F8
1162                         switch ( bs ) {
1163                                 case press: ls = mbh.F8_press( button ); break;
1164                                 case release: ls = mbh.F8_release( button ); break;
1165                                 case neither: break;
1166                         }
1167                         break;
1168
1169                 case 0x903e: // F9
1170                         switch ( bs ) {
1171                                 case press: ls = mbh.F9_press( button ); break;
1172                                 case release: ls = mbh.F9_release( button ); break;
1173                                 case neither: break;
1174                         }
1175                         break;
1176
1177                 case 0x903f: // F10
1178                         switch ( bs ) {
1179                                 case press: ls = mbh.F10_press( button ); break;
1180                                 case release: ls = mbh.F10_release( button ); break;
1181                                 case neither: break;
1182                         }
1183                         break;
1184
1185                 case 0x9040: // F11
1186                         switch ( bs ) {
1187                                 case press: ls = mbh.F11_press( button ); break;
1188                                 case release: ls = mbh.F11_release( button ); break;
1189                                 case neither: break;
1190                         }
1191                         break;
1192
1193                 case 0x9041: // F12
1194                         switch ( bs ) {
1195                                 case press: ls = mbh.F12_press( button ); break;
1196                                 case release: ls = mbh.F12_release( button ); break;
1197                                 case neither: break;
1198                         }
1199                         break;
1200
1201                 case 0x9042: // F13
1202                         switch ( bs ) {
1203                                 case press: ls = mbh.F13_press( button ); break;
1204                                 case release: ls = mbh.F13_release( button ); break;
1205                                 case neither: break;
1206                         }
1207                         break;
1208
1209                 case 0x9043: // F14
1210                         switch ( bs ) {
1211                                 case press: ls = mbh.F14_press( button ); break;
1212                                 case release: ls = mbh.F14_release( button ); break;
1213                                 case neither: break;
1214                         }
1215                         break;
1216
1217                 case 0x9044: // F15
1218                         switch ( bs ) {
1219                                 case press: ls = mbh.F15_press( button ); break;
1220                                 case release: ls = mbh.F15_release( button ); break;
1221                                 case neither: break;
1222                         }
1223                         break;
1224
1225                 case 0x9045: // F16
1226                         switch ( bs ) {
1227                                 case press: ls = mbh.F16_press( button ); break;
1228                                 case release: ls = mbh.F16_release( button ); break;
1229                                 case neither: break;
1230                         }
1231                         break;
1232
1233                 case 0x9046: // shift
1234                         switch ( bs ) {
1235                                 case press: ls = mbh.shift_press( button ); break;
1236                                 case release: ls = mbh.shift_release( button ); break;
1237                                 case neither: break;
1238                         }
1239                         break;
1240
1241                 case 0x9047: // option
1242                         switch ( bs ) {
1243                                 case press: ls = mbh.option_press( button ); break;
1244                                 case release: ls = mbh.option_release( button ); break;
1245                                 case neither: break;
1246                         }
1247                         break;
1248
1249                 case 0x9048: // control
1250                         switch ( bs ) {
1251                                 case press: ls = mbh.control_press( button ); break;
1252                                 case release: ls = mbh.control_release( button ); break;
1253                                 case neither: break;
1254                         }
1255                         break;
1256
1257                 case 0x9049: // cmd_alt
1258                         switch ( bs ) {
1259                                 case press: ls = mbh.cmd_alt_press( button ); break;
1260                                 case release: ls = mbh.cmd_alt_release( button ); break;
1261                                 case neither: break;
1262                         }
1263                         break;
1264
1265                 case 0x904a: // on
1266                         switch ( bs ) {
1267                                 case press: ls = mbh.on_press( button ); break;
1268                                 case release: ls = mbh.on_release( button ); break;
1269                                 case neither: break;
1270                         }
1271                         break;
1272
1273                 case 0x904b: // rec_ready
1274                         switch ( bs ) {
1275                                 case press: ls = mbh.rec_ready_press( button ); break;
1276                                 case release: ls = mbh.rec_ready_release( button ); break;
1277                                 case neither: break;
1278                         }
1279                         break;
1280
1281                 case 0x904c: // undo
1282                         switch ( bs ) {
1283                                 case press: ls = mbh.undo_press( button ); break;
1284                                 case release: ls = mbh.undo_release( button ); break;
1285                                 case neither: break;
1286                         }
1287                         break;
1288
1289                 case 0x904d: // snapshot
1290                         switch ( bs ) {
1291                                 case press: ls = mbh.snapshot_press( button ); break;
1292                                 case release: ls = mbh.snapshot_release( button ); break;
1293                                 case neither: break;
1294                         }
1295                         break;
1296
1297                 case 0x904e: // touch
1298                         switch ( bs ) {
1299                                 case press: ls = mbh.touch_press( button ); break;
1300                                 case release: ls = mbh.touch_release( button ); break;
1301                                 case neither: break;
1302                         }
1303                         break;
1304
1305                 case 0x904f: // redo
1306                         switch ( bs ) {
1307                                 case press: ls = mbh.redo_press( button ); break;
1308                                 case release: ls = mbh.redo_release( button ); break;
1309                                 case neither: break;
1310                         }
1311                         break;
1312
1313                 case 0x9050: // marker
1314                         switch ( bs ) {
1315                                 case press: ls = mbh.marker_press( button ); break;
1316                                 case release: ls = mbh.marker_release( button ); break;
1317                                 case neither: break;
1318                         }
1319                         break;
1320
1321                 case 0x9051: // enter
1322                         switch ( bs ) {
1323                                 case press: ls = mbh.enter_press( button ); break;
1324                                 case release: ls = mbh.enter_release( button ); break;
1325                                 case neither: break;
1326                         }
1327                         break;
1328
1329                 case 0x9052: // cancel
1330                         switch ( bs ) {
1331                                 case press: ls = mbh.cancel_press( button ); break;
1332                                 case release: ls = mbh.cancel_release( button ); break;
1333                                 case neither: break;
1334                         }
1335                         break;
1336
1337                 case 0x9053: // mixer
1338                         switch ( bs ) {
1339                                 case press: ls = mbh.mixer_press( button ); break;
1340                                 case release: ls = mbh.mixer_release( button ); break;
1341                                 case neither: break;
1342                         }
1343                         break;
1344
1345                 case 0x9054: // frm_left
1346                         switch ( bs ) {
1347                                 case press: ls = mbh.frm_left_press( button ); break;
1348                                 case release: ls = mbh.frm_left_release( button ); break;
1349                                 case neither: break;
1350                         }
1351                         break;
1352
1353                 case 0x9055: // frm_right
1354                         switch ( bs ) {
1355                                 case press: ls = mbh.frm_right_press( button ); break;
1356                                 case release: ls = mbh.frm_right_release( button ); break;
1357                                 case neither: break;
1358                         }
1359                         break;
1360
1361                 case 0x9056: // loop
1362                         switch ( bs ) {
1363                                 case press: ls = mbh.loop_press( button ); break;
1364                                 case release: ls = mbh.loop_release( button ); break;
1365                                 case neither: break;
1366                         }
1367                         break;
1368
1369                 case 0x9057: // punch_in
1370                         switch ( bs ) {
1371                                 case press: ls = mbh.punch_in_press( button ); break;
1372                                 case release: ls = mbh.punch_in_release( button ); break;
1373                                 case neither: break;
1374                         }
1375                         break;
1376
1377                 case 0x9058: // punch_out
1378                         switch ( bs ) {
1379                                 case press: ls = mbh.punch_out_press( button ); break;
1380                                 case release: ls = mbh.punch_out_release( button ); break;
1381                                 case neither: break;
1382                         }
1383                         break;
1384
1385                 case 0x9059: // home
1386                         switch ( bs ) {
1387                                 case press: ls = mbh.home_press( button ); break;
1388                                 case release: ls = mbh.home_release( button ); break;
1389                                 case neither: break;
1390                         }
1391                         break;
1392
1393                 case 0x905a: // end
1394                         switch ( bs ) {
1395                                 case press: ls = mbh.end_press( button ); break;
1396                                 case release: ls = mbh.end_release( button ); break;
1397                                 case neither: break;
1398                         }
1399                         break;
1400
1401                 case 0x905b: // rewind
1402                         switch ( bs ) {
1403                                 case press: ls = mbh.rewind_press( button ); break;
1404                                 case release: ls = mbh.rewind_release( button ); break;
1405                                 case neither: break;
1406                         }
1407                         break;
1408
1409                 case 0x905c: // ffwd
1410                         switch ( bs ) {
1411                                 case press: ls = mbh.ffwd_press( button ); break;
1412                                 case release: ls = mbh.ffwd_release( button ); break;
1413                                 case neither: break;
1414                         }
1415                         break;
1416
1417                 case 0x905d: // stop
1418                         switch ( bs ) {
1419                                 case press: ls = mbh.stop_press( button ); break;
1420                                 case release: ls = mbh.stop_release( button ); break;
1421                                 case neither: break;
1422                         }
1423                         break;
1424
1425                 case 0x905e: // play
1426                         switch ( bs ) {
1427                                 case press: ls = mbh.play_press( button ); break;
1428                                 case release: ls = mbh.play_release( button ); break;
1429                                 case neither: break;
1430                         }
1431                         break;
1432
1433                 case 0x905f: // record
1434                         switch ( bs ) {
1435                                 case press: ls = mbh.record_press( button ); break;
1436                                 case release: ls = mbh.record_release( button ); break;
1437                                 case neither: break;
1438                         }
1439                         break;
1440
1441                 case 0x9060: // cursor_up
1442                         switch ( bs ) {
1443                                 case press: ls = mbh.cursor_up_press( button ); break;
1444                                 case release: ls = mbh.cursor_up_release( button ); break;
1445                                 case neither: break;
1446                         }
1447                         break;
1448
1449                 case 0x9061: // cursor_down
1450                         switch ( bs ) {
1451                                 case press: ls = mbh.cursor_down_press( button ); break;
1452                                 case release: ls = mbh.cursor_down_release( button ); break;
1453                                 case neither: break;
1454                         }
1455                         break;
1456
1457                 case 0x9062: // cursor_left
1458                         switch ( bs ) {
1459                                 case press: ls = mbh.cursor_left_press( button ); break;
1460                                 case release: ls = mbh.cursor_left_release( button ); break;
1461                                 case neither: break;
1462                         }
1463                         break;
1464
1465                 case 0x9063: // cursor_right
1466                         switch ( bs ) {
1467                                 case press: ls = mbh.cursor_right_press( button ); break;
1468                                 case release: ls = mbh.cursor_right_release( button ); break;
1469                                 case neither: break;
1470                         }
1471                         break;
1472
1473                 case 0x9064: // zoom
1474                         switch ( bs ) {
1475                                 case press: ls = mbh.zoom_press( button ); break;
1476                                 case release: ls = mbh.zoom_release( button ); break;
1477                                 case neither: break;
1478                         }
1479                         break;
1480
1481                 case 0x9065: // scrub
1482                         switch ( bs ) {
1483                                 case press: ls = mbh.scrub_press( button ); break;
1484                                 case release: ls = mbh.scrub_release( button ); break;
1485                                 case neither: break;
1486                         }
1487                         break;
1488
1489                 case 0x9066: // user_a
1490                         switch ( bs ) {
1491                                 case press: ls = mbh.user_a_press( button ); break;
1492                                 case release: ls = mbh.user_a_release( button ); break;
1493                                 case neither: break;
1494                         }
1495                         break;
1496
1497                 case 0x9067: // user_b
1498                         switch ( bs ) {
1499                                 case press: ls = mbh.user_b_press( button ); break;
1500                                 case release: ls = mbh.user_b_release( button ); break;
1501                                 case neither: break;
1502                         }
1503                         break;
1504
1505         }
1506         mbh.update_led( button, ls );
1507 }