Unified sub menu redraw

This commit is contained in:
Mikael Degerfält 2019-06-21 20:36:16 +02:00
parent 2ea76d96d3
commit 5aafab684e

View file

@ -222,18 +222,22 @@ void drawMenuCursor(byte itemNo, byte color){
} }
static bool updateSubMenuCursor(const MenuPage &page, uint32_t timeNow) static bool drawSubMenu(const MenuPage &page, int color) {
{
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
int index = cursors[page.cursor]; int index = cursors[page.cursor];
// TODO: Make sure this is a MenuEntrySub // TODO: Make sure this is a MenuEntrySub
// TODO: Handle MenuEntrySubRotator case // TODO: Handle MenuEntrySubRotator case
// TODO: Null check subMenuFunc // TODO: Null check subMenuFunc
((const MenuEntrySub*)page.entries[index])->subMenuFunc(cursorNow); ((const MenuEntrySub*)page.entries[index])->subMenuFunc(color);
cursorBlinkTime = timeNow;
return true; return true;
}
static bool updateSubMenuCursor(const MenuPage &page, uint32_t timeNow)
{
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK;
else cursorNow = WHITE;
cursorBlinkTime = timeNow;
return drawSubMenu( page, cursorNow );
} }
return false; return false;
} }
@ -1178,6 +1182,9 @@ static void checkForPatchView()
void menu() { void menu() {
unsigned long timeNow = millis(); unsigned long timeNow = millis();
const MenuPage *currentPage = nullptr;
bool redrawSubValue = false;
bool redraw = stateFirstRun; bool redraw = stateFirstRun;
// read the state of the switches // read the state of the switches
uint8_t deumButtons = 0x0f ^(digitalRead(dPin) | (digitalRead(ePin) << 1) | (digitalRead(uPin) << 2) | (digitalRead(mPin)<<3)); uint8_t deumButtons = 0x0f ^(digitalRead(dPin) | (digitalRead(ePin) << 1) | (digitalRead(uPin) << 2) | (digitalRead(mPin)<<3));
@ -1411,42 +1418,29 @@ void menu() {
drawMenuScreen(); drawMenuScreen();
stateFirstRun = 0; stateFirstRun = 0;
} }
currentPage = &mainMenuPage;
if (subTranspose){ if (subTranspose){
redraw |= updateSubMenuCursor( mainMenuPage, timeNow ); redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (transpose > 0){ if (transpose > 0)
clearSubValue();
transpose--; transpose--;
plotTranspose(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (transpose < 24)
if (transpose < 24){
clearSubValue();
transpose++; transpose++;
plotTranspose(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotTranspose(WHITE);
cursorNow = BLACK;
redraw = true;
subTranspose = 0; subTranspose = 0;
writeSetting(TRANSP_ADDR,transpose); writeSetting(TRANSP_ADDR,transpose);
break; break;
} }
redrawSubValue = true;
} }
} else if (subOctave){ } else if (subOctave){
redraw |= updateSubMenuCursor( mainMenuPage, timeNow ); redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
@ -1454,38 +1448,22 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (octave > 0){ if (octave > 0)
clearSubValue();
// plotOctave(BLACK);
octave--; octave--;
plotOctave(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (octave < 6)
if (octave < 6){
clearSubValue();
// plotOctave(BLACK);
octave++; octave++;
plotOctave(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotOctave(WHITE);
cursorNow = BLACK;
redraw = true;
subOctave = 0; subOctave = 0;
writeSetting(OCTAVE_ADDR,octave); writeSetting(OCTAVE_ADDR,octave);
break; break;
} }
redrawSubValue = true;
} }
} else if (subMIDI) { } else if (subMIDI) {
redraw |= updateSubMenuCursor( mainMenuPage, timeNow ); redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
@ -1493,53 +1471,33 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (MIDIchannel > 1){ if (MIDIchannel > 1)
clearSubValue();
MIDIchannel--; MIDIchannel--;
plotMIDI(WHITE); break;
cursorNow = BLACK;
redraw = true; case BTN_UP:
cursorBlinkTime = timeNow; if (MIDIchannel < 16)
} MIDIchannel++;
break; break;
case BTN_ENTER: case BTN_ENTER:
readSwitches(); readSwitches();
if (pinkyKey){ if (pinkyKey){
slowMidi = !slowMidi; slowMidi = !slowMidi;
plotMIDI(WHITE);
cursorNow = BLACK;
redraw = true;
dipSwBits = dipSwBits ^ (1<<3); dipSwBits = dipSwBits ^ (1<<3);
writeSetting(DIPSW_BITS_ADDR,dipSwBits); writeSetting(DIPSW_BITS_ADDR,dipSwBits);
} else { } else {
plotMIDI(WHITE);
cursorNow = BLACK;
redraw = true;
subMIDI = 0; subMIDI = 0;
writeSetting(MIDI_ADDR,MIDIchannel); writeSetting(MIDI_ADDR,MIDIchannel);
} }
break; break;
case BTN_UP:
if (MIDIchannel < 16){
clearSubValue();
MIDIchannel++;
plotMIDI(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break;
case BTN_MENU: case BTN_MENU:
plotMIDI(WHITE);
cursorNow = BLACK;
redraw = true;
subMIDI = 0; subMIDI = 0;
writeSetting(MIDI_ADDR,MIDIchannel); writeSetting(MIDI_ADDR,MIDIchannel);
break; break;
} }
redrawSubValue = true;
} }
} else { } else {
bool hadButtons = buttonPressedAndNotUsed; bool hadButtons = buttonPressedAndNotUsed;
@ -1552,6 +1510,7 @@ void menu() {
drawMenu(rotatorMenuPage); drawMenu(rotatorMenuPage);
stateFirstRun = 0; stateFirstRun = 0;
} }
currentPage = &rotatorMenuPage;
if (subParallel){ if (subParallel){
if (((timeNow - cursorBlinkTime) > cursorBlinkInterval) || forceRedraw) { if (((timeNow - cursorBlinkTime) > cursorBlinkInterval) || forceRedraw) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE; if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
@ -1567,36 +1526,26 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (parallel > -24){ if (parallel > -24)
plotRotator(BLACK,parallel);
parallel--; parallel--;
plotRotator(WHITE,parallel);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (parallel < 24)
if (parallel < 24){
plotRotator(BLACK,parallel);
parallel++; parallel++;
plotRotator(WHITE,parallel);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotRotator(WHITE,parallel);
cursorNow = BLACK;
redraw = true;
subParallel = 0; subParallel = 0;
writeSetting(PARAL_ADDR,(parallel + 24)); writeSetting(PARAL_ADDR,(parallel + 24));
break; break;
} }
clearSubValue();
plotRotator(WHITE,parallel);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
} }
} else if (subRotator){ } else if (subRotator){
if (((timeNow - cursorBlinkTime) > cursorBlinkInterval) || forceRedraw) { if (((timeNow - cursorBlinkTime) > cursorBlinkInterval) || forceRedraw) {
@ -1613,51 +1562,35 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (rotations[subRotator-1] > -24){ if (rotations[subRotator-1] > -24)
clearSubValue();
rotations[subRotator-1]--; rotations[subRotator-1]--;
plotRotator(WHITE,rotations[subRotator-1]);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (rotations[subRotator-1] < 24)
if (rotations[subRotator-1] < 24){
clearSubValue();
rotations[subRotator-1]++; rotations[subRotator-1]++;
plotRotator(WHITE,rotations[subRotator-1]);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotRotator(WHITE,rotations[subRotator-1]);
cursorNow = BLACK;
redraw = true;
writeSetting(ROTN1_ADDR+2*(subRotator-1),(rotations[subRotator-1]+24)); writeSetting(ROTN1_ADDR+2*(subRotator-1),(rotations[subRotator-1]+24));
subRotator = 0; subRotator = 0;
break; break;
} }
} clearSubValue();
} else if (subPriority){ plotRotator(WHITE,rotations[subRotator-1]);
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { cursorNow = BLACK;
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotPriority(cursorNow);
redraw = true; redraw = true;
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
} }
if (buttonPressedAndNotUsed){ } else if (subPriority){
updateSubMenuCursor( rotatorMenuPage, timeNow );
if (buttonPressedAndNotUsed) {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
case BTN_UP: case BTN_UP:
// up // up
clearSubValue();
priority = !priority; priority = !priority;
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
break; break;
@ -1668,9 +1601,7 @@ void menu() {
writeSetting(PRIO_ADDR,priority); writeSetting(PRIO_ADDR,priority);
break; break;
} }
plotPriority(WHITE); redrawSubValue = true;
cursorNow = BLACK;
redraw = true;
} }
} else { } else {
bool hadButtons = buttonPressedAndNotUsed; bool hadButtons = buttonPressedAndNotUsed;
@ -1696,6 +1627,7 @@ void menu() {
drawMenu( breathMenuPage ); drawMenu( breathMenuPage );
stateFirstRun = 0; stateFirstRun = 0;
} }
currentPage = &breathMenuPage;
if (subBreathCC){ if (subBreathCC){
redraw |= updateSubMenuCursor( breathMenuPage, timeNow ); redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
@ -1707,7 +1639,6 @@ void menu() {
} else { } else {
breathCC = 10; breathCC = 10;
} }
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
if (breathCC < 10){ if (breathCC < 10){
@ -1715,7 +1646,6 @@ void menu() {
} else { } else {
breathCC = 0; breathCC = 0;
} }
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
@ -1727,10 +1657,7 @@ void menu() {
} }
break; break;
} }
clearSubValue(); redrawSubValue = true;
plotBreathCC(WHITE);
cursorNow = BLACK;
redraw = true;
} }
} else if (subBreathAT) { } else if (subBreathAT) {
redraw |= updateSubMenuCursor( breathMenuPage, timeNow ); redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
@ -1738,15 +1665,11 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue(); breathAT = !breathAT;
breathAT=!breathAT;
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up // up
clearSubValue(); breathAT = !breathAT;
breathAT=!breathAT;
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
@ -1758,9 +1681,7 @@ void menu() {
} }
break; break;
} }
plotBreathAT(WHITE); redrawSubValue = true;
cursorNow = BLACK;
redraw = true;
} }
} else if (subVelocity) { } else if (subVelocity) {
redraw |= updateSubMenuCursor( breathMenuPage, timeNow ); redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
@ -1768,18 +1689,14 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (velocity > 0){ if (velocity > 0){
velocity--; velocity--;
} else velocity = 127; } else velocity = 127;
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
clearSubValue();
if (velocity < 127){ if (velocity < 127){
velocity++; velocity++;
} else velocity = 0; } else velocity = 0;
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
@ -1787,9 +1704,7 @@ void menu() {
writeSetting(VELOCITY_ADDR,velocity); writeSetting(VELOCITY_ADDR,velocity);
break; break;
} }
plotVelocity(WHITE); redrawSubValue = true;
cursorNow = BLACK;
redraw = true;
} }
} else if (subCurve) { } else if (subCurve) {
@ -1798,32 +1713,24 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (curve > 0){ if (curve > 0){
curve--; curve--;
} else curve = 12; } else curve = 12;
plotCurve(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up // up
clearSubValue();
if (curve < 12){ if (curve < 12){
curve++; curve++;
} else curve = 0; } else curve = 0;
plotCurve(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu // menu
plotCurve(WHITE);
subCurve = 0; subCurve = 0;
writeSetting(BREATHCURVE_ADDR,curve); writeSetting(BREATHCURVE_ADDR,curve);
break; break;
} }
cursorNow = BLACK; redrawSubValue = true;
redraw = true;
} }
} else if (subVelSmpDl) { } else if (subVelSmpDl) {
@ -1832,69 +1739,56 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (velSmpDl > 0){ if (velSmpDl > 0){
velSmpDl-=1; velSmpDl-=1;
} else velSmpDl = 30; } else velSmpDl = 30;
plotVelSmpDl(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up
clearSubValue();
if (velSmpDl < 30){ if (velSmpDl < 30){
velSmpDl+=1; velSmpDl+=1;
} else velSmpDl = 0; } else velSmpDl = 0;
plotVelSmpDl(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotVelSmpDl(WHITE);
subVelSmpDl = 0; subVelSmpDl = 0;
writeSetting(VEL_SMP_DL_ADDR,velSmpDl); writeSetting(VEL_SMP_DL_ADDR,velSmpDl);
break; break;
} }
cursorNow = BLACK; redrawSubValue = true;
redraw = true;
} }
} else if (subVelBias) { } else if (subVelBias) {
redraw |= updateSubMenuCursor( breathMenuPage, timeNow ); redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState) {
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (velBias > 0){ if (velBias > 0){
velBias--; velBias--;
} else velBias = 9; } else velBias = 9;
plotVelBias(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: case BTN_ENTER:
// enter
plotVelBias(WHITE);
subVelBias = 0; subVelBias = 0;
writeSetting(VEL_BIAS_ADDR,velBias); writeSetting(VEL_BIAS_ADDR,velBias);
break; break;
case BTN_UP: case BTN_UP:
// up
clearSubValue();
if (velBias < 9){ if (velBias < 9){
velBias++; velBias++;
} else velBias = 0; } else velBias = 0;
plotVelBias(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_MENU: case BTN_MENU:
// menu
plotVelBias(WHITE);
subVelBias = 0; subVelBias = 0;
writeSetting(VEL_BIAS_ADDR,velBias); writeSetting(VEL_BIAS_ADDR,velBias);
break; break;
} }
clearSubValue();
plotVelBias(WHITE);
cursorBlinkTime = timeNow;
cursorNow = BLACK; cursorNow = BLACK;
redraw = true; redraw = true;
} }
@ -1909,40 +1803,31 @@ void menu() {
drawMenu( controlMenuPage ); drawMenu( controlMenuPage );
stateFirstRun = 0; stateFirstRun = 0;
} }
currentPage = &controlMenuPage;
if (subPort){ if (subPort){
redraw |= updateSubMenuCursor( controlMenuPage, timeNow ); redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (portamento > 0){ if (portamento > 0){
portamento--; portamento--;
} else portamento = 2; } else portamento = 2;
plotPort(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up
clearSubValue();
if (portamento < 2){ if (portamento < 2){
portamento++; portamento++;
} else portamento = 0; } else portamento = 0;
plotPort(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotPort(WHITE);
subPort = 0; subPort = 0;
writeSetting(PORTAM_ADDR,portamento); writeSetting(PORTAM_ADDR,portamento);
break; break;
} }
cursorNow = BLACK; redrawSubValue = true;
redraw = true;
} }
} else if (subPB) { } else if (subPB) {
redraw |= updateSubMenuCursor( controlMenuPage, timeNow ); redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
@ -1950,36 +1835,22 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (PBdepth > 0){ if (PBdepth > 0)
clearSubValue();
PBdepth--; PBdepth--;
plotPB(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (PBdepth < 12)
if (PBdepth < 12){
clearSubValue();
PBdepth++; PBdepth++;
plotPB(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotPB(WHITE);
cursorNow = BLACK;
redraw = true;
subPB = 0; subPB = 0;
writeSetting(PB_ADDR,PBdepth); writeSetting(PB_ADDR,PBdepth);
break; break;
} }
redrawSubValue = true;
} }
} else if (subExtra) { } else if (subExtra) {
redraw |= updateSubMenuCursor( controlMenuPage, timeNow ); redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
@ -1987,36 +1858,24 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue();
if (extraCT > 0){ if (extraCT > 0){
extraCT--; extraCT--;
} else extraCT = 4; } else extraCT = 4;
plotExtra(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up
clearSubValue();
if (extraCT < 4){ if (extraCT < 4){
extraCT++; extraCT++;
} else extraCT = 0; } else extraCT = 0;
plotExtra(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotExtra(WHITE);
cursorNow = BLACK;
redraw = true;
subExtra = 0; subExtra = 0;
writeSetting(EXTRA_ADDR,extraCT); writeSetting(EXTRA_ADDR,extraCT);
break; break;
} }
redrawSubValue = true;
} }
} else if (subDeglitch) { } else if (subDeglitch) {
redraw |= updateSubMenuCursor( controlMenuPage, timeNow ); redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
@ -2024,36 +1883,23 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (deglitch > 0){ if (deglitch > 0)
clearSubValue();
deglitch-=1; deglitch-=1;
plotDeglitch(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up
if (deglitch < 70){ if (deglitch < 70){
clearSubValue();
deglitch+=1; deglitch+=1;
plotDeglitch(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
} }
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotDeglitch(WHITE);
cursorNow = BLACK;
redraw = true;
subDeglitch = 0; subDeglitch = 0;
writeSetting(DEGLITCH_ADDR,deglitch); writeSetting(DEGLITCH_ADDR,deglitch);
break; break;
} }
redrawSubValue = true;
} }
} else if (subPinky) { } else if (subPinky) {
redraw |= updateSubMenuCursor( controlMenuPage, timeNow ); redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
@ -2061,36 +1907,22 @@ void menu() {
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (pinkySetting > 0){ if (pinkySetting > 0)
clearSubValue();
pinkySetting-=1; pinkySetting-=1;
plotPinkyKey(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (pinkySetting < 24)
if (pinkySetting < 24){ pinkySetting += 1;
clearSubValue();
pinkySetting+=1;
plotPinkyKey(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotPinkyKey(WHITE);
cursorNow = BLACK;
redraw = true;
subPinky = 0; subPinky = 0;
writeSetting(PINKY_KEY_ADDR,pinkySetting); writeSetting(PINKY_KEY_ADDR,pinkySetting);
break; break;
} }
redrawSubValue = true;
} }
} else { } else {
redraw |= updateMenuPage( controlMenuPage, timeNow ); redraw |= updateMenuPage( controlMenuPage, timeNow );
@ -2101,11 +1933,9 @@ void menu() {
drawMenu(vibratoMenuPage); drawMenu(vibratoMenuPage);
stateFirstRun = 0; stateFirstRun = 0;
} }
currentPage = &vibratoMenuPage;
if (subVibrato) { if (subVibrato) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow ); redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2125,11 +1955,7 @@ void menu() {
writeSetting(VIBRATO_ADDR,vibrato); writeSetting(VIBRATO_ADDR,vibrato);
break; break;
} }
clearSubValue(); redrawSubValue = true;
plotVibrato(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
} }
} else if (subVibSens) { } else if (subVibSens) {
@ -2161,9 +1987,7 @@ void menu() {
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
} }
} else if (subVibRetn) { } else if (subVibRetn) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow ); redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2171,28 +1995,22 @@ void menu() {
if (vibRetn > 0) if (vibRetn > 0)
vibRetn--; vibRetn--;
break; break;
case BTN_UP: case BTN_UP:
// up
if (vibRetn < 4) if (vibRetn < 4)
vibRetn++; vibRetn++;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
subVibRetn = 0; subVibRetn = 0;
writeSetting(VIB_RETN_ADDR,vibRetn); writeSetting(VIB_RETN_ADDR,vibRetn);
break; break;
} }
cursorBlinkTime = timeNow; redrawSubValue = true;
cursorNow = BLACK;
redraw = true;
clearSubValue();
plotVibRetn(WHITE);
} }
} else if (subVibSquelch) { } else if (subVibSquelch) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow ); redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2212,48 +2030,43 @@ void menu() {
writeSetting(VIB_SQUELCH_ADDR,vibSquelch); writeSetting(VIB_SQUELCH_ADDR,vibSquelch);
break; break;
} }
clearSubValue();
plotVibSquelch(WHITE);
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
cursorNow = BLACK; cursorNow = BLACK;
redraw = true; redraw = true;
clearSubValue();
plotVibSquelch(WHITE);
} }
} else if (subVibDirection) { } else if (subVibDirection) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow ); redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN:
clearSubValue(); case BTN_DOWN: // fallthrough
vibDirection = !vibDirection;
plotVibDirection(WHITE);
cursorBlinkTime = timeNow;
break;
case BTN_UP: case BTN_UP:
// up
clearSubValue();
vibDirection = !vibDirection; vibDirection = !vibDirection;
plotVibDirection(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotVibDirection(WHITE);
subVibDirection = 0; subVibDirection = 0;
writeSetting(VIB_DIRECTION_ADDR,vibDirection); writeSetting(VIB_DIRECTION_ADDR,vibDirection);
break; break;
} }
cursorNow = BLACK; redrawSubValue = true;
redraw = true;
} }
} else { } else {
redraw |= updateMenuPage( vibratoMenuPage, timeNow ); redraw |= updateMenuPage( vibratoMenuPage, timeNow );
} }
} }
if(redrawSubValue && currentPage) {
clearSubValue();
redraw |= drawSubMenu(*currentPage, WHITE);
cursorNow = BLACK;
cursorBlinkTime = timeNow;
}
if(redraw) { if(redraw) {
display.display(); display.display();
} }