diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 6abaa1b36..0d8ddf49e 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -787,7 +787,7 @@ void menuHandler::textMessageBaseMenu() void menuHandler::systemBaseMenu() { - enum optionsNumbers { Back, Notifications, ScreenOptions, Bluetooth, PowerMenu, FrameToggles, Test, enumEnd }; + enum optionsNumbers { Back, Notifications, ScreenOptions, Bluetooth, PowerMenu, Test, enumEnd }; static const char *optionsArray[enumEnd] = {"Back"}; static int optionsEnumArray[enumEnd] = {Back}; int options = 1; @@ -796,12 +796,10 @@ void menuHandler::systemBaseMenu() optionsEnumArray[options++] = Notifications; #if defined(ST7789_CS) || defined(ST7796_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || \ defined(USE_SH1107) || defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || HAS_TFT - optionsArray[options] = "Screen Options"; + optionsArray[options] = "Display Options"; optionsEnumArray[options++] = ScreenOptions; #endif - optionsArray[options] = "Frame Visiblity Toggle"; - optionsEnumArray[options++] = FrameToggles; #if defined(M5STACK_UNITC6L) optionsArray[options] = "Bluetooth"; #else @@ -839,9 +837,6 @@ void menuHandler::systemBaseMenu() } else if (selected == PowerMenu) { menuHandler::menuQueue = menuHandler::power_menu; screen->runNow(); - } else if (selected == FrameToggles) { - menuHandler::menuQueue = menuHandler::FrameToggles; - screen->runNow(); } else if (selected == Test) { menuHandler::menuQueue = menuHandler::test_menu; screen->runNow(); @@ -1573,7 +1568,7 @@ void menuHandler::screenOptionsMenu() hasSupportBrightness = false; #endif - enum optionsNumbers { Back, NodeNameLength, Brightness, ScreenColor }; + enum optionsNumbers { Back, NodeNameLength, Brightness, ScreenColor, FrameToggles, DisplayUnits }; static const char *optionsArray[5] = {"Back"}; static int optionsEnumArray[5] = {Back}; int options = 1; @@ -1595,8 +1590,14 @@ void menuHandler::screenOptionsMenu() optionsEnumArray[options++] = ScreenColor; #endif + optionsArray[options] = "Frame Visiblity Toggle"; + optionsEnumArray[options++] = FrameToggles; + + optionsArray[options] = "Display Units"; + optionsEnumArray[options++] = DisplayUnits; + BannerOverlayOptions bannerOptions; - bannerOptions.message = "Screen Options"; + bannerOptions.message = "Display Options"; bannerOptions.optionsArrayPtr = optionsArray; bannerOptions.optionsCount = options; bannerOptions.optionsEnumPtr = optionsEnumArray; @@ -1610,6 +1611,12 @@ void menuHandler::screenOptionsMenu() } else if (selected == NodeNameLength) { menuHandler::menuQueue = menuHandler::node_name_length_menu; screen->runNow(); + } else if (selected == FrameToggles) { + menuHandler::menuQueue = menuHandler::FrameToggles; + screen->runNow(); + } else if (selected == DisplayUnits) { + menuHandler::menuQueue = menuHandler::DisplayUnits; + screen->runNow(); } else { menuQueue = system_base_menu; screen->runNow(); @@ -1821,6 +1828,34 @@ void menuHandler::FrameToggles_menu() screen->showOverlayBanner(bannerOptions); } +void menuHandler::DisplayUnits_menu() +{ + enum optionsNumbers { Back, MetricUnits, ImperialUnits }; + + static const char *optionsArray[] = {"Back", "Metric", "Imperial"}; + BannerOverlayOptions bannerOptions; + bannerOptions.message = " Select display units"; + bannerOptions.optionsArrayPtr = optionsArray; + bannerOptions.optionsCount = 3; + if (config.display.units == meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL) + bannerOptions.InitialSelected = 2; + else + bannerOptions.InitialSelected = 1; + bannerOptions.bannerCallback = [](int selected) -> void { + if (selected == MetricUnits) { + config.display.units = meshtastic_Config_DisplayConfig_DisplayUnits_METRIC; + service->reloadConfig(SEGMENT_CONFIG); + } else if (selected == ImperialUnits) { + config.display.units = meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL; + service->reloadConfig(SEGMENT_CONFIG); + } else { + menuHandler::menuQueue = menuHandler::screen_options_menu; + screen->runNow(); + } + }; + screen->showOverlayBanner(bannerOptions); +} + void menuHandler::handleMenuSwitch(OLEDDisplay *display) { if (menuQueue != menu_none) @@ -1935,6 +1970,9 @@ void menuHandler::handleMenuSwitch(OLEDDisplay *display) case FrameToggles: FrameToggles_menu(); break; + case DisplayUnits: + DisplayUnits_menu(); + break; case throttle_message: screen->showSimpleBanner("Too Many Attempts\nTry again in 60 seconds.", 5000); break; diff --git a/src/graphics/draw/MenuHandler.h b/src/graphics/draw/MenuHandler.h index 6f25171c2..6fbc5d1e3 100644 --- a/src/graphics/draw/MenuHandler.h +++ b/src/graphics/draw/MenuHandler.h @@ -43,10 +43,11 @@ class menuHandler key_verification_final_prompt, trace_route_menu, throttle_message, - FrameToggles, message_response_menu, message_viewmode_menu, - node_name_length_menu + node_name_length_menu, + FrameToggles, + DisplayUnits }; static screenMenus menuQueue; @@ -91,6 +92,7 @@ class menuHandler static void powerMenu(); static void nodeNameLengthMenu(); static void FrameToggles_menu(); + static void DisplayUnits_menu(); static void textMessageMenu(); private: