33 using SelectedNote::SelectedNote;
35 [[nodiscard]] int32_t getMaxValue()
const override {
return kNumIterancePresets + 1; }
36 [[nodiscard]] int32_t getMinValue()
const override {
return 0; }
44 Note* leftMostNote = instrumentClipView.getLeftMostNotePressed();
48 int32_t preset = leftMostNote->getIterance().toPresetIndex();
49 this->setValue(preset);
54 instrumentClipView.adjustNoteIteranceWithOffset(offset);
59 int32_t iterancePreset = this->getValue();
60 if (iterancePreset == kCustomIterancePreset) {
63 return ¬eCustomIteranceRootMenu;
71 int32_t iterancePreset = this->getValue();
73 if (iterancePreset == kDefaultIterancePreset) {
74 strcpy(buffer,
"OFF");
76 else if (iterancePreset == kCustomIterancePreset) {
77 strcpy(buffer,
"CUSTOM");
80 Iterance iterance = iterancePresets[iterancePreset - 1];
81 int32_t i = iterance.divisor;
84 if (iterance.iteranceStep[i]) {
88 sprintf(buffer,
"%d of %d", i + 1, iterance.divisor);
91 deluge::hid::display::OLED::main.drawStringCentred(buffer, 18 + OLED_MAIN_TOPMOST_PIXEL, kTextHugeSpacingX,
95 void drawValue() final
override {
98 int32_t iterancePreset = this->getValue();
100 if (iterancePreset == kDefaultIterancePreset) {
101 strcpy(buffer,
"OFF");
103 else if (iterancePreset == kCustomIterancePreset) {
104 strcpy(buffer,
"CUSTOM");
107 Iterance iterance = iterancePresets[iterancePreset - 1];
108 int32_t i = iterance.divisor;
109 for (; i >= 0; i--) {
111 if (iterance.iteranceStep[i]) {
115 sprintf(buffer,
"%dof%d", i + 1, iterance.divisor);
118 display->setText(buffer);
121 void writeCurrentValue()
override { ; }