37 using SelectedNoteRow::SelectedNoteRow;
39 [[nodiscard]] int32_t getMaxValue()
const override {
return kNumIterancePresets + 1; }
40 [[nodiscard]] int32_t getMinValue()
const override {
return 0; }
48 char modelStackMemory[MODEL_STACK_MAX_SIZE];
52 if (modelStackWithNoteRow->getNoteRowAllowNull() !=
nullptr) {
53 NoteRow* noteRow = modelStackWithNoteRow->getNoteRowAllowNull();
55 int32_t preset = noteRow->iteranceValue.toPresetIndex();
56 this->setValue(preset);
62 int32_t newValue = instrumentClipView.setNoteRowIteranceWithOffset(offset);
65 int32_t preset = Iterance::fromInt(newValue).toPresetIndex();
66 this->setValue(preset);
72 int32_t iterancePreset = this->getValue();
73 if (iterancePreset == kCustomIterancePreset) {
76 return ¬eRowCustomIteranceRootMenu;
84 int32_t iterancePreset = this->getValue();
86 if (iterancePreset == kDefaultIterancePreset) {
87 strcpy(buffer,
"OFF");
89 else if (iterancePreset == kCustomIterancePreset) {
90 strcpy(buffer,
"CUSTOM");
93 Iterance iterance = iterancePresets[iterancePreset - 1];
94 int32_t i = iterance.divisor;
97 if (iterance.iteranceStep[i]) {
101 sprintf(buffer,
"%d of %d", i + 1, iterance.divisor);
104 deluge::hid::display::OLED::main.drawStringCentred(buffer, 18 + OLED_MAIN_TOPMOST_PIXEL, kTextHugeSpacingX,
108 void drawValue() final
override {
111 int32_t iterancePreset = this->getValue();
113 if (iterancePreset == kDefaultIterancePreset) {
114 strcpy(buffer,
"OFF");
116 else if (iterancePreset == kCustomIterancePreset) {
117 strcpy(buffer,
"CUSTOM");
120 Iterance iterance = iterancePresets[iterancePreset - 1];
121 int32_t i = iterance.divisor;
122 for (; i >= 0; i--) {
124 if (iterance.iteranceStep[i]) {
128 sprintf(buffer,
"%dof%d", i + 1, iterance.divisor);
131 display->setText(buffer);
134 void writeCurrentValue()
override { ; }