Deluge Firmware 1.3.0
Build date: 2025.06.05
Loading...
Searching...
No Matches
automation_view.h
1/*
2 * Copyright (c) 2023 Sean Ditny
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#pragma once
19
20#include "definitions_cxx.hpp"
21#include "gui/views/clip_view.h"
22#include "hid/button.h"
23#include "model/clip/instrument_clip_minder.h"
24#include "model/mod_controllable/mod_controllable_audio.h"
25#include "model/note/note_row.h"
26#include "modulation/automation/copied_param_automation.h"
27
28class Action;
29class CopiedNoteRow;
30class Drum;
31class Editor;
32class AudioClip;
33class Instrument;
34class InstrumentClip;
35class MidiInstrument;
36class ModControllable;
41class Note;
42class NoteRow;
43class ParamCollection;
45class ParamNode;
46class PatchCableSet;
47class Sound;
48class SoundDrum;
49
50class AutomationView final : public ClipView, public InstrumentClipMinder {
51public:
52 AutomationView();
53 bool opened() override;
54 void initializeView();
55 void openedInBackground();
56 void focusRegained() override;
57
58 // called by ui_timer_manager - might need to revise this routine for automation clip view since it references notes
59 void graphicsRoutine() override;
60
61 // ui
62 UIType getUIType() override { return UIType::AUTOMATION; }
63 UIType getUIContextType() override;
64 UIModControllableContext getUIModControllableContext() override {
65 return getUIContextType() == UIType::ARRANGER ? UIModControllableContext::SONG : UIModControllableContext::CLIP;
66 }
67
68 // used to identify the UI as a clip UI or not.
69 ClipMinder* toClipMinder() override { return getUIContextType() == UIType::ARRANGER ? nullptr : this; }
70
71 void setAutomationParamType();
72
73 bool onAutomationOverview();
74 bool inAutomationEditor();
75 bool inNoteEditor();
76
77 // rendering
78 bool possiblyRefreshAutomationEditorGrid(Clip* clip, deluge::modulation::params::Kind paramKind, int32_t paramID);
79 bool renderMainPads(uint32_t whichRows, RGB image[][kDisplayWidth + kSideBarWidth],
80 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], bool drawUndefinedArea = true) override;
81 bool renderSidebar(uint32_t whichRows, RGB image[][kDisplayWidth + kSideBarWidth],
82 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth]) override;
83 void renderDisplay(int32_t knobPosLeft = kNoSelection, int32_t knobPosRight = kNoSelection,
84 bool modEncoderAction = false);
85 void displayAutomation(bool padSelected = false, bool updateDisplay = true);
86
87 void renderOLED(deluge::hid::display::oled_canvas::Canvas& canvas) override {
88 InstrumentClipMinder::renderOLED(canvas);
89 }
90
91 // button action
92 ActionResult buttonAction(deluge::hid::Button b, bool on, bool inCardRoutine) override;
93
94 // pad action
95 ActionResult padAction(int32_t x, int32_t y, int32_t velocity) override;
96
97 // horizontal encoder action
98 ActionResult horizontalEncoderAction(int32_t offset) override;
99 uint32_t getMaxLength() override;
100 uint32_t getMaxZoom() override;
101 [[nodiscard]] int32_t getNavSysId() const override;
102 int32_t navSysId;
103
104 // vertical encoder action
105 ActionResult verticalEncoderAction(int32_t offset, bool inCardRoutine) override;
106 void potentiallyVerticalScrollToSelectedDrum(InstrumentClip* clip, Output* output);
107
108 // mod encoder action
109 void modEncoderAction(int32_t whichModEncoder, int32_t offset) override;
110 void modEncoderButtonAction(uint8_t whichModEncoder, bool on) override;
111 CopiedParamAutomation copiedParamAutomation;
112
113 // Select encoder action
114 void selectEncoderAction(int8_t offset) override;
115 void getLastSelectedParamShortcut(Clip* clip); // public so menu can access it
116 void getLastSelectedParamArrayPosition(Clip* clip); // public so menu can access it
117 bool multiPadPressSelected; // public so menu can access it
118
119 // called by melodic_instrument.cpp or kit.cpp
120 void noteRowChanged(InstrumentClip* clip, NoteRow* noteRow) override;
121
122 // called by playback_handler.cpp
123 void notifyPlaybackBegun() override;
124
125 bool interpolation;
126 bool interpolationBefore;
127 bool interpolationAfter;
128
129 // public to midi follow can access it
130 ModelStackWithAutoParam*
131 getModelStackWithParamForClip(ModelStackWithTimelineCounter* modelStack, Clip* clip,
133 deluge::modulation::params::Kind paramKind = deluge::modulation::params::Kind::NONE);
134
135 // public so instrument clip view can access it
136 void initParameterSelection(bool updateDisplay = true);
137 bool onArrangerView;
138
139 // public so uiTimerManager can access it
140 void blinkInterpolationShortcut();
141 void blinkPadSelectionShortcut();
142
143 // public so menu can access it
144 bool onMenuView;
145 UI* previousUI; // previous UI so you can swap back UI after exiting menu
146 int32_t getAutomationParameterKnobPos(ModelStackWithAutoParam* modelStack, uint32_t pos);
147 void setAutomationKnobIndicatorLevels(ModelStackWithAutoParam* modelStack, int32_t knobPosLeft,
148 int32_t knobPosRight);
149 void resetInterpolationShortcutBlinking();
150 void resetPadSelectionShortcutBlinking();
151 AutomationParamType automationParamType;
152 bool getAffectEntire() override;
153
154 // public so action logger can access it
155 void resetShortcutBlinking();
156
157private:
158 // button action functions
159 void handleSessionButtonAction(Clip* clip, bool on);
160 void handleKeyboardButtonAction(bool on);
161 void handleClipButtonAction(bool on, bool isAudioClip);
162 void handleCrossScreenButtonAction(bool on);
163 void handleKitButtonAction(OutputType outputType, bool on);
164 void handleSynthButtonAction(OutputType outputType, bool on);
165 void handleMidiButtonAction(OutputType outputType, bool on);
166 void handleCVButtonAction(OutputType outputType, bool on);
167 bool handleHorizontalEncoderButtonAction(bool on, bool isAudioClip);
168 bool handleBackAndHorizontalEncoderButtonComboAction(Clip* clip, bool on);
169 void handleVerticalEncoderButtonAction(bool on);
170 void handleSelectEncoderButtonAction(bool on);
171 void handleAffectEntireButtonAction(bool on);
172
173 // edit pad action
174 ActionResult handleEditPadAction(ModelStackWithAutoParam* modelStackWithParam,
175 ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow, Clip* clip,
176 Output* output, OutputType outputType, int32_t effectiveLength, int32_t x,
177 int32_t y, int32_t velocity, SquareInfo& squareInfo);
178 bool shortcutPadAction(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, Output* output,
179 OutputType outputType, int32_t effectiveLength, int32_t x, int32_t y, int32_t velocity,
180 int32_t xScroll, int32_t xZoom, SquareInfo& squareInfo);
182 bool toggleVelocityPadSelectionMode(SquareInfo& squareInfo);
183 bool toggleAutomationPadSelectionMode(ModelStackWithAutoParam* modelStackWithParam, int32_t effectiveLength,
184 int32_t xScroll, int32_t xZoom);
185 void handleParameterSelection(Clip* clip, Output* output, OutputType outputType, int32_t xDisplay,
186 int32_t yDisplay);
187 void noteEditPadAction(ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow, InstrumentClip* clip,
188 int32_t x, int32_t y, int32_t velocity, int32_t effectiveLength, SquareInfo& squareInfo);
189 void velocityPadSelectionAction(ModelStackWithNoteRow* modelStackWithNoteRow, InstrumentClip* clip, int32_t x,
190 int32_t y, int32_t velocity, SquareInfo& squareInfo);
191 void velocityEditPadAction(ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow, InstrumentClip* clip,
192 int32_t x, int32_t y, int32_t velocity, int32_t effectiveLength, SquareInfo& squareInfo);
193 int32_t getVelocityFromY(int32_t y);
194 int32_t getYFromVelocity(int32_t velocity);
195 void addNoteWithNewVelocity(int32_t x, int32_t velocity, int32_t newVelocity);
196 void adjustNoteVelocity(ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow, int32_t x, int32_t velocity,
197 int32_t newVelocity, uint8_t squareType);
198 void setVelocity(ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow, int32_t x, int32_t newVelocity);
199 void setVelocityRamp(ModelStackWithNoteRow* modelStackWithNoteRow, NoteRow* noteRow,
200 SquareInfo rowSquareInfo[kDisplayWidth], int32_t velocityIncrement);
201 void recordNoteEditPadAction(int32_t x, int32_t velocity);
202 void automationEditPadAction(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, int32_t xDisplay,
203 int32_t yDisplay, int32_t velocity, int32_t effectiveLength, int32_t xScroll,
204 int32_t xZoom);
205 bool recordAutomationSinglePadPress(int32_t xDisplay, int32_t yDisplay);
206
207 // mute pad action
208 ActionResult handleMutePadAction(ModelStackWithTimelineCounter* modelStackWithTimelineCounter,
209 InstrumentClip* instrumentClip, Output* output, OutputType outputType, int32_t y,
210 int32_t velocity);
211
212 // audition pad action
213 ActionResult handleAuditionPadAction(InstrumentClip* instrumentClip, Output* output, OutputType outputType,
214 int32_t y, int32_t velocity);
215 ActionResult auditionPadAction(InstrumentClip* clip, Output* output, OutputType outputType, int32_t yDisplay,
216 int32_t velocity, bool shiftButtonDown);
217
218 // Automation View Render Functions
219 void performActualRender(RGB image[][kDisplayWidth + kSideBarWidth],
220 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xScroll, uint32_t xZoom,
221 int32_t renderWidth, int32_t imageWidth, bool drawUndefinedArea = true);
222 void renderAutomationOverview(ModelStackWithTimelineCounter* modelStackWithTimelineCounter,
223 ModelStackWithThreeMainThings* modelStackWithThreeMainThings, Clip* clip,
224 OutputType outputType, RGB image[][kDisplayWidth + kSideBarWidth],
225 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xDisplay,
226 bool isMIDICVDrum);
227 void renderAutomationEditor(ModelStackWithAutoParam* modelStackWithParam, Clip* clip,
228 RGB image[][kDisplayWidth + kSideBarWidth],
229 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t renderWidth,
230 int32_t xScroll, uint32_t xZoom, int32_t effectiveLength, int32_t xDisplay,
231 bool drawUndefinedArea, deluge::modulation::params::Kind kind, bool isBipolar);
232 void renderAutomationColumn(ModelStackWithAutoParam* modelStackWithParam,
233 RGB image[][kDisplayWidth + kSideBarWidth],
234 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t lengthToDisplay,
235 int32_t xDisplay, bool isAutomated, int32_t xScroll, int32_t xZoom,
236 deluge::modulation::params::Kind kind, bool isBipolar);
237 void renderAutomationBipolarSquare(RGB image[][kDisplayWidth + kSideBarWidth],
238 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xDisplay,
239 int32_t yDisplay, bool isAutomated, deluge::modulation::params::Kind kind,
240 int32_t knobPos);
241 void renderAutomationUnipolarSquare(RGB image[][kDisplayWidth + kSideBarWidth],
242 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xDisplay,
243 int32_t yDisplay, bool isAutomated, int32_t knobPos);
244 void renderNoteEditor(ModelStackWithNoteRow* modelStackWithNoteRow, InstrumentClip* clip,
245 RGB image[][kDisplayWidth + kSideBarWidth],
246 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t renderWidth, int32_t xScroll,
247 uint32_t xZoom, int32_t effectiveLength, int32_t xDisplay, bool drawUndefinedArea,
248 SquareInfo& squareInfo);
249 void renderNoteColumn(ModelStackWithNoteRow* modelStackWithNoteRow, InstrumentClip* clip,
250 RGB image[][kDisplayWidth + kSideBarWidth],
251 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xDisplay, int32_t xScroll,
252 int32_t xZoom, SquareInfo& squareInfo);
253 void renderNoteSquare(RGB image[][kDisplayWidth + kSideBarWidth],
254 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t xDisplay, int32_t yDisplay,
255 uint8_t squareType, int32_t value);
256 void renderUndefinedArea(int32_t xScroll, uint32_t xZoom, int32_t lengthToDisplay,
257 RGB image[][kDisplayWidth + kSideBarWidth],
258 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth], int32_t imageWidth,
259 TimelineView* timelineView, bool tripletsOnHere, int32_t xDisplay);
260 void renderDisplayOLED(Clip* clip, Output* output, OutputType outputType, int32_t knobPosLeft = kNoSelection,
261 int32_t knobPosRight = kNoSelection);
262 void renderAutomationOverviewDisplayOLED(deluge::hid::display::oled_canvas::Canvas& canvas, Output* output,
263 OutputType outputType);
264 void renderAutomationEditorDisplayOLED(deluge::hid::display::oled_canvas::Canvas& canvas, Clip* clip,
265 OutputType outputType, int32_t knobPosLeft, int32_t knobPosRight);
266 void renderNoteEditorDisplayOLED(deluge::hid::display::oled_canvas::Canvas& canvas, InstrumentClip* clip,
267 OutputType outputType, int32_t knobPosLeft, int32_t knobPosRight);
268 void renderDisplay7SEG(Clip* clip, Output* output, OutputType outputType, int32_t knobPosLeft = kNoSelection,
269 bool modEncoderAction = false);
270 void renderAutomationOverviewDisplay7SEG(Output* output, OutputType outputType);
271 void renderAutomationEditorDisplay7SEG(Clip* clip, OutputType outputType, int32_t knobPosLeft,
272 bool modEncoderAction);
273 void renderNoteEditorDisplay7SEG(InstrumentClip* clip, OutputType outputType, int32_t knobPosLeft);
274
275 // Horizontal Encoder Action
276 void shiftAutomationHorizontally(ModelStackWithAutoParam* modelStackWithParam, int32_t offset,
277 int32_t effectiveLength);
278
279 // Mod Encoder Action
280 bool automationModEncoderActionForSelectedPad(ModelStackWithAutoParam* modelStackWithParam, int32_t whichModEncoder,
281 int32_t offset, int32_t effectiveLength);
282 void automationModEncoderActionForUnselectedPad(ModelStackWithAutoParam* modelStackWithParam,
283 int32_t whichModEncoder, int32_t offset, int32_t effectiveLength);
284
285 // Mod Encoder Button Action
286 void copyAutomation(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, int32_t xScroll, int32_t xZoom);
287 void pasteAutomation(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, int32_t effectiveLength,
288 int32_t xScroll, int32_t xZoom);
289
290 // Select Encoder Action
291 void selectGlobalParam(int32_t offset, Clip* clip);
292 void selectNonGlobalParam(int32_t offset, Clip* clip);
293 bool selectPatchCable(int32_t offset, Clip* clip);
294 bool selectPatchCableAtIndex(Clip* clip, PatchCableSet* set, int32_t patchCableIndex, bool& foundCurrentPatchCable);
295 void selectMIDICC(int32_t offset, Clip* clip);
296 int32_t getNextSelectedParamArrayPosition(int32_t offset, int32_t lastSelectedParamArrayPosition,
297 int32_t numParams);
298 void getLastSelectedNonGlobalParamArrayPosition(Clip* clip);
299 void getLastSelectedGlobalParamArrayPosition(Clip* clip);
300
301 // Automation Lanes Functions
302 void initPadSelection();
303 void initInterpolation();
304 ParamManagerForTimeline* getParamManagerForClip(Clip* clip);
305 int32_t getEffectiveLength(ModelStackWithTimelineCounter* modelStack);
306 uint32_t getSquareWidth(int32_t square, int32_t effectiveLength, int32_t xScroll, int32_t xZoom);
307 uint32_t getMiddlePosFromSquare(int32_t xDisplay, int32_t effectiveLength, int32_t xScroll, int32_t xZoom);
308
309 void getAutomationParameterName(Clip* clip, OutputType outputType, StringBuf& parameterName);
310
311 bool getAutomationNodeInterpolation(ModelStackWithAutoParam* modelStack, int32_t pos, bool reversed);
312 void setAutomationParameterValue(ModelStackWithAutoParam* modelStack, int32_t knobPos, int32_t squareStart,
313 int32_t xDisplay, int32_t effectiveLength, int32_t xScroll, int32_t xZoom,
314 bool modEncoderAction = false);
315 void updateAutomationModPosition(ModelStackWithAutoParam* modelStack, uint32_t squareStart,
316 bool updateDisplay = true, bool updateIndicatorLevels = true);
317
318 void handleAutomationSinglePadPress(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, int32_t xDisplay,
319 int32_t yDisplay, int32_t effectiveLength, int32_t xScroll, int32_t xZoom);
320 void handleAutomationParameterChange(ModelStackWithAutoParam* modelStackWithParam, Clip* clip,
321 OutputType outputType, int32_t xDisplay, int32_t yDisplay,
322 int32_t effectiveLength, int32_t xScroll, int32_t xZoom);
323 int32_t calculateAutomationKnobPosForPadPress(ModelStackWithAutoParam* modelStackWithParam, OutputType outputType,
324 int32_t yDisplay);
325 int32_t calculateAutomationKnobPosForMiddlePadPress(deluge::modulation::params::Kind kind, int32_t yDisplay);
326 int32_t calculateAutomationKnobPosForSinglePadPress(deluge::modulation::params::Kind kind, int32_t yDisplay);
327
328 void handleAutomationMultiPadPress(ModelStackWithAutoParam* modelStackWithParam, Clip* clip, int32_t firstPadX,
329 int32_t firstPadY, int32_t secondPadX, int32_t secondPadY,
330 int32_t effectiveLength, int32_t xScroll, int32_t xZoom,
331 bool modEncoderAction = false);
332 void renderAutomationDisplayForMultiPadPress(ModelStackWithAutoParam* modelStackWithParam, Clip* clip,
333 int32_t effectiveLength, int32_t xScroll, int32_t xZoom,
334 int32_t xDisplay = kNoSelection, bool modEncoderAction = false);
335
336 int32_t calculateAutomationKnobPosForModEncoderTurn(ModelStackWithAutoParam* modelStackWithParam, int32_t knobPos,
337 int32_t offset);
338
339 void blinkShortcuts();
340 void resetParameterShortcutBlinking();
341
342 bool parameterShortcutBlinking;
343
344 bool interpolationShortcutBlinking;
345 bool padSelectionShortcutBlinking;
346
347 bool padSelectionOn;
348 bool multiPadPressActive;
349 bool middlePadPressSelected;
350 int32_t leftPadSelectedX;
351 int32_t leftPadSelectedY;
352 int32_t rightPadSelectedX;
353 int32_t rightPadSelectedY;
354 int32_t lastPadSelectedKnobPos;
355 int32_t numNotesSelected;
356 int32_t selectedPadPressed;
357
358 bool playbackStopped;
359
360 // grid sized array to assign midi cc values to each pad on the grid
361 void initMIDICCShortcutsForAutomation();
362 uint32_t midiCCShortcutsForAutomation[kDisplayWidth][kDisplayHeight];
363 bool midiCCShortcutsLoaded;
364
365 bool probabilityChanged;
366 uint32_t timeSelectKnobLastReleased;
367};
368
369extern AutomationView automationView;
Definition action.h:75
Definition audio_clip.h:35
Definition automation_view.h:50
void potentiallyVerticalScrollToSelectedDrum(InstrumentClip *clip, Output *output)
Definition automation_view.cpp:3751
bool toggleAutomationInterpolation()
toggle automation interpolation on / off
Definition automation_view.cpp:2520
void renderNoteSquare(RGB image[][kDisplayWidth+kSideBarWidth], uint8_t occupancyMask[][kDisplayWidth+kSideBarWidth], int32_t xDisplay, int32_t yDisplay, uint8_t squareType, int32_t value)
render column for note parameter
Definition automation_view.cpp:1153
void renderNoteColumn(ModelStackWithNoteRow *modelStackWithNoteRow, InstrumentClip *clip, RGB image[][kDisplayWidth+kSideBarWidth], uint8_t occupancyMask[][kDisplayWidth+kSideBarWidth], int32_t xDisplay, int32_t xScroll, int32_t xZoom, SquareInfo &squareInfo)
render each square in each column of the note editor grid
Definition automation_view.cpp:1136
bool toggleVelocityPadSelectionMode(SquareInfo &squareInfo)
toggle velocity pad selection mode on / off
Definition automation_view.cpp:2538
void renderAutomationColumn(ModelStackWithAutoParam *modelStackWithParam, RGB image[][kDisplayWidth+kSideBarWidth], uint8_t occupancyMask[][kDisplayWidth+kSideBarWidth], int32_t lengthToDisplay, int32_t xDisplay, bool isAutomated, int32_t xScroll, int32_t xZoom, deluge::modulation::params::Kind kind, bool isBipolar)
render each square in each column of the automation editor grid
Definition automation_view.cpp:973
UIModControllableContext getUIModControllableContext() override
What mod controllable context is this UI using? E.g. Automation View can use the Song ModControllable...
Definition automation_view.h:64
bool shortcutPadAction(ModelStackWithAutoParam *modelStackWithParam, Clip *clip, Output *output, OutputType outputType, int32_t effectiveLength, int32_t x, int32_t y, int32_t velocity, int32_t xScroll, int32_t xZoom, SquareInfo &squareInfo)
Definition automation_view.cpp:2466
ClipMinder * toClipMinder() override
Definition automation_view.h:69
void renderAutomationUnipolarSquare(RGB image[][kDisplayWidth+kSideBarWidth], uint8_t occupancyMask[][kDisplayWidth+kSideBarWidth], int32_t xDisplay, int32_t yDisplay, bool isAutomated, int32_t knobPos)
render column for unipolar params (e.g. not pan, pitch, or patch cables)
Definition automation_view.cpp:1081
UIType getUIContextType() override
What context does UI relate to? e.g. UIType could be AUTOMATION but UIContextType could be ARRANGER,...
Definition automation_view.cpp:660
void renderAutomationBipolarSquare(RGB image[][kDisplayWidth+kSideBarWidth], uint8_t occupancyMask[][kDisplayWidth+kSideBarWidth], int32_t xDisplay, int32_t yDisplay, bool isAutomated, deluge::modulation::params::Kind kind, int32_t knobPos)
render column for bipolar params - e.g. pan, pitch, patch cable
Definition automation_view.cpp:994
bool toggleAutomationPadSelectionMode(ModelStackWithAutoParam *modelStackWithParam, int32_t effectiveLength, int32_t xScroll, int32_t xZoom)
toggle automation pad selection mode on / off
Definition automation_view.cpp:2572
UIType getUIType() override
What type of UI is this? e.g. UIType::ARRANGER.
Definition automation_view.h:62
Definition clip_minder.h:23
Definition clip.h:46
Definition copied_note_row.h:23
Definition drum.h:44
Definition instrument_clip.h:48
Definition instrument.h:45
Definition mod_controllable.h:40
Definition model_stack.h:269
Definition model_stack.h:189
Definition model_stack.h:231
Definition model_stack.h:129
Definition note_row.h:98
Definition note.h:24
Definition param_collection.h:39
Definition param_manager.h:174
Definition param_node.h:23
Definition patch_cable_set.h:41
This class represents the colour format most used by the Deluge globally.
Definition rgb.h:14
Definition sound_drum.h:28
Definition sound.h:71
Kind
Definition param.h:42
constexpr uint32_t kNoParamID
Magic number which represents an invalid or missing param type.
Definition param.h:297