#pragma once #if HAS_SCREEN #include "configuration.h" namespace graphics { class menuHandler { public: enum screenMenus { MenuNone, LoraMenu, LoraPicker, DeviceRolePicker, RadioPresetPicker, FrequencySlot, NoTimeoutLoraPicker, TzPicker, TwelveHourPicker, ClockFacePicker, ClockMenu, PositionBaseMenu, NodeBaseMenu, GpsToggleMenu, GpsFormatMenu, GpsSmartPositionMenu, GpsUpdateIntervalMenu, GpsPositionBroadcastMenu, CompassPointNorthMenu, ResetNodeDbMenu, BuzzerModeMenuPicker, MuiPicker, BrightnessPicker, RebootMenu, ShutdownMenu, NodePickerMenu, ManageNodeMenu, RemoveFavorite, TestMenu, NumberTest, WifiToggleMenu, BluetoothToggleMenu, ScreenOptionsMenu, PowerMenu, SystemBaseMenu, KeyVerificationInit, KeyVerificationFinalPrompt, TraceRouteMenu, ThrottleMessage, MessageResponseMenu, MessageViewModeMenu, ReplyMenu, DeleteMessagesMenu, NodeNameLengthMenu, FrameToggles, DisplayUnits, MessageBubblesMenu, ThemeMenu }; static screenMenus menuQueue; static uint32_t pickedNodeNum; // node selected by NodePicker for ManageNodeMenu static void OnboardMessage(); static void LoraRegionPicker(uint32_t duration = 30000); static void loraMenu(); static void deviceRolePicker(); static void radioPresetPicker(); static void FrequencySlotPicker(); static void handleMenuSwitch(OLEDDisplay *display); static void showConfirmationBanner(const char *message, std::function onConfirm); static void clockMenu(); static void TZPicker(); static void twelveHourPicker(); static void clockFacePicker(); static void messageResponseMenu(); static void messageViewModeMenu(); static void replyMenu(); static void deleteMessagesMenu(); static void homeBaseMenu(); static void textMessageBaseMenu(); static void systemBaseMenu(); static void favoriteBaseMenu(); static void positionBaseMenu(); static void compassNorthMenu(); static void GPSToggleMenu(); static void GPSFormatMenu(); static void GPSSmartPositionMenu(); static void GPSUpdateIntervalMenu(); static void GPSPositionBroadcastMenu(); static void BuzzerModeMenu(); static void switchToMUIMenu(); static void nodeListMenu(); static void resetNodeDBMenu(); static void BrightnessPickerMenu(); static void rebootMenu(); static void shutdownMenu(); static void NodePicker(); static void manageNodeMenu(); static void addFavoriteMenu(); static void removeFavoriteMenu(); static void traceRouteMenu(); static void testMenu(); static void numberTest(); static void wifiBaseMenu(); static void wifiToggleMenu(); static void screenOptionsMenu(); static void powerMenu(); static void nodeNameLengthMenu(); static void frameTogglesMenu(); static void displayUnitsMenu(); static void messageBubblesMenu(); static void themeMenu(); static void textMessageMenu(); private: static void saveUIConfig(); static void keyVerificationInitMenu(); static void keyVerificationFinalPrompt(); static void bluetoothToggleMenu(); }; /* Generic Menu Options designations */ enum class OptionsAction { Back, Select }; template struct MenuOption { const char *label; OptionsAction action; bool hasValue; T value; MenuOption(const char *labelIn, OptionsAction actionIn, T valueIn) : label(labelIn), action(actionIn), hasValue(true), value(valueIn) { } MenuOption(const char *labelIn, OptionsAction actionIn) : label(labelIn), action(actionIn), hasValue(false), value() {} }; using RadioPresetOption = MenuOption; using LoraRegionOption = MenuOption; using TimezoneOption = MenuOption; using CompassOption = MenuOption; using GPSToggleOption = MenuOption; using GPSFormatOption = MenuOption; using NodeNameOption = MenuOption; using PositionMenuOption = MenuOption; using ManageNodeOption = MenuOption; using ClockFaceOption = MenuOption; } // namespace graphics #endif