55class SoundEditor final :
public UI {
58 bool opened()
override;
59 void focusRegained()
override;
60 void displayOrLanguageChanged()
final;
61 bool getGreyoutColsAndRows(uint32_t* cols, uint32_t* rows)
override;
65 int8_t currentSourceIndex;
72 VoicePriority* currentPriority;
73 int16_t currentMultiRangeIndex;
75 deluge::gui::menu_item::RangeEdit editingRangeEdge;
76 bool haveRenderedPads{
false};
78 ActionResult buttonAction(deluge::hid::Button b,
bool on,
bool inCardRoutine)
override;
79 ActionResult padAction(int32_t x, int32_t y, int32_t velocity)
override;
80 ActionResult verticalEncoderAction(int32_t offset,
bool inCardRoutine)
override;
81 void modEncoderAction(int32_t whichModEncoder, int32_t offset)
override;
82 void modEncoderButtonAction(uint8_t whichModEncoder,
bool on)
override;
83 ActionResult horizontalEncoderAction(int32_t offset)
override;
84 void scrollFinished()
override;
85 static bool editingKit();
93 void setCurrentSource(int32_t sourceIndex);
95 bool should_render_shortcut_overlay();
96 bool in_sound_editor();
97 bool renderMainPads(uint32_t whichRows,
RGB image[kDisplayHeight][kDisplayWidth + kSideBarWidth],
98 uint8_t occupancyMask[kDisplayHeight][kDisplayWidth + kSideBarWidth],
99 bool drawUndefinedArea =
false)
override;
100 static void renderMainShortcutsOnly(
ModControllableAudio* forThing,
RGB image[][kDisplayWidth + kSideBarWidth],
101 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth],
bool doKitAffectEntire);
103 ActionResult timerCallback()
override;
104 void setupShortcutBlink(int32_t x, int32_t y, int32_t frequency, int32_t colour = 0L);
105 bool findPatchedParam(int32_t paramLookingFor, int32_t* xout, int32_t* yout,
bool* isSecondLayerParamOut);
106 void updateSourceBlinks(
MenuItem* currentItem);
107 void resetSourceBlinks();
109 uint8_t navigationDepth;
110 uint8_t patchingParamSelected;
111 uint8_t currentParamShortcutX;
112 uint8_t currentParamShortcutY;
113 uint8_t currentParamColour;
114 uint8_t paramShortcutBlinkFrequency;
115 uint32_t shortcutBlinkCounter;
117 uint32_t timeLastAttemptedAutomatedParamEdit;
119 int8_t numberScrollAmount;
120 uint32_t numberEditSize;
121 int8_t numberEditPos;
123 uint8_t shortcutsVersion;
125 MenuItem* menuItemNavigationRecord[16];
127 bool shouldGoUpOneLevelOnBegin;
128 bool secondLayerShortcutsToggled;
130 bool programChangeReceived(
MIDICable& cable, uint8_t channel, uint8_t program) {
return false; }
131 bool midiCCReceived(
MIDICable& cable, uint8_t channel, uint8_t ccNumber, uint8_t value);
132 bool pitchBendReceived(
MIDICable& cable, uint8_t channel, uint8_t data1, uint8_t data2);
133 void selectEncoderAction(int8_t offset)
override;
134 bool canSeeViewUnderneath()
override {
return true; }
135 bool setup(
Clip* clip =
nullptr,
const MenuItem* item =
nullptr, int32_t sourceIndex = 0);
136 void enterOrUpdateSoundEditor(
bool on);
137 void blinkShortcut();
138 ActionResult potentialShortcutPadAction(int32_t x, int32_t y,
bool on);
139 bool editingReverbSidechain();
141 bool inSettingsMenu();
142 bool setupKitGlobalFXMenu;
143 ActionResult
exitUI()
override {
return exitCompletely(); };
144 ActionResult exitCompletely();
146 void enterSubmenu(
MenuItem* newItem,
MenuItem* navigatedBackwardFrom =
nullptr);
147 bool pcReceivedForMidiLearn(
MIDICable& cable, int32_t channel, int32_t program)
override;
148 bool noteOnReceivedForMidiLearn(
MIDICable& cable, int32_t channel, int32_t note, int32_t velocity)
override;
149 void markInstrumentAsEdited();
152 static bool editingCVOrMIDIClip();
153 static bool editingNonAudioDrumRow();
155 static bool editingMidiDrumRow();
156 static bool editingGateDrumRow();
157 bool isUntransposedNoteWithinRange(int32_t noteCode);
158 void setCurrentMultiRange(int32_t i);
159 void possibleChangeToCurrentRangeDisplay();
160 MenuPermission checkPermissionToBeginSessionForRangeSpecificParam(
Sound* sound, int32_t whichThing,
162 void setupExclusiveShortcutBlink(int32_t x, int32_t y);
163 void setShortcutsVersion(int32_t newVersion);
168 void mpeZonesPotentiallyUpdated();
173 UIType
getUIType()
override {
return UIType::SOUND_EDITOR; }
175 bool selectedNoteRow;
179 bool inNoteRowEditor();
180 void toggleNoteEditorParamMenu(int32_t on);
181 void updatePadLightsFor(
MenuItem* item);
185 std::optional<std::span<deluge::gui::menu_item::HorizontalMenu* const>>
186 getCurrentHorizontalMenusChain(
bool checkNavigationDepth =
true);
191 MenuItem const*
const items[kDisplayWidth][kDisplayHeight]);
192 bool beginScreen(
MenuItem* oldMenuItem =
nullptr);
194 uint8_t getActualParamFromScreen(uint8_t screen);
196 ActionResult handleAutomationViewPadAction(int32_t x, int32_t y, int32_t velocity);
197 bool isEditingAutomationViewParam();
199 MenuItem* currentItem,
bool isHorizontalMenu);
201 uint8_t sourceShortcutBlinkFrequencies[2][kDisplayHeight];
202 uint8_t sourceShortcutBlinkColours[2][kDisplayHeight];
203 bool source_shortcut_blink_alternates[2][kDisplayHeight];