diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 439c65b8e..1de7aba02 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1259,7 +1259,7 @@ int Screen::handleInputEvent(const InputEvent *event) #endif #if HAS_GPS } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.gps && gps) { - menuHandler::GPSToggleMenu(); + menuHandler::positionBaseMenu(); #endif } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.clock) { menuHandler::clockMenu(); diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 03c1c963c..1e4d7f2e2 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -103,10 +103,10 @@ void menuHandler::ClockFacePicker() menuHandler::menuQueue = menuHandler::clock_menu; } else if (selected == 1) { graphics::ClockRenderer::digitalWatchFace = true; - screen->setFrames(); // Causes the screens to redraw, but doesn't change the face + screen->setFrames(); } else { graphics::ClockRenderer::digitalWatchFace = false; - screen->setFrames(); // Causes the screens to redraw, but doesn't change the face + screen->setFrames(); } }); } @@ -287,6 +287,36 @@ void menuHandler::favoriteBaseMenu() }); } +void menuHandler::positionBaseMenu() +{ + static const char *optionsArray[] = {"Back", "GPS Enable", "Compass Point"}; + screen->showOverlayBanner("Position Options", 30000, optionsArray, 3, [](int selected) -> void { + if (selected == 1) { + menuQueue = gps_toggle_menu; + } else if (selected == 2) { + menuQueue = compass_point_north_menu; + } + }); +} + +void menuHandler::compassNorthMenu() +{ + static const char *optionsArray[] = {"Back", "Points Up", "Dynamic"}; + screen->showOverlayBanner("Needle Direction?", 30000, optionsArray, 3, [](int selected) -> void { + if (selected == 1 && config.display.compass_north_top != true) { + config.display.compass_north_top = true; + service->reloadConfig(SEGMENT_CONFIG); + screen->setFrames(); + } else if (selected == 2 && config.display.compass_north_top != false) { + config.display.compass_north_top = false; + service->reloadConfig(SEGMENT_CONFIG); + screen->setFrames(); + } else { + menuQueue = position_base_menu; + } + }); +} + void menuHandler::GPSToggleMenu() { static const char *optionsArray[] = {"Back", "Enabled", "Disabled"}; @@ -303,6 +333,8 @@ void menuHandler::GPSToggleMenu() playGPSDisableBeep(); gps->disable(); service->reloadConfig(SEGMENT_CONFIG); + } else { + menuQueue = position_base_menu; } }, config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED ? 1 : 2); // set inital selection @@ -353,6 +385,15 @@ void menuHandler::handleMenuSwitch() case clock_menu: clockMenu(); break; + case position_base_menu: + positionBaseMenu(); + break; + case gps_toggle_menu: + GPSToggleMenu(); + break; + case compass_point_north_menu: + compassNorthMenu(); + break; } menuQueue = menu_none; } diff --git a/src/graphics/draw/MenuHandler.h b/src/graphics/draw/MenuHandler.h index 7480010a0..46016c30e 100644 --- a/src/graphics/draw/MenuHandler.h +++ b/src/graphics/draw/MenuHandler.h @@ -5,7 +5,17 @@ namespace graphics class menuHandler { public: - enum screenMenus { menu_none, lora_picker, TZ_picker, twelve_hour_picker, clock_face_picker, clock_menu }; + enum screenMenus { + menu_none, + lora_picker, + TZ_picker, + twelve_hour_picker, + clock_face_picker, + clock_menu, + position_base_menu, + gps_toggle_menu, + compass_point_north_menu + }; static screenMenus menuQueue; static void LoraRegionPicker(uint32_t duration = 30000); @@ -17,6 +27,8 @@ class menuHandler static void messageResponseMenu(); static void homeBaseMenu(); static void favoriteBaseMenu(); + static void positionBaseMenu(); + static void compassNorthMenu(); static void GPSToggleMenu(); static void BuzzerModeMenu(); static void switchToMUIMenu();