fix(bw128): improve logical switch navigation & editing (#5096)

This commit is contained in:
philmoz
2024-06-02 08:39:44 +10:00
committed by GitHub
parent 3fe1090b33
commit 869a3ab394
+12 -14
View File
@@ -69,8 +69,6 @@ void menuModelLogicalSwitchOne(event_t event)
int8_t sub = menuVerticalPosition;
int v1_val = cs->v1;
for (uint8_t k=0; k<LCD_LINES-1; k++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
uint8_t i = k + menuVerticalOffset;
@@ -84,10 +82,11 @@ void menuModelLogicalSwitchOne(event_t event)
cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL);
uint8_t new_cstate = lswFamily(cs->func);
if (cstate != new_cstate) {
if (new_cstate == LS_FAMILY_TIMER) {
cstate = new_cstate;
if (cstate == LS_FAMILY_TIMER) {
cs->v1 = cs->v2 = -119;
}
else if (new_cstate == LS_FAMILY_EDGE) {
else if (cstate == LS_FAMILY_EDGE) {
cs->v1 = 0; cs->v2 = -129; cs->v3 = 0;
}
else {
@@ -103,7 +102,7 @@ void menuModelLogicalSwitchOne(event_t event)
lcdDrawTextAlignedLeft(y, STR_V1);
int v1_min=0, v1_max=MIXSRC_LAST_TELEM;
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY || cstate == LS_FAMILY_EDGE) {
drawSwitch(CSWONE_2ND_COLUMN, y, v1_val, attr);
drawSwitch(CSWONE_2ND_COLUMN, y, cs->v1, attr);
v1_min = SWSRC_FIRST_IN_LOGICAL_SWITCHES; v1_max = SWSRC_LAST_IN_LOGICAL_SWITCHES;
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SWITCH);
INCDEC_ENABLE_CHECK(isSwitchAvailableInLogicalSwitches);
@@ -114,13 +113,12 @@ void menuModelLogicalSwitchOne(event_t event)
v1_max = 122;
}
else {
v1_val = cs->v1;
drawSource(CSWONE_2ND_COLUMN, y, v1_val, attr);
drawSource(CSWONE_2ND_COLUMN, y, cs->v1, attr);
INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE | INCDEC_SOURCE_INVERT);
INCDEC_ENABLE_CHECK(isSourceAvailable);
}
if (attr) {
cs->v1 = CHECK_INCDEC_PARAM(event, v1_val, v1_min, v1_max);
cs->v1 = CHECK_INCDEC_PARAM(event, cs->v1, v1_min, v1_max);
}
break;
}
@@ -156,9 +154,9 @@ void menuModelLogicalSwitchOne(event_t event)
INCDEC_ENABLE_CHECK(isSourceAvailable);
}
else {
if (v1_val >= MIXSRC_FIRST_TELEM) {
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, v1_val, convertLswTelemValue(cs), attr|LEFT);
v2_max = maxTelemValue(v1_val - MIXSRC_FIRST_TELEM + 1);
if (abs(cs->v1) >= MIXSRC_FIRST_TELEM) {
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, cs->v1, convertLswTelemValue(cs), attr|LEFT);
v2_max = maxTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1);
if ((cs->func == LS_FUNC_APOS) || (cs->func == LS_FUNC_ANEG) || (cs->func == LS_FUNC_ADIFFEGREATER))
v2_min = 0;
else
@@ -172,10 +170,10 @@ void menuModelLogicalSwitchOne(event_t event)
else
{
LcdFlags lf = attr | LEFT;
getMixSrcRange(v1_val, v2_min, v2_max, &lf);
getMixSrcRange(cs->v1, v2_min, v2_max, &lf);
if ((cs->func == LS_FUNC_APOS) || (cs->func == LS_FUNC_ANEG) || (cs->func == LS_FUNC_ADIFFEGREATER))
v2_min = 0;
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, v1_val, (abs(v1_val) <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2), lf);
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, cs->v1, (abs(cs->v1) <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2), lf);
}
}
@@ -256,7 +254,7 @@ void menuModelLogicalSwitches(event_t event)
uint8_t k = 0;
int8_t sub = menuVerticalPosition - HEADER_LINE;
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
if ((event == EVT_KEY_BREAK(KEY_ENTER)) || (event == EVT_KEY_LONG(KEY_ENTER))) {
LogicalSwitchData * cs = lswAddress(sub);
if (cs->func)
s_currIdx = sub;