feat(color): handle long press enter for pre-flight switch checks (#6282)

This commit is contained in:
philmoz
2025-05-26 10:34:20 +10:00
committed by GitHub
parent 0e933de27e
commit 936a66bcd8
6 changed files with 51 additions and 34 deletions
+1 -11
View File
@@ -1206,17 +1206,7 @@ void menuModelSetup(event_t event)
if (menuHorizontalPosition < 0 ||
menuHorizontalPosition >= switchWarningsCount) {
START_NO_HIGHLIGHT();
getMovedSwitch();
// Mask switches enabled for warnings
swarnstate_t sw_mask = 0;
for(uint8_t i = 0; i < switchGetMaxSwitches(); i++) {
if (SWITCH_WARNING_ALLOWED(i))
if (g_model.switchWarning & (0x07 << (3 * i)))
sw_mask |= (0x07 << (3 * i));
}
g_model.switchWarning = switches_states & sw_mask;
AUDIO_WARNING1();
storageDirty(EE_MODEL);
setAllPreflightSwitchStates();
}
break;
}
+1 -11
View File
@@ -879,17 +879,7 @@ void menuModelSetup(event_t event)
killEvents(event);
if (menuHorizontalPosition < 0) {
START_NO_HIGHLIGHT();
getMovedSwitch();
// Mask switches enabled for warnings
swarnstate_t sw_mask = 0;
for(uint8_t i = 0; i < switchGetMaxSwitches(); i++) {
if (SWITCH_WARNING_ALLOWED(i))
if (g_model.switchWarning & (0x07 << (3 * i)))
sw_mask |= (0x07 << (3 * i));
}
g_model.switchWarning = switches_states & sw_mask;
AUDIO_WARNING1();
storageDirty(EE_MODEL);
setAllPreflightSwitchStates();
}
break;
}
@@ -26,11 +26,12 @@ static void btnmatrix_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj)
{
etx_obj_add_style(obj, styles->rounded, LV_PART_MAIN);
etx_obj_add_style(obj, styles->bg_opacity_20,
LV_PART_MAIN | LV_STATE_FOCUSED);
LV_PART_MAIN | LV_STATE_EDITED);
etx_bg_color(obj, COLOR_THEME_FOCUS_INDEX, LV_PART_MAIN | LV_STATE_FOCUSED);
etx_solid_bg(obj, COLOR_THEME_FOCUS_INDEX, LV_PART_MAIN | LV_STATE_FOCUSED);
etx_std_style(obj, LV_PART_ITEMS, PAD_LARGE);
etx_remove_border_color(obj, LV_PART_ITEMS | LV_STATE_FOCUSED);
etx_obj_add_style(obj, styles->border_color[COLOR_THEME_FOCUS_INDEX],
LV_PART_ITEMS | LV_STATE_EDITED);
@@ -82,7 +83,7 @@ ButtonMatrix::ButtonMatrix(Window* parent, const rect_t& r) :
lv_obj_add_flag(lvobj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
lv_obj_clear_flag(lvobj, LV_OBJ_FLAG_CLICK_FOCUSABLE);
lv_obj_add_event_cb(lvobj, btn_matrix_event, LV_EVENT_ALL, this);
lv_obj_add_event_cb(lvobj, btn_matrix_event, LV_EVENT_VALUE_CHANGED, this);
}
ButtonMatrix::~ButtonMatrix() { deallocate(); }
@@ -47,13 +47,7 @@ class SwitchWarnMatrix : public ButtonMatrix
initBtnMap(min((int)btn_cnt, SW_BTNS), btn_cnt);
uint8_t btn_id = 0;
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
if (SWITCH_WARNING_ALLOWED(i)) {
setTextAndState(btn_id);
btn_id++;
}
}
setAllState();
update();
@@ -65,8 +59,13 @@ class SwitchWarnMatrix : public ButtonMatrix
padAll(PAD_SMALL);
}
void onPress(uint8_t btn_id)
void onPress(uint8_t btn_id) override
{
if (longPress) {
longPress = false;
return;
}
if (btn_id >= MAX_SWITCHES) return;
auto sw = sw_idx[btn_id];
@@ -83,7 +82,7 @@ class SwitchWarnMatrix : public ButtonMatrix
setTextAndState(btn_id);
}
bool isActive(uint8_t btn_id)
bool isActive(uint8_t btn_id) override
{
if (btn_id >= MAX_SWITCHES) return false;
return bfGet(g_model.switchWarning, 3 * sw_idx[btn_id], 3) != 0;
@@ -105,6 +104,26 @@ class SwitchWarnMatrix : public ButtonMatrix
private:
uint8_t sw_idx[MAX_SWITCHES];
bool longPress = false;
void setAllState()
{
uint8_t btn_id = 0;
for (uint8_t i = 0; i < MAX_SWITCHES; i++) {
if (SWITCH_WARNING_ALLOWED(i)) {
setTextAndState(btn_id);
btn_id++;
}
}
}
bool onLongPress() override
{
longPress = true;
setAllPreflightSwitchStates();
setAllState();
return true;
}
};
class PotWarnMatrix : public ButtonMatrix
+15
View File
@@ -1213,3 +1213,18 @@ void logicalSwitchesCopyState(uint8_t src, uint8_t dst)
{
lswFm[dst] = lswFm[src];
}
void setAllPreflightSwitchStates()
{
getMovedSwitch();
// Mask switches enabled for warnings
swarnstate_t sw_mask = 0;
for(uint8_t i = 0; i < switchGetMaxSwitches(); i++) {
if (SWITCH_WARNING_ALLOWED(i))
if (g_model.switchWarning & (0x07 << (3 * i)))
sw_mask |= (0x07 << (3 * i));
}
g_model.switchWarning = switches_states & sw_mask;
AUDIO_WARNING1();
storageDirty(EE_MODEL);
}
+2
View File
@@ -111,3 +111,5 @@ void fsLedRGB(uint8_t, uint32_t color);
uint32_t fsGetLedRGB(uint8_t index);
uint8_t getRGBColorIndex(uint32_t color);
#endif
void setAllPreflightSwitchStates();