From 746a2ae528072c6c9957f22eec96ada71c48c7d1 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 15 Apr 2018 09:47:35 +0200 Subject: [PATCH] Improve switch warning UI for 128x64 Taranis (#5822) * - Match X9 behavior - Made to handle replacing SH by a two pos and the future two additional switches - Use string tables to find switch standard designation * Compile fix --- radio/src/gui/128x64/model_setup.cpp | 120 ++++++++++++++++++++------- 1 file changed, 89 insertions(+), 31 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index be4fc31f6..012b61e01 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -25,6 +25,19 @@ uint8_t g_moduleIdx; void menuModelFailsafe(event_t event); #endif +#if defined(PCBTARANIS) +uint8_t getSwitchWarningsCount() +{ + int count = 0; + for (int i=0; i 5 ? TITLE_ROW : HIDDEN_ROW) #if !defined(TARANIS_INTERNAL_PPM) #define INTERNAL_MODULE_MODE_ROWS 0 // (OFF / RF protocols) #else @@ -248,7 +262,7 @@ void menuModelSetup(event_t event) #endif #if defined(PCBTARANIS) - MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, NUM_SWITCHES-1, NUM_POTS, NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_ROTARY_ENCODERS-1, 0, + MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, SW_WARN_ROWS, NUM_POTS, NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_ROTARY_ENCODERS-1, 0, LABEL(InternalModule), INTERNAL_MODULE_MODE_ROWS, INTERNAL_MODULE_CHANNELS_ROWS, @@ -541,7 +555,79 @@ void menuModelSetup(event_t event) g_model.disableThrottleWarning = !editCheckBox(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEWARNING, attr, event); break; +#if defined(PCBTARANIS) + case ITEM_MODEL_SWITCHES_WARNING2: + if (i==0) { + if (CURSOR_MOVED_LEFT(event)) + menuVerticalOffset--; + else + menuVerticalOffset++; + } + break; +#endif + case ITEM_MODEL_SWITCHES_WARNING: +#if defined(PCBTARANIS) + { + #define FIRSTSW_STR STR_VSRCRAW+(MIXSRC_FIRST_SWITCH-MIXSRC_Rud+1)*length + uint8_t length = pgm_read_byte(STR_VSRCRAW); + horzpos_t l_posHorz = menuHorizontalPosition; + + if (i>=NUM_BODY_LINES-2 && getSwitchWarningsCount() > 5*(NUM_BODY_LINES-i)) { + if (CURSOR_MOVED_LEFT(event)) + menuVerticalOffset--; + else + menuVerticalOffset++; + break; + } + + lcdDrawTextAlignedLeft(y, STR_SWITCHWARNING); + swarnstate_t states = g_model.switchWarningState; + char c; + if (attr) { + s_editMode = 0; + if (!READ_ONLY()) { + switch (event) { + case EVT_KEY_BREAK(KEY_ENTER): + break; + + case EVT_KEY_LONG(KEY_ENTER): + if (menuHorizontalPosition < 0) { + START_NO_HIGHLIGHT(); + getMovedSwitch(); + g_model.switchWarningState = switches_states; + AUDIO_WARNING1(); + storageDirty(EE_MODEL); + } + killEvents(event); + break; + } + } + } + + LcdFlags line = attr; + + int current = 0; + for (int i=0; i>= 2; + } + if (attr && menuHorizontalPosition < 0) { + lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 8*(2*FW+1), 1+FH*((current+4)/5)); + } +#else { lcdDrawTextAlignedLeft(y, STR_SWITCHWARNING); swarnstate_t states = g_model.switchWarningState; @@ -555,14 +641,9 @@ void menuModelSetup(event_t event) #if defined(CPUM64) g_model.switchWarningEnable ^= (1 << menuHorizontalPosition); storageDirty(EE_MODEL); -#else -#if defined(PCBTARANIS) - if (menuHorizontalPosition < NUM_SWITCHES) { - g_model.switchWarningEnable ^= (1 << (menuHorizontalPosition-1)); #else if (menuHorizontalPosition < NUM_SWITCHES-1) { g_model.switchWarningEnable ^= (1 << menuHorizontalPosition); -#endif storageDirty(EE_MODEL); } #endif @@ -574,13 +655,6 @@ void menuModelSetup(event_t event) g_model.switchWarningState = switches_states; AUDIO_WARNING1(); storageDirty(EE_MODEL); -#elif defined(PCBTARANIS) - if (attr && menuHorizontalPosition == 0) { - getMovedSwitch(); - g_model.switchWarningState = switches_states; - AUDIO_WARNING1(); - storageDirty(EE_MODEL); - } #else if (menuHorizontalPosition == NUM_SWITCHES-1) { START_NO_HIGHLIGHT(); @@ -596,23 +670,7 @@ void menuModelSetup(event_t event) } } LcdFlags line = attr; -#if defined(PCBTARANIS) - int current = 0; - for (int i=0; i>= 2; - } - if (attr && menuHorizontalPosition == 0) { - lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, (NUM_SWITCHES-1)*(2*FW), 1+FH*((current+7)/8)); - } -#else + for (uint8_t i=0; i