diff options
Diffstat (limited to 'libs/surfaces/maschine2/m2controls.h')
-rw-r--r-- | libs/surfaces/maschine2/m2controls.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/libs/surfaces/maschine2/m2controls.h b/libs/surfaces/maschine2/m2controls.h new file mode 100644 index 0000000000..a19e074d8d --- /dev/null +++ b/libs/surfaces/maschine2/m2controls.h @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2016 Robin Gareus <robin@gareus.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _ardour_surfaces_m2controls_h_ +#define _ardour_surfaces_m2controls_h_ + +#include <map> + +#include "m2_button.h" +#include "m2_encoder.h" +#include "m2_pad.h" + +namespace ArdourSurface { + +/** Abstraction for various variants: + * - NI Maschine Mikro + * - NI Maschine + * - NI Maschine Studio + */ + +class M2Contols +{ + public: + M2Contols () {} + virtual ~M2Contols () {} + + typedef enum { + ModNone = 0, + ModShift, + } Modifier; + + typedef enum { + /* Transport */ + BtnRestart, + BtnStepLeft, + BtnStepRight, + BtnGrid, + BtnPlay, + BtnRec, + BtnErase, + BtnShift, + + /* modes */ + BtnScene, + BtnPattern, + BtnPadMode, + BtnNavigate, // aka. "view" on Mikro + BtnDuplicate, + BtnSelect, + BtnSolo, + BtnMute, + + /* global */ +#if 0 + BtnArrange, // Studio only + BtnMix, // Studio only +#endif + + BtnControl, // Studio: "Channel" + BtnStep, // Studio: "Plug-In" + BtnBrowse, + BtnSampling, + BtnSelLeft, + BtnSelRight, + BtnAll, + BtnAuto, + + /* master */ + BtnVolume, + BtnSwing, + BtnTempo, + BtnNavLeft, + BtnNavRight, + BtnEnter, + BtnNoteRepeat, // Tap + BtnWheel, // Encoder Push + + /* Selectors above display */ + BtnTop0, BtnTop1, BtnTop2, BtnTop3, // Mikro F1, F2, F3 + BtnTop4, BtnTop5, BtnTop6, BtnTop7, + + /* Maschine & Studio "Groups" */ + BtnGroupA, BtnGroupB, BtnGroupC, BtnGroupD, + BtnGroupE, BtnGroupF, BtnGroupG, BtnGroupH, + +#if 1 // Studio only -- Edit + BtnCopy, + BtnPaste, + BtnNote, + BtnNudge, + BtnUndo, + BtnRedo, + BtnQuantize, + BtnClear, + + BtnIn1, BtnIn2, BtnIn3, BtnIn4, + BtnMst, BtnGrp, BtnSnd, BtnCue, +#endif + } PhysicalButtonId; + + typedef enum { + Play, + Rec, + Loop, + Metronom, + GotoStart, + GotoEnd, + JumpBackward, + JumpForward, + FastRewind, + FastForward, + Grid, + Delete, + Undo, Redo, + Save, + EncoderWheel, // multi-purpose + MasterVolume, + MasterTempo, + Solo, Mute, + Panic + } SemanticButtonId; + + typedef std::map <PhysicalButtonId, M2ButtonInterface*> PhysicalMap; + typedef std::map <SemanticButtonId, M2ButtonInterface*> SematicMap; + + virtual M2ButtonInterface* button (PhysicalButtonId id, Modifier m) { + if (id == BtnShift) { + return &_shift; + } + return &_dummy_button; + } + + virtual M2ButtonInterface* button (SemanticButtonId id) { + return &_dummy_button; + } + + virtual M2EncoderInterface* encoder (unsigned int id) { + return &_dummy_encoder; + } + + virtual M2PadInterface* pad (unsigned int id) { + return &_dummy_pad; + } + + protected: + M2ButtonInterface _dummy_button; + M2EncoderInterface _dummy_encoder; + M2PadInterface _dummy_pad; + + M2ToggleHoldButton _shift; +}; + +} /* namespace */ +#endif /* _ardour_surfaces_m2controls_h_*/ |