From ee6563e33f9ec1ff749492edab3a894939b6dac5 Mon Sep 17 00:00:00 2001 From: philmoz Date: Sat, 6 May 2023 10:02:51 +1000 Subject: [PATCH] fix(color): GV update header if unit is changed, keep FM values in range (#3563) Update title if unit is changed. Update FM values if outside min/max range for GV. --- radio/src/gui/colorlcd/model_gvars.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/colorlcd/model_gvars.cpp b/radio/src/gui/colorlcd/model_gvars.cpp index 2be4f8d68..3aefb1042 100644 --- a/radio/src/gui/colorlcd/model_gvars.cpp +++ b/radio/src/gui/colorlcd/model_gvars.cpp @@ -280,7 +280,7 @@ class GVarEditWindow : public Page protected: uint8_t index; gvar_t lastGVar = 0; - uint8_t lastPrec = 0; + bool refreshTitle = true; uint8_t lastFlightMode = 255; // Force initial setting of header title NumberEdit* min = nullptr; NumberEdit* max = nullptr; @@ -296,19 +296,22 @@ class GVarEditWindow : public Page void checkEvents() { Page::checkEvents(); + + auto curFM = getFlightMode(); + auto fmData = &g_model.flightModeData[curFM]; + if (gVarInHeader && - ((lastFlightMode != getFlightMode()) || - (lastGVar != g_model.flightModeData[getFlightMode()].gvars[index]) || - (lastPrec != g_model.gvars[index].prec))) { + ((lastFlightMode != curFM) || + (lastGVar != fmData->gvars[index]) || + refreshTitle)) { char label[32]; - lastFlightMode = getFlightMode(); - FlightModeData* fmData = &g_model.flightModeData[lastFlightMode]; + refreshTitle = false; + lastFlightMode = curFM; lastGVar = fmData->gvars[index]; - lastPrec = g_model.gvars[index].prec; sprintf(label, "%s%d=", STR_GV, index + 1); if (lastGVar > GVAR_MAX) { uint8_t fm = lastGVar - GVAR_MAX - 1; - if (fm >= lastFlightMode) fm++; + if (fm >= curFM) fm++; getFlightModeString(label + strlen(label), fm + 1); } else { strcat(label, getGVarValue(index, lastGVar, 0).c_str()); @@ -362,6 +365,8 @@ class GVarEditWindow : public Page if (fmData->gvars[index] <= GVAR_MAX || fm == 0) { values[fm]->setMin(GVAR_MIN + gvar->min); values[fm]->setMax(GVAR_MAX - gvar->max); + // Update value if outside min/max range + values[fm]->setValue(values[fm]->getValue()); LcdFlags flags = values[fm]->getTextFlags(); if (gvar->prec) @@ -415,6 +420,7 @@ class GVarEditWindow : public Page grid.nextCell(); input = new Choice(line, rect_t{}, "\001-%", 0, 1, GET_DEFAULT(gvar->unit), [=](int16_t newValue) { + refreshTitle = (gvar->unit != newValue); gvar->unit = newValue; SET_DIRTY(); setProperties(); @@ -428,6 +434,7 @@ class GVarEditWindow : public Page grid.nextCell(); input = new Choice(line, rect_t{}, STR_VPREC, 0, 1, GET_DEFAULT(gvar->prec), [=](int16_t newValue) { + refreshTitle = (gvar->prec != newValue); gvar->prec = newValue; SET_DIRTY(); setProperties();