diff --git a/radio/src/gui/128x64/widgets.cpp b/radio/src/gui/128x64/widgets.cpp index be236fd82..7220f75ca 100644 --- a/radio/src/gui/128x64/widgets.cpp +++ b/radio/src/gui/128x64/widgets.cpp @@ -180,7 +180,7 @@ uint16_t editSrcVarFieldValue(coord_t x, coord_t y, const char* title, uint16_t lcdDrawNumber(x, y, v.value, attr); if (attr & (~RIGHT)) { value = checkIncDec(event, value, min, max, sourceMin, sourceMax, - EE_MODEL|INCDEC_SOURCE_VALUE|NO_INCDEC_MARKS, + EE_MODEL|INCDEC_SOURCE_VALUE|NO_INCDEC_MARKS|INCDEC_SKIP_VAL_CHECK_FUNC, isValueAvailable); } } diff --git a/radio/src/gui/212x64/widgets.cpp b/radio/src/gui/212x64/widgets.cpp index e3fce52c9..3d05ee954 100644 --- a/radio/src/gui/212x64/widgets.cpp +++ b/radio/src/gui/212x64/widgets.cpp @@ -138,7 +138,7 @@ uint16_t editSrcVarFieldValue(coord_t x, coord_t y, const char* title, uint16_t lcdDrawNumber(x, y, v.value, attr); if (attr & (~RIGHT)) { value = checkIncDec(event, value, min, max, sourceMin, sourceMax, - EE_MODEL|INCDEC_SOURCE_VALUE|NO_INCDEC_MARKS, + EE_MODEL|INCDEC_SOURCE_VALUE|NO_INCDEC_MARKS|INCDEC_SKIP_VAL_CHECK_FUNC, isValueAvailable); } } diff --git a/radio/src/gui/navigation/navigation.h b/radio/src/gui/navigation/navigation.h index f767a6bb7..f8beccf62 100644 --- a/radio/src/gui/navigation/navigation.h +++ b/radio/src/gui/navigation/navigation.h @@ -75,6 +75,7 @@ extern int8_t s_editMode; // global editmode #define NO_DBLKEYS 0x80 #define INCDEC_SOURCE_INVERT 0x100 #define INCDEC_SOURCE_VALUE 0x200 // Field can be source or value +#define INCDEC_SKIP_VAL_CHECK_FUNC 0x400 // Skip isValueAvailable function when changing value (only used for popup) int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_flags = 0, IsValueAvailable isValueAvailable = nullptr, diff --git a/radio/src/gui/navigation/navigation_9x.cpp b/radio/src/gui/navigation/navigation_9x.cpp index ab41177ef..04993d8b8 100644 --- a/radio/src/gui/navigation/navigation_9x.cpp +++ b/radio/src/gui/navigation/navigation_9x.cpp @@ -63,7 +63,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr else { newval++; } - } while (isValueAvailable && !isValueAvailable(newval) && + } while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= i_max); if (newval > i_max) { @@ -79,7 +79,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr } else { newval--; } - } while (isValueAvailable && !isValueAvailable(newval) && + } while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= i_min); if (newval < i_min) { diff --git a/radio/src/gui/navigation/navigation_x7.cpp b/radio/src/gui/navigation/navigation_x7.cpp index 056212460..a9636459c 100644 --- a/radio/src/gui/navigation/navigation_x7.cpp +++ b/radio/src/gui/navigation/navigation_x7.cpp @@ -79,7 +79,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr newval += min(rotaryEncoderGetAccel(), i_max - val); } - while (isValueAvailable && !isValueAvailable(newval) && newval <= i_max) { + while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= i_max) { newval++; } @@ -96,7 +96,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr newval -= min(rotaryEncoderGetAccel(), val - i_min); } - while (isValueAvailable && !isValueAvailable(newval) && newval >= i_min) { + while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= i_min) { newval--; }