From e398889069856e4d939ff9de57036617e51c5426 Mon Sep 17 00:00:00 2001 From: philmoz Date: Wed, 11 Sep 2024 16:08:06 +1000 Subject: [PATCH 1/4] Add collapsable sections to B&W radio setup tab. --- radio/src/gui/128x64/model_setup.cpp | 30 +--- radio/src/gui/128x64/radio_setup.cpp | 204 ++++++++++++++++++--------- radio/src/gui/212x64/model_setup.cpp | 23 +-- radio/src/gui/212x64/radio_setup.cpp | 187 ++++++++++++++---------- 4 files changed, 257 insertions(+), 187 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 46c0a9ed023..90240241de4 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -238,41 +238,21 @@ PACK(struct ExpandState { uint8_t functionSwitches:1; }); -struct ExpandState expandState; +static struct ExpandState expandState; -uint8_t PREFLIGHT_ROW(uint8_t value) -{ - if (expandState.preflight) - return value; - return HIDDEN_ROW; -} +static uint8_t PREFLIGHT_ROW(uint8_t value) { return expandState.preflight ? value : HIDDEN_ROW; } -uint8_t THROTTLE_ROW(uint8_t value) -{ - if (expandState.throttle) - return value; - return HIDDEN_ROW; -} +static uint8_t THROTTLE_ROW(uint8_t value) { return expandState.throttle ? value : HIDDEN_ROW; } #if defined(FUNCTION_SWITCHES) -uint8_t FS_ROW(uint8_t value) -{ - if (expandState.functionSwitches) - return value; - return HIDDEN_ROW; -} +static uint8_t FS_ROW(uint8_t value) { return expandState.functionSwitches ? value : HIDDEN_ROW; } uint8_t G1_ROW(int8_t value) { return (firstSwitchInGroup(1) >= 0) ? value : HIDDEN_ROW; } uint8_t G2_ROW(int8_t value) { return (firstSwitchInGroup(2) >= 0) ? value : HIDDEN_ROW; } uint8_t G3_ROW(int8_t value) { return (firstSwitchInGroup(3) >= 0) ? value : HIDDEN_ROW; } #endif -uint8_t VIEWOPT_ROW(uint8_t value) -{ - if (expandState.viewOpt) - return value; - return HIDDEN_ROW; -} +static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } #define MODEL_SETUP_2ND_COLUMN (LCD_W-11*FW) #define MODEL_SETUP_SET_FAILSAFE_OFS 7*FW-2 diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index c10ec4afad9..3f31ebe5e5f 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -64,6 +64,7 @@ enum { CASE_AUDIO(ITEM_RADIO_SETUP_SPEAKER_PITCH) ITEM_RADIO_SETUP_WAV_VOLUME, ITEM_RADIO_SETUP_BACKGROUND_VOLUME, + ITEM_RADIO_SETUP_START_SOUND, CASE_VARIO(ITEM_RADIO_SETUP_VARIO_LABEL) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_VOLUME) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_PITCH) @@ -90,7 +91,6 @@ enum { CASE_CONTRAST(ITEM_RADIO_SETUP_CONTRAST) CASE_BACKLIGHT(ITEM_RADIO_SETUP_FLASH_BEEP) CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) - ITEM_RADIO_SETUP_START_SOUND, CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_OFF_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_AUTO_OFF) @@ -127,6 +127,47 @@ enum { ITEM_RADIO_SETUP_MAX }; +PACK(struct ExpandState { + uint8_t sound:1; + uint8_t vario:1; + uint8_t haptic:1; +#if defined(IMU) + uint8_t imu:1; +#endif + uint8_t alarms:1; +#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) + uint8_t backlight:1; +#endif +#if defined(GPS) + uint8_t gps:1; +#endif + uint8_t viewOpt:1; +}); + +static struct ExpandState expandState; + +static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } + +static uint8_t VARIO_ROW(uint8_t value) { return expandState.vario ? value : HIDDEN_ROW; } + +static uint8_t HAPTIC_ROW(uint8_t value) { return expandState.haptic ? value : HIDDEN_ROW; } + +#if defined(IMU) +static uint8_t IMU_ROW(uint8_t value) { return expandState.imu ? value : HIDDEN_ROW; } +#endif + +static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } + +#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) +static uint8_t BACKLIGHT_ROW(uint8_t value) { return expandState.backlight ? value : HIDDEN_ROW; } +#endif + +#if defined(GPS) +static uint8_t GPS_ROW(uint8_t value) { return expandState.gps ? value : HIDDEN_ROW; } +#endif + +static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } + uint8_t viewOptCheckBox(coord_t y, const char* title, uint8_t value, uint8_t attr, event_t event, uint8_t modelOption) { if (modelOption != OVERRIDE_GLOBAL) { @@ -163,45 +204,64 @@ void menuRadioSetup(event_t event) uint8_t old_editMode = s_editMode; #endif - MENU(STR_RADIO_SETUP, menuTabGeneral, MENU_RADIO_SETUP, HEADER_LINE+ITEM_RADIO_SETUP_MAX, { - HEADER_LINE_COLUMNS CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) - LABEL(SOUND), CASE_AUDIO(0) - CASE_BUZZER(0) - 0, 0, 0, 0, 0, CASE_AUDIO(0) - CASE_VARIO(LABEL(VARIO)) - CASE_VARIO(0) - CASE_VARIO(0) - CASE_VARIO(0) + MENU(STR_RADIO_SETUP, menuTabGeneral, MENU_RADIO_SETUP, ITEM_RADIO_SETUP_MAX, { + HEADER_LINE_COLUMNS + CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) + // Sound + 0, + CASE_AUDIO(SOUND_ROW(0)) + CASE_BUZZER(SOUND_ROW(0)) + SOUND_ROW(0), + SOUND_ROW(0), + SOUND_ROW(0), + CASE_AUDIO(SOUND_ROW(0)) + SOUND_ROW(0), + SOUND_ROW(0), + SOUND_ROW(0), + // Vario CASE_VARIO(0) - CASE_HAPTIC(LABEL(HAPTIC)) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + // Haptic CASE_HAPTIC(0) - CASE_HAPTIC(0) - CASE_HAPTIC(0) - CASE_IMU(LABEL(IMU)) - CASE_IMU(0) + CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(HAPTIC_ROW(0)) + // IMU CASE_IMU(0) - LABEL(ALARMS), 0, - 0, 0, 0, 0, 0,/* ITEM_RADIO_SETUP_INACTIVITY_ALARM ITEM_RADIO_SETUP_MEMORY_WARNING ITEM_RADIO_SETUP_ALARM_WARNING ITEM_RADIO_SETUP_RSSI_POWEROFF_ALARM ITEM_RADIO_SETUP_TRAINER_POWEROFF_ALARM*/ - CASE_BACKLIGHT(LABEL(BACKLIGHT)) - CASE_BACKLIGHT(0) - CASE_BACKLIGHT(0) - CASE_BACKLIGHT(0) - CASE_CONTRAST(0) + CASE_IMU(IMU_ROW(0)) + CASE_IMU(IMU_ROW(0)) + // Alarms + 0, + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + // Backlight CASE_BACKLIGHT(0) + CASE_BACKLIGHT(BACKLIGHT_ROW(0)) + CASE_BACKLIGHT(BACKLIGHT_ROW(0)) + CASE_BACKLIGHT(BACKLIGHT_ROW(0)) + CASE_CONTRAST(BACKLIGHT_ROW(0)) + CASE_BACKLIGHT(BACKLIGHT_ROW(0)) CASE_SPLASH_PARAM(0) - 0, CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0) CASE_HAPTIC(0) // power on/off haptic CASE_PXX2(0) /* owner registration ID */ - - CASE_GPS(0) - CASE_GPS(0) - CASE_GPS(0) + // GPS CASE_GPS(0) + CASE_GPS(GPS_ROW(0)) + CASE_GPS(GPS_ROW(0)) + CASE_GPS(GPS_ROW(0)) CASE_PXX1(0) - 0, 0, 0, IF_FAI_CHOICE(0) + 0, 0, 0, + IF_FAI_CHOICE(0) 0, 0, // USB mode CASE_JACK_DETECT(0) // Jack mode @@ -209,19 +269,20 @@ void menuRadioSetup(event_t event) CASE_ROTARY_ENCODER(0) CASE_TX_MODE(LABEL(TX_MODE)) CASE_TX_MODE(0) - LABEL(ViewOptions), - LABEL(RadioMenuTabs), - 0, - 0, - LABEL(ModelMenuTabs), - CASE_HELI(0) - CASE_FLIGHT_MODES(0) - 0, - 0, - 0, - CASE_LUA_MODEL_SCRIPTS(0) - 0, - 1/*to force edit mode*/}); + // View options + 0, + VIEWOPT_ROW(LABEL(RadioMenuTabs)), + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + VIEWOPT_ROW(LABEL(ModelMenuTabs)), + CASE_HELI(VIEWOPT_ROW(0)) + CASE_FLIGHT_MODES(VIEWOPT_ROW(0)) + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + CASE_LUA_MODEL_SCRIPTS(VIEWOPT_ROW(0)) + VIEWOPT_ROW(0), + }); if (event == EVT_ENTRY) { reusableBuffer.generalSettings.stickMode = g_eeGeneral.stickMode; @@ -235,8 +296,16 @@ void menuRadioSetup(event_t event) for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS); - uint8_t attr = (sub == k ? blink : 0); + for (int j=0; j<=k; j++) { + if (mstate_tab[j+HEADER_LINE] == HIDDEN_ROW) { + if (++k >= (int)DIM(mstate_tab)) { + return; + } + } + } + + LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS); + LcdFlags attr = (sub == k ? blink : 0); switch (k) { #if defined(RTCLOCK) @@ -315,7 +384,7 @@ void menuRadioSetup(event_t event) #endif case ITEM_RADIO_SETUP_SOUND_LABEL: - lcdDrawTextAlignedLeft(y, STR_SOUND_LABEL); + expandState.sound = expandableSection(y, STR_SOUND_LABEL, expandState.sound, attr, event); break; #if defined(AUDIO) @@ -381,9 +450,13 @@ void menuRadioSetup(event_t event) break; #endif + case ITEM_RADIO_SETUP_START_SOUND: + g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, LCD_W-9, y, STR_PLAY_HELLO, attr, event, INDENT_WIDTH) ; + break; + #if defined(VARIO) case ITEM_RADIO_SETUP_VARIO_LABEL: - lcdDrawTextAlignedLeft(y, STR_VARIO); + expandState.vario = expandableSection(y, STR_VARIO, expandState.vario, attr, event); break; case ITEM_RADIO_SETUP_VARIO_VOLUME: @@ -414,7 +487,7 @@ void menuRadioSetup(event_t event) #if defined(HAPTIC) case ITEM_RADIO_SETUP_HAPTIC_LABEL: - lcdDrawTextAlignedLeft(y, STR_HAPTIC_LABEL); + expandState.haptic = expandableSection(y, STR_HAPTIC_LABEL, expandState.haptic, attr, event); break; case ITEM_RADIO_SETUP_HAPTIC_MODE: @@ -432,7 +505,7 @@ void menuRadioSetup(event_t event) #if defined(IMU) case ITEM_RADIO_SETUP_IMU_LABEL: - lcdDrawTextAlignedLeft(y, STR_IMU_LABEL); + expandState.imu = expandableSection(y, STR_IMU_LABEL, expandState.imu, attr, event); break; case ITEM_RADIO_SETUP_IMU_MAX: @@ -466,19 +539,8 @@ void menuRadioSetup(event_t event) break; #endif -#if !defined(OLED_SCREEN) - case ITEM_RADIO_SETUP_CONTRAST: - lcdDrawTextIndented(y, STR_CONTRAST); - lcdDrawNumber(LCD_W-2, y, g_eeGeneral.contrast, attr|RIGHT); - if (attr) { - CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); - lcdSetContrast(); - } - break; -#endif - case ITEM_RADIO_SETUP_ALARMS_LABEL: - lcdDrawTextAlignedLeft(y, STR_ALARMS_LABEL); + expandState.alarms = expandableSection(y, STR_ALARMS_LABEL, expandState.alarms, attr, event); break; case ITEM_RADIO_SETUP_BATTERY_WARNING: @@ -526,9 +588,9 @@ void menuRadioSetup(event_t event) #if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) case ITEM_RADIO_SETUP_BACKLIGHT_LABEL: #if defined(OLED_SCREEN) - lcdDrawTextAlignedLeft(y, STR_BRIGHTNESS); + expandState.backlight = expandableSection(y, STR_BRIGHTNESS, expandState.backlight, attr, event); #else - lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL); + expandState.backlight = expandableSection(y, STR_BACKLIGHT_LABEL, expandState.backlight, attr, event); #endif break; @@ -565,6 +627,17 @@ void menuRadioSetup(event_t event) break; #endif +#if !defined(OLED_SCREEN) + case ITEM_RADIO_SETUP_CONTRAST: + lcdDrawTextIndented(y, STR_CONTRAST); + lcdDrawNumber(LCD_W-2, y, g_eeGeneral.contrast, attr|RIGHT); + if (attr) { + CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); + lcdSetContrast(); + } + break; +#endif + case ITEM_RADIO_SETUP_DISABLE_SPLASH: { lcdDrawTextAlignedLeft(y, STR_SPLASHSCREEN); @@ -579,11 +652,6 @@ void menuRadioSetup(event_t event) break; } - case ITEM_RADIO_SETUP_START_SOUND: - lcdDrawTextAlignedLeft(y, STR_PLAY_HELLO); - g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, LCD_W-9, y, nullptr, attr, event ) ; - break; - #if defined(PWR_BUTTON_PRESS) case ITEM_RADIO_SETUP_PWR_ON_SPEED: g_eeGeneral.pwrOnSpeed = pwrDelayToYaml(editChoice(LCD_W-2, y, STR_PWR_ON_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOnSpeed), 0, 4, attr|RIGHT, event)); @@ -626,7 +694,7 @@ void menuRadioSetup(event_t event) #if defined(GPS) case ITEM_RADIO_SETUP_LABEL_GPS: - lcdDrawTextAlignedLeft(y, STR_GPS); + expandState.gps = expandableSection(y, STR_GPS, expandState.gps, attr, event); break; case ITEM_RADIO_SETUP_TIMEZONE: @@ -772,7 +840,7 @@ void menuRadioSetup(event_t event) #endif case ITEM_VIEW_OPTIONS_LABEL: - lcdDrawTextAlignedLeft(y, STR_ENABLED_FEATURES); + expandState.viewOpt = expandableSection(y, STR_ENABLED_FEATURES, expandState.viewOpt, attr, event); break; case ITEM_VIEW_OPTIONS_RADIO_TAB: lcdDrawText(INDENT_WIDTH-2, y, TR_RADIO_MENU_TABS); diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 86e8313bb77..0082894d824 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -205,28 +205,13 @@ PACK(struct ExpandState { uint8_t viewOpt:1; }); -struct ExpandState expandState; +static struct ExpandState expandState; -uint8_t PREFLIGHT_ROW(uint8_t value) -{ - if (expandState.preflight) - return value; - return HIDDEN_ROW; -} +static uint8_t PREFLIGHT_ROW(uint8_t value) { return expandState.preflight ? value : HIDDEN_ROW; } -uint8_t THROTTLE_ROW(uint8_t value) -{ - if (expandState.throttle) - return value; - return HIDDEN_ROW; -} +static uint8_t THROTTLE_ROW(uint8_t value) { return expandState.throttle ? value : HIDDEN_ROW; } -uint8_t VIEWOPT_ROW(uint8_t value) -{ - if (expandState.viewOpt) - return value; - return HIDDEN_ROW; -} +static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } void copySelection(char * dst, const char * src, uint8_t size) { diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index a2e5fbb054c..b325f0bf007 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -55,6 +55,7 @@ enum MenuRadioSetupItems { ITEM_RADIO_SETUP_SPEAKER_PITCH, ITEM_RADIO_SETUP_WAV_VOLUME, ITEM_RADIO_SETUP_BACKGROUND_VOLUME, + ITEM_RADIO_SETUP_START_SOUND, CASE_VARIO(ITEM_RADIO_SETUP_VARIO_LABEL) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_VOLUME) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_PITCH) @@ -79,7 +80,6 @@ enum MenuRadioSetupItems { CASE_PCBX9E_PCBX9DP(ITEM_RADIO_SETUP_BACKLIGHT_COLOR) ITEM_RADIO_SETUP_FLASH_BEEP, CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) - ITEM_RADIO_SETUP_START_SOUND, CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_OFF_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_AUTO_OFF) @@ -118,6 +118,36 @@ enum MenuRadioSetupItems { ITEM_RADIO_SETUP_MAX }; +PACK(struct ExpandState { + uint8_t sound:1; + uint8_t vario:1; + uint8_t haptic:1; + uint8_t alarms:1; + uint8_t backlight:1; +#if defined(GPS) + uint8_t gps:1; +#endif + uint8_t viewOpt:1; +}); + +static struct ExpandState expandState; + +static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } + +static uint8_t VARIO_ROW(uint8_t value) { return expandState.vario ? value : HIDDEN_ROW; } + +static uint8_t HAPTIC_ROW(uint8_t value) { return expandState.haptic ? value : HIDDEN_ROW; } + +static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } + +static uint8_t BACKLIGHT_ROW(uint8_t value) { return expandState.backlight ? value : HIDDEN_ROW; } + +#if defined(GPS) +static uint8_t GPS_ROW(uint8_t value) { return expandState.gps ? value : HIDDEN_ROW; } +#endif + +static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } + uint8_t viewOptCheckBox(coord_t y, const char* title, uint8_t value, uint8_t attr, event_t event, uint8_t modelOption) { lcdDrawText(INDENT_WIDTH*2, y, title); @@ -161,48 +191,54 @@ void menuRadioSetup(event_t event) 2, // time 0, // battery calibration 1, // battery range - LABEL(SOUND), - 0, // beep mode - 0, // general volume - 0, // beep volume - 0, // beep length - 0, // speaker piutch - 0, // wav volume - 0, // background volume - CASE_VARIO(LABEL(VARIO)) - CASE_VARIO(0) - CASE_VARIO(0) - CASE_VARIO(0) - CASE_VARIO(0) - CASE_HAPTIC(LABEL(HAPTIC)) - CASE_HAPTIC(0) // haptic mode - CASE_HAPTIC(0) // haptic length - CASE_HAPTIC(0) // haptic strength - LABEL(ALARMS), - 0, // battery warning - 0, // inactivity warning - 0, // memory warning - 0, // alarm warning - 0, // RSSI power off alarm - 0, // Trainer power off alarm - LABEL(BACKLIGHT), - 0, // backlight mode - 0, // backlight delay - 0, // brightness - 0, // contrast - CASE_PCBX9E_PCBX9DP(0) // backlight color - 0, // flash beep - CASE_SPLASH_PARAM(0) // disable splash + // Sound + 0, + SOUND_ROW(0), // beep mode + SOUND_ROW(0), // general volume + SOUND_ROW(0), // beep volume + SOUND_ROW(0), // beep length + SOUND_ROW(0), // speaker piutch + SOUND_ROW(0), // wav volume + SOUND_ROW(0), // background volume + SOUND_ROW(0), // startup sound + // Vario + CASE_VARIO(0) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(VARIO_ROW(0)) + // Haptic + CASE_HAPTIC(0) + CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(HAPTIC_ROW(0)) + // Alarms + 0, + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + ALARMS_ROW(0), + // Backlight 0, + BACKLIGHT_ROW(0), // backlight mode + BACKLIGHT_ROW(0), // backlight delay + BACKLIGHT_ROW(0), // brightness + BACKLIGHT_ROW(0), // contrast + CASE_PCBX9E_PCBX9DP(BACKLIGHT_ROW(0)) // backlight color + BACKLIGHT_ROW(0), // flash beep + CASE_SPLASH_PARAM(0) // disable splash CASE_PWR_BUTTON_PRESS(0) // pwr on speed CASE_PWR_BUTTON_PRESS(0) // pwr off speed CASE_PWR_BUTTON_PRESS(0) // pwr auto off CASE_HAPTIC(0) // power on/off haptic CASE_PXX2(0) // owner registration ID - CASE_GPS(LABEL(GPS)) - CASE_GPS(0) // timezone - CASE_GPS(0) // adjust RTC - CASE_GPS(0) // GPS format + // GPS + CASE_GPS(0) + CASE_GPS(GPS_ROW(0)) + CASE_GPS(GPS_ROW(0)) + CASE_GPS(GPS_ROW(0)) CASE_PXX1(0) // country code 0, // voice language 0, // imperial @@ -214,20 +250,20 @@ void menuRadioSetup(event_t event) CASE_ROTARY_ENCODER(0) // Invert rotary encoder LABEL(TX_MODE), 0, // sticks mode - LABEL(ViewOptions), - LABEL(RadioMenuTabs), - 0, - 0, - LABEL(ModelMenuTabs), - CASE_HELI(0) - CASE_FLIGHT_MODES(0) - 0, - CASE_GVARS(0) - 0, - 0, - CASE_LUA_MODEL_SCRIPTS(0) - 0, - 1 /*to force edit mode*/ + // View options + 0, + VIEWOPT_ROW(LABEL(RadioMenuTabs)), + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + VIEWOPT_ROW(LABEL(ModelMenuTabs)), + CASE_HELI(VIEWOPT_ROW(0)) + CASE_FLIGHT_MODES(VIEWOPT_ROW(0)) + CASE_GVARS(VIEWOPT_ROW(0)) + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + VIEWOPT_ROW(0), + CASE_LUA_MODEL_SCRIPTS(VIEWOPT_ROW(0)) + VIEWOPT_ROW(0), }); if (event == EVT_ENTRY) { @@ -243,8 +279,11 @@ void menuRadioSetup(event_t event) coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH; uint8_t k = i + menuVerticalOffset; for (int j = 0; j <= k; j++) { - if (mstate_tab[j] == HIDDEN_ROW) - k++; + if (mstate_tab[j] == HIDDEN_ROW) { + if (++k >= (int)DIM(mstate_tab)) { + return; + } + } } uint8_t blink = ((s_editMode>0) ? BLINK|INVERS : INVERS); @@ -334,7 +373,7 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_SOUND_LABEL: - lcdDrawTextAlignedLeft(y, STR_SOUND_LABEL); + expandState.sound = expandableSection(y, STR_SOUND_LABEL, expandState.sound, attr, event); break; case ITEM_RADIO_SETUP_BEEP_MODE: @@ -381,9 +420,13 @@ void menuRadioSetup(event_t event) } break; + case ITEM_RADIO_SETUP_START_SOUND: + g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, RADIO_SETUP_2ND_COLUMN, y, STR_PLAY_HELLO, attr, event, INDENT_WIDTH) ; + break; + #if defined(VARIO) case ITEM_RADIO_SETUP_VARIO_LABEL: - lcdDrawTextAlignedLeft(y, STR_VARIO); + expandState.vario = expandableSection(y, STR_VARIO, expandState.vario, attr, event); break; case ITEM_RADIO_SETUP_VARIO_VOLUME: @@ -414,7 +457,7 @@ void menuRadioSetup(event_t event) #if defined(HAPTIC) case ITEM_RADIO_SETUP_HAPTIC_LABEL: - lcdDrawTextAlignedLeft(y, STR_HAPTIC_LABEL); + expandState.haptic = expandableSection(y, STR_HAPTIC_LABEL, expandState.haptic, attr, event); break; case ITEM_RADIO_SETUP_HAPTIC_MODE: @@ -430,17 +473,8 @@ void menuRadioSetup(event_t event) break; #endif - case ITEM_RADIO_SETUP_CONTRAST: - lcdDrawTextIndented(y, STR_CONTRAST); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.contrast, attr|LEFT); - if (attr) { - CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); - lcdSetContrast(); - } - break; - case ITEM_RADIO_SETUP_ALARMS_LABEL: - lcdDrawTextAlignedLeft(y, STR_ALARMS_LABEL); + expandState.alarms = expandableSection(y, STR_ALARMS_LABEL, expandState.alarms, attr, event); break; case ITEM_RADIO_SETUP_BATTERY_WARNING: @@ -486,7 +520,7 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_BACKLIGHT_LABEL: - lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL); + expandState.backlight = expandableSection(y, STR_BACKLIGHT_LABEL, expandState.backlight, attr, event); break; case ITEM_RADIO_SETUP_BACKLIGHT_MODE: @@ -524,6 +558,15 @@ void menuRadioSetup(event_t event) } break; + case ITEM_RADIO_SETUP_CONTRAST: + lcdDrawTextIndented(y, STR_CONTRAST); + lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.contrast, attr|LEFT); + if (attr) { + CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); + lcdSetContrast(); + } + break; + #if defined(PCBX9DP) || defined(PCBX9E) case ITEM_RADIO_SETUP_BACKLIGHT_COLOR: lcdDrawTextIndented(y, STR_BLCOLOR); @@ -544,11 +587,6 @@ void menuRadioSetup(event_t event) if (attr) g_eeGeneral.splashMode = -checkIncDecGen(event, -g_eeGeneral.splashMode, -3, 4); break; - case ITEM_RADIO_SETUP_START_SOUND: - lcdDrawTextAlignedLeft(y, STR_PLAY_HELLO); - g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event ) ; - break; - #if defined(PWR_BUTTON_PRESS) case ITEM_RADIO_SETUP_PWR_ON_SPEED: g_eeGeneral.pwrOnSpeed = pwrDelayToYaml(editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_PWR_ON_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOnSpeed), 0, 4, attr|LEFT, event)); @@ -578,7 +616,7 @@ void menuRadioSetup(event_t event) #if defined(GPS) case ITEM_RADIO_SETUP_LABEL_GPS: - lcdDrawTextAlignedLeft(y, STR_GPS); + expandState.gps = expandableSection(y, STR_GPS, expandState.gps, attr, event); break; case ITEM_RADIO_SETUP_TIMEZONE: @@ -643,7 +681,6 @@ void menuRadioSetup(event_t event) break; #endif - case ITEM_RADIO_SETUP_SWITCHES_DELAY: lcdDrawTextAlignedLeft(y, STR_SWITCHES_DELAY); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 10*SWITCHES_DELAY(), attr|LEFT); @@ -716,7 +753,7 @@ void menuRadioSetup(event_t event) break; case ITEM_VIEW_OPTIONS_LABEL: - lcdDrawTextAlignedLeft(y, STR_ENABLED_FEATURES); + expandState.viewOpt = expandableSection(y, STR_ENABLED_FEATURES, expandState.viewOpt, attr, event); break; case ITEM_VIEW_OPTIONS_RADIO_TAB: lcdDrawTextIndented(y, TR_RADIO_MENU_TABS); From ed22f07d879cb74442354eb53cd6bf9e7fbe1b98 Mon Sep 17 00:00:00 2001 From: philmoz Date: Thu, 12 Sep 2024 16:55:29 +1000 Subject: [PATCH 2/4] Fix build. --- radio/src/gui/128x64/radio_setup.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index 3f31ebe5e5f..411da12d787 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -135,9 +135,7 @@ PACK(struct ExpandState { uint8_t imu:1; #endif uint8_t alarms:1; -#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) uint8_t backlight:1; -#endif #if defined(GPS) uint8_t gps:1; #endif @@ -158,9 +156,7 @@ static uint8_t IMU_ROW(uint8_t value) { return expandState.imu ? value : HIDDEN_ static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } -#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) static uint8_t BACKLIGHT_ROW(uint8_t value) { return expandState.backlight ? value : HIDDEN_ROW; } -#endif #if defined(GPS) static uint8_t GPS_ROW(uint8_t value) { return expandState.gps ? value : HIDDEN_ROW; } From c8707028be3138b57e577e80dc5fa1ec3d7a3977 Mon Sep 17 00:00:00 2001 From: philmoz Date: Fri, 27 Sep 2024 18:36:40 +1000 Subject: [PATCH 3/4] Revert expandable sections. --- radio/src/gui/128x64/radio_setup.cpp | 79 ++++++++++------------------ 1 file changed, 28 insertions(+), 51 deletions(-) diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index 411da12d787..fb5e0444820 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -129,16 +129,7 @@ enum { PACK(struct ExpandState { uint8_t sound:1; - uint8_t vario:1; - uint8_t haptic:1; -#if defined(IMU) - uint8_t imu:1; -#endif uint8_t alarms:1; - uint8_t backlight:1; -#if defined(GPS) - uint8_t gps:1; -#endif uint8_t viewOpt:1; }); @@ -146,22 +137,8 @@ static struct ExpandState expandState; static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } -static uint8_t VARIO_ROW(uint8_t value) { return expandState.vario ? value : HIDDEN_ROW; } - -static uint8_t HAPTIC_ROW(uint8_t value) { return expandState.haptic ? value : HIDDEN_ROW; } - -#if defined(IMU) -static uint8_t IMU_ROW(uint8_t value) { return expandState.imu ? value : HIDDEN_ROW; } -#endif - static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } -static uint8_t BACKLIGHT_ROW(uint8_t value) { return expandState.backlight ? value : HIDDEN_ROW; } - -#if defined(GPS) -static uint8_t GPS_ROW(uint8_t value) { return expandState.gps ? value : HIDDEN_ROW; } -#endif - static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } uint8_t viewOptCheckBox(coord_t y, const char* title, uint8_t value, uint8_t attr, event_t event, uint8_t modelOption) @@ -215,20 +192,20 @@ void menuRadioSetup(event_t event) SOUND_ROW(0), SOUND_ROW(0), // Vario - CASE_VARIO(0) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(LABEL(VARIO)) + CASE_VARIO(0) + CASE_VARIO(0) + CASE_VARIO(0) + CASE_VARIO(0) // Haptic - CASE_HAPTIC(0) - CASE_HAPTIC(HAPTIC_ROW(0)) - CASE_HAPTIC(HAPTIC_ROW(0)) - CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(LABEL(VARIO)) + CASE_HAPTIC(0) + CASE_HAPTIC(0) + CASE_HAPTIC(0) // IMU - CASE_IMU(0) - CASE_IMU(IMU_ROW(0)) - CASE_IMU(IMU_ROW(0)) + CASE_IMU(LABEL(IMU)) + CASE_IMU(0) + CASE_IMU(0) // Alarms 0, ALARMS_ROW(0), @@ -238,12 +215,12 @@ void menuRadioSetup(event_t event) ALARMS_ROW(0), ALARMS_ROW(0), // Backlight - CASE_BACKLIGHT(0) - CASE_BACKLIGHT(BACKLIGHT_ROW(0)) - CASE_BACKLIGHT(BACKLIGHT_ROW(0)) - CASE_BACKLIGHT(BACKLIGHT_ROW(0)) - CASE_CONTRAST(BACKLIGHT_ROW(0)) - CASE_BACKLIGHT(BACKLIGHT_ROW(0)) + CASE_BACKLIGHT(LABEL(BACKLIGHT)) + CASE_BACKLIGHT(0) + CASE_BACKLIGHT(0) + CASE_BACKLIGHT(0) + CASE_CONTRAST(0) + CASE_BACKLIGHT(0) CASE_SPLASH_PARAM(0) CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0) @@ -251,10 +228,10 @@ void menuRadioSetup(event_t event) CASE_HAPTIC(0) // power on/off haptic CASE_PXX2(0) /* owner registration ID */ // GPS - CASE_GPS(0) - CASE_GPS(GPS_ROW(0)) - CASE_GPS(GPS_ROW(0)) - CASE_GPS(GPS_ROW(0)) + CASE_GPS(LABEL(GPS)) + CASE_GPS(0) + CASE_GPS(0) + CASE_GPS(0) CASE_PXX1(0) 0, 0, 0, IF_FAI_CHOICE(0) @@ -452,7 +429,7 @@ void menuRadioSetup(event_t event) #if defined(VARIO) case ITEM_RADIO_SETUP_VARIO_LABEL: - expandState.vario = expandableSection(y, STR_VARIO, expandState.vario, attr, event); + lcdDrawTextAlignedLeft(y, STR_VARIO); break; case ITEM_RADIO_SETUP_VARIO_VOLUME: @@ -483,7 +460,7 @@ void menuRadioSetup(event_t event) #if defined(HAPTIC) case ITEM_RADIO_SETUP_HAPTIC_LABEL: - expandState.haptic = expandableSection(y, STR_HAPTIC_LABEL, expandState.haptic, attr, event); + lcdDrawTextAlignedLeft(y, STR_HAPTIC_LABEL); break; case ITEM_RADIO_SETUP_HAPTIC_MODE: @@ -501,7 +478,7 @@ void menuRadioSetup(event_t event) #if defined(IMU) case ITEM_RADIO_SETUP_IMU_LABEL: - expandState.imu = expandableSection(y, STR_IMU_LABEL, expandState.imu, attr, event); + lcdDrawTextAlignedLeft(y, STR_IMU_LABEL); break; case ITEM_RADIO_SETUP_IMU_MAX: @@ -584,9 +561,9 @@ void menuRadioSetup(event_t event) #if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) case ITEM_RADIO_SETUP_BACKLIGHT_LABEL: #if defined(OLED_SCREEN) - expandState.backlight = expandableSection(y, STR_BRIGHTNESS, expandState.backlight, attr, event); + lcdDrawTextAlignedLeft(y, STR_BRIGHTNESS); #else - expandState.backlight = expandableSection(y, STR_BACKLIGHT_LABEL, expandState.backlight, attr, event); + lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL); #endif break; @@ -690,7 +667,7 @@ void menuRadioSetup(event_t event) #if defined(GPS) case ITEM_RADIO_SETUP_LABEL_GPS: - expandState.gps = expandableSection(y, STR_GPS, expandState.gps, attr, event); + lcdDrawTextAlignedLeft(y, STR_GPS); break; case ITEM_RADIO_SETUP_TIMEZONE: From f5c26e6f97d21c861d2066443a2aebc343758218 Mon Sep 17 00:00:00 2001 From: philmoz Date: Fri, 27 Sep 2024 18:43:50 +1000 Subject: [PATCH 4/4] Revert expandable sections. --- radio/src/gui/212x64/radio_setup.cpp | 64 +++++++++++----------------- 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index b325f0bf007..f6478df0c32 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -120,13 +120,7 @@ enum MenuRadioSetupItems { PACK(struct ExpandState { uint8_t sound:1; - uint8_t vario:1; - uint8_t haptic:1; uint8_t alarms:1; - uint8_t backlight:1; -#if defined(GPS) - uint8_t gps:1; -#endif uint8_t viewOpt:1; }); @@ -134,18 +128,8 @@ static struct ExpandState expandState; static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } -static uint8_t VARIO_ROW(uint8_t value) { return expandState.vario ? value : HIDDEN_ROW; } - -static uint8_t HAPTIC_ROW(uint8_t value) { return expandState.haptic ? value : HIDDEN_ROW; } - static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } -static uint8_t BACKLIGHT_ROW(uint8_t value) { return expandState.backlight ? value : HIDDEN_ROW; } - -#if defined(GPS) -static uint8_t GPS_ROW(uint8_t value) { return expandState.gps ? value : HIDDEN_ROW; } -#endif - static uint8_t VIEWOPT_ROW(uint8_t value) { return expandState.viewOpt ? value : HIDDEN_ROW; } uint8_t viewOptCheckBox(coord_t y, const char* title, uint8_t value, uint8_t attr, event_t event, uint8_t modelOption) @@ -202,16 +186,16 @@ void menuRadioSetup(event_t event) SOUND_ROW(0), // background volume SOUND_ROW(0), // startup sound // Vario - CASE_VARIO(0) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) - CASE_VARIO(VARIO_ROW(0)) + CASE_VARIO(LABEL(VARIO)) + CASE_VARIO(0) + CASE_VARIO(0) + CASE_VARIO(0) + CASE_VARIO(0) // Haptic - CASE_HAPTIC(0) - CASE_HAPTIC(HAPTIC_ROW(0)) - CASE_HAPTIC(HAPTIC_ROW(0)) - CASE_HAPTIC(HAPTIC_ROW(0)) + CASE_HAPTIC(LABEL(VARIO)) + CASE_HAPTIC(0) + CASE_HAPTIC(0) + CASE_HAPTIC(0) // Alarms 0, ALARMS_ROW(0), @@ -221,13 +205,13 @@ void menuRadioSetup(event_t event) ALARMS_ROW(0), ALARMS_ROW(0), // Backlight - 0, - BACKLIGHT_ROW(0), // backlight mode - BACKLIGHT_ROW(0), // backlight delay - BACKLIGHT_ROW(0), // brightness - BACKLIGHT_ROW(0), // contrast - CASE_PCBX9E_PCBX9DP(BACKLIGHT_ROW(0)) // backlight color - BACKLIGHT_ROW(0), // flash beep + LABEL(BACKLIGHT), + 0, // backlight mode + 0, // backlight delay + 0, // brightness + 0, // contrast + CASE_PCBX9E_PCBX9DP(0) // backlight color + 0, // flash beep CASE_SPLASH_PARAM(0) // disable splash CASE_PWR_BUTTON_PRESS(0) // pwr on speed CASE_PWR_BUTTON_PRESS(0) // pwr off speed @@ -235,10 +219,10 @@ void menuRadioSetup(event_t event) CASE_HAPTIC(0) // power on/off haptic CASE_PXX2(0) // owner registration ID // GPS - CASE_GPS(0) - CASE_GPS(GPS_ROW(0)) - CASE_GPS(GPS_ROW(0)) - CASE_GPS(GPS_ROW(0)) + CASE_GPS(LABEL(GPS)) + CASE_GPS(0) + CASE_GPS(0) + CASE_GPS(0) CASE_PXX1(0) // country code 0, // voice language 0, // imperial @@ -426,7 +410,7 @@ void menuRadioSetup(event_t event) #if defined(VARIO) case ITEM_RADIO_SETUP_VARIO_LABEL: - expandState.vario = expandableSection(y, STR_VARIO, expandState.vario, attr, event); + lcdDrawTextAlignedLeft(y, STR_VARIO); break; case ITEM_RADIO_SETUP_VARIO_VOLUME: @@ -457,7 +441,7 @@ void menuRadioSetup(event_t event) #if defined(HAPTIC) case ITEM_RADIO_SETUP_HAPTIC_LABEL: - expandState.haptic = expandableSection(y, STR_HAPTIC_LABEL, expandState.haptic, attr, event); + lcdDrawTextAlignedLeft(y, STR_HAPTIC_LABEL); break; case ITEM_RADIO_SETUP_HAPTIC_MODE: @@ -520,7 +504,7 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_BACKLIGHT_LABEL: - expandState.backlight = expandableSection(y, STR_BACKLIGHT_LABEL, expandState.backlight, attr, event); + lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL); break; case ITEM_RADIO_SETUP_BACKLIGHT_MODE: @@ -616,7 +600,7 @@ void menuRadioSetup(event_t event) #if defined(GPS) case ITEM_RADIO_SETUP_LABEL_GPS: - expandState.gps = expandableSection(y, STR_GPS, expandState.gps, attr, event); + lcdDrawTextAlignedLeft(y, STR_GPS); break; case ITEM_RADIO_SETUP_TIMEZONE: