Unified sub menu cursor blink

This commit is contained in:
Mikael Degerfält 2019-06-21 19:50:54 +02:00
parent bd84f16b1a
commit 2ea76d96d3

View file

@ -222,6 +222,21 @@ void drawMenuCursor(byte itemNo, byte color){
} }
static bool updateSubMenuCursor(const MenuPage &page, uint32_t timeNow)
{
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
int index = cursors[page.cursor];
// TODO: Make sure this is a MenuEntrySub
// TODO: Handle MenuEntrySubRotator case
// TODO: Null check subMenuFunc
((const MenuEntrySub*)page.entries[index])->subMenuFunc(cursorNow);
cursorBlinkTime = timeNow;
return true;
}
return false;
}
static void drawMenu(const MenuPage &page, const char* customTitle = nullptr) { static void drawMenu(const MenuPage &page, const char* customTitle = nullptr) {
//Initialize display and draw menu header + line //Initialize display and draw menu header + line
@ -561,7 +576,9 @@ static void drawSubRotator(int __unused color){
forceRedraw = 1; forceRedraw = 1;
} }
//***********************************************************
// TODO: Move these to a settings.cpp maybe?
void writeSetting(byte address, unsigned short value){ void writeSetting(byte address, unsigned short value){
union { union {
byte v[2]; byte v[2];
@ -582,7 +599,6 @@ unsigned short readSetting(byte address){
return data.val; return data.val;
} }
//*********************************************************** //***********************************************************
static int readTrills() { static int readTrills() {
@ -799,7 +815,7 @@ const AdjustMenuEntry* adjustMenuEntries[] = {
static const int numAdjustEntries = ARR_LEN(adjustMenuEntries); static const int numAdjustEntries = ARR_LEN(adjustMenuEntries);
//*********************************************************** //***********************************************************
void drawAdjCursor(byte color) { static void drawAdjCursor(byte color) {
display.drawTriangle(16,4,20,4,18,1,color); display.drawTriangle(16,4,20,4,18,1,color);
display.drawTriangle(16,6,20,6,18,9,color); display.drawTriangle(16,6,20,6,18,9,color);
} }
@ -1396,12 +1412,7 @@ void menu() {
stateFirstRun = 0; stateFirstRun = 0;
} }
if (subTranspose){ if (subTranspose){
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotTranspose(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1438,12 +1449,7 @@ void menu() {
} }
} }
} else if (subOctave){ } else if (subOctave){
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotOctave(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1482,12 +1488,7 @@ void menu() {
} }
} }
} else if (subMIDI) { } else if (subMIDI) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( mainMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotMIDI(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1696,12 +1697,7 @@ void menu() {
stateFirstRun = 0; stateFirstRun = 0;
} }
if (subBreathCC){ if (subBreathCC){
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotBreathCC(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1737,12 +1733,7 @@ void menu() {
redraw = true; redraw = true;
} }
} else if (subBreathAT) { } else if (subBreathAT) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotBreathAT(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1772,12 +1763,7 @@ void menu() {
redraw = true; redraw = true;
} }
} else if (subVelocity) { } else if (subVelocity) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotVelocity(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1807,12 +1793,7 @@ void menu() {
} }
} else if (subCurve) { } else if (subCurve) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotCurve(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1846,12 +1827,7 @@ void menu() {
} }
} else if (subVelSmpDl) { } else if (subVelSmpDl) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotVelSmpDl(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1885,12 +1861,7 @@ void menu() {
} }
} else if (subVelBias) { } else if (subVelBias) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( breathMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotVelBias(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1939,12 +1910,9 @@ void menu() {
stateFirstRun = 0; stateFirstRun = 0;
} }
if (subPort){ if (subPort){
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE; redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
plotPort(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -1977,12 +1945,7 @@ void menu() {
redraw = true; redraw = true;
} }
} else if (subPB) { } else if (subPB) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotPB(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2019,12 +1982,7 @@ void menu() {
} }
} }
} else if (subExtra) { } else if (subExtra) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotExtra(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2061,12 +2019,7 @@ void menu() {
} }
} }
} else if (subDeglitch) { } else if (subDeglitch) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotDeglitch(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2103,12 +2056,7 @@ void menu() {
} }
} }
} else if (subPinky) { } else if (subPinky) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { redraw |= updateSubMenuCursor( controlMenuPage, timeNow );
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotPinkyKey(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
@ -2153,177 +2101,127 @@ void menu() {
drawMenu(vibratoMenuPage); drawMenu(vibratoMenuPage);
stateFirstRun = 0; stateFirstRun = 0;
} }
if (subVibrato) { if (subVibrato) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE; redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
plotVibrato(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (vibrato > 0){ if (vibrato > 0)
plotVibrato(BLACK);
vibrato--; vibrato--;
plotVibrato(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (vibrato < 9)
if (vibrato < 9){
plotVibrato(BLACK);
vibrato++; vibrato++;
plotVibrato(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotVibrato(WHITE);
cursorNow = BLACK;
redraw = true;
subVibrato = 0; subVibrato = 0;
writeSetting(VIBRATO_ADDR,vibrato); writeSetting(VIBRATO_ADDR,vibrato);
break; break;
} }
} clearSubValue();
} else if (subVibSens) { plotVibrato(WHITE);
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { cursorNow = BLACK;
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotVibSens(cursorNow);
redraw = true; redraw = true;
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
} }
} else if (subVibSens) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (vibSens > 1){ if (vibSens > 1)
plotVibSens(BLACK);
vibSens--; vibSens--;
plotVibSens(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (vibSens < 12)
if (vibSens < 12){
plotVibSens(BLACK);
vibSens++; vibSens++;
plotVibSens(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotVibSens(WHITE);
cursorNow = BLACK;
redraw = true;
subVibSens = 0; subVibSens = 0;
writeSetting(VIB_SENS_ADDR,vibSens); writeSetting(VIB_SENS_ADDR,vibSens);
break; break;
} }
} clearSubValue();
} else if (subVibRetn) { plotVibSens(WHITE);
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) { cursorNow = BLACK;
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE;
plotVibRetn(cursorNow);
redraw = true; redraw = true;
cursorBlinkTime = timeNow; cursorBlinkTime = timeNow;
} }
} else if (subVibRetn) {
redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
clearSubValue(); if (vibRetn > 0)
if (vibRetn > 0){
vibRetn--; vibRetn--;
}
plotVibRetn(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_UP: case BTN_UP:
// up // up
clearSubValue(); if (vibRetn < 4)
if (vibRetn < 4){
vibRetn++; vibRetn++;
}
plotVibRetn(WHITE);
cursorBlinkTime = timeNow;
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu // menu
plotVibRetn(WHITE);
subVibRetn = 0; subVibRetn = 0;
writeSetting(VIB_RETN_ADDR,vibRetn); writeSetting(VIB_RETN_ADDR,vibRetn);
break; break;
} }
cursorBlinkTime = timeNow;
cursorNow = BLACK; cursorNow = BLACK;
redraw = true; redraw = true;
clearSubValue();
plotVibRetn(WHITE);
} }
} else if (subVibSquelch) { } else if (subVibSquelch) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE; redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
plotVibSquelch(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){
case BTN_DOWN: case BTN_DOWN:
if (vibSquelch > 1){ if (vibSquelch > 1)
clearSubValue();
vibSquelch--; vibSquelch--;
plotVibSquelch(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_UP: case BTN_UP:
// up if (vibSquelch < 30)
if (vibSquelch < 30){
clearSubValue();
vibSquelch++; vibSquelch++;
plotVibSquelch(WHITE);
cursorNow = BLACK;
redraw = true;
cursorBlinkTime = timeNow;
}
break; break;
case BTN_ENTER: // fallthrough case BTN_ENTER: // fallthrough
case BTN_MENU: case BTN_MENU:
// menu
plotVibSquelch(WHITE);
cursorNow = BLACK;
redraw = true;
subVibSquelch = 0; subVibSquelch = 0;
writeSetting(VIB_SQUELCH_ADDR,vibSquelch); writeSetting(VIB_SQUELCH_ADDR,vibSquelch);
break; break;
} }
cursorBlinkTime = timeNow;
cursorNow = BLACK;
redraw = true;
clearSubValue();
plotVibSquelch(WHITE);
} }
} else if (subVibDirection) { } else if (subVibDirection) {
if ((timeNow - cursorBlinkTime) > cursorBlinkInterval) {
if (cursorNow == WHITE) cursorNow = BLACK; else cursorNow = WHITE; redraw |= updateSubMenuCursor( vibratoMenuPage, timeNow );
plotVibDirection(cursorNow);
redraw = true;
cursorBlinkTime = timeNow;
}
if (buttonPressedAndNotUsed){ if (buttonPressedAndNotUsed){
buttonPressedAndNotUsed = 0; buttonPressedAndNotUsed = 0;
switch (deumButtonState){ switch (deumButtonState){