fix(radio): GV calculation and menu navigation in weight/offset/expo fields (#5564)

This commit is contained in:
philmoz
2024-10-10 11:43:14 +10:00
committed by GitHub
parent fcc75bd6b7
commit 7f727cb15c
6 changed files with 31 additions and 25 deletions
+1 -2
View File
@@ -78,8 +78,7 @@ void onSourceLongEnterPress(const char * result)
if (result == STR_MENU_INPUTS) {
checkIncDecSelection =
getFirstAvailable(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT,
isInputAvailable) +
1;
isInputAvailable);
}
#if defined(LUA_MODEL_SCRIPTS)
else if (result == STR_MENU_LUA) {
+2 -2
View File
@@ -181,7 +181,7 @@ inline int showPopupMenus(event_t event, int newval, int i_min, int i_max,
return newval;
}
int checkMovedInput(int newval, int i_min, int i_max, unsigned int i_flags, bool isSource)
int checkMovedInput(int newval, unsigned int i_flags, bool isSource)
{
#if defined(AUTOSWITCH)
if (i_flags & INCDEC_SWITCH) {
@@ -191,7 +191,7 @@ int checkMovedInput(int newval, int i_min, int i_max, unsigned int i_flags, bool
#if defined(AUTOSOURCE)
if (i_flags & (INCDEC_SOURCE|INCDEC_SOURCE_VALUE)) {
int source = getMovedSource(i_min);
int source = getMovedSource(MIXSRC_FIRST_STICK);
if (source) {
if (i_flags & INCDEC_SOURCE_VALUE) {
if (isSource) {
+11 -9
View File
@@ -35,12 +35,11 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
int newval = val;
bool isSource = false;
bool origIsSource = false;
if (i_flags & INCDEC_SOURCE_VALUE) {
SourceNumVal v;
v.rawValue = val;
// Save isSource flag;
origIsSource = isSource = v.isSource;
isSource = v.isSource;
// Remove isSource flag;
val = v.value;
newval = v.value;
@@ -54,19 +53,22 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
val = -val;
}
int vmin = isSource ? srcMin : i_min;
int vmax = isSource ? srcMax : i_max;
if (event == EVT_KEY_FIRST(KEY_UP) || event == EVT_KEY_REPT(KEY_UP) ||
event == EVT_KEY_FIRST(KEY_RIGHT) || event == EVT_KEY_REPT(KEY_RIGHT)) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval += min(10, i_max - val);
newval += min(10, vmax - val);
}
else {
newval++;
}
} while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) &&
newval <= i_max);
newval <= vmax);
if (newval > i_max) {
if (newval > vmax) {
newval = val;
killEvents(event);
AUDIO_KEY_ERROR();
@@ -75,21 +77,21 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
event == EVT_KEY_FIRST(KEY_LEFT) || event == EVT_KEY_REPT(KEY_LEFT)) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val - i_min);
newval -= min(10, val - vmin);
} else {
newval--;
}
} while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) &&
newval >= i_min);
newval >= vmin);
if (newval < i_min) {
if (newval < vmin) {
newval = val;
killEvents(event);
AUDIO_KEY_ERROR();
}
}
auto moved = checkMovedInput(newval, i_min, i_max, i_flags, isSource);
auto moved = checkMovedInput(newval, i_flags, isSource);
if (!isValueAvailable || isValueAvailable(moved))
newval = moved;
+14 -9
View File
@@ -54,6 +54,8 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
if (i_flags & INCDEC_SOURCE_VALUE) {
SourceNumVal v;
v.rawValue = val;
// Save isSource flag;
isSource = v.isSource;
// Remove isSource flag;
val = v.value;
newval = v.value;
@@ -67,20 +69,23 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
val = -val;
}
int vmin = isSource ? srcMin : i_min;
int vmax = isSource ? srcMax : i_max;
if (event == evt_rot_inc || event == EVT_KEY_FIRST(KEY_PLUS) ||
event == EVT_KEY_REPT(KEY_PLUS)) {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval += min(10, i_max - val);
newval += min(10, vmax - val);
} else {
newval += min<int>(rotaryEncoderGetAccel(), i_max - val);
newval += min<int>(rotaryEncoderGetAccel(), vmax - val);
}
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= i_max) {
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= vmax) {
newval++;
}
if (newval > i_max) {
if (newval > vmax) {
newval = val;
AUDIO_KEY_ERROR();
}
@@ -88,22 +93,22 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
event == EVT_KEY_REPT(KEY_MINUS)) {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val - i_min);
newval -= min(10, val - vmin);
} else {
newval -= min<int>(rotaryEncoderGetAccel(), val - i_min);
newval -= min<int>(rotaryEncoderGetAccel(), val - vmin);
}
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= i_min) {
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= vmin) {
newval--;
}
if (newval < i_min) {
if (newval < vmin) {
newval = val;
AUDIO_KEY_ERROR();
}
}
auto moved = checkMovedInput(newval, i_min, i_max, i_flags, isSource);
auto moved = checkMovedInput(newval, i_flags, isSource);
if (!isValueAvailable || isValueAvailable(moved))
newval = moved;