diff --git a/main/actions/modesettingsaction.h b/main/actions/modesettingsaction.h index 52a088b..3d27834 100644 --- a/main/actions/modesettingsaction.h +++ b/main/actions/modesettingsaction.h @@ -30,24 +30,23 @@ public: void ModeSettingsAction::triggered() { - if ( - currentMode == &modes::defaultMode - #ifdef FEATURE_JOYSTICK + if (currentMode == &modes::defaultMode +#ifdef FEATURE_JOYSTICK || currentMode == &modes::wheelchairMode - #endif +#endif ) - switchScreen(); + pushScreen(); else if (currentMode == &modes::tempomatMode) - switchScreen(); + pushScreen(); else if (currentMode == &modes::larsmMode) - switchScreen(); + pushScreen(); else if (currentMode == &modes::mickMode) - switchScreen(); + pushScreen(); else if (currentMode == &modes::motortestMode) - switchScreen(); + pushScreen(); #ifdef FEATURE_GAMETRAK else if (currentMode == &modes::gametrakMode) - switchScreen(); + pushScreen(); #endif else { diff --git a/main/displays/bmsdisplay.cpp b/main/displays/bmsdisplay.cpp index b462f12..0be70c2 100644 --- a/main/displays/bmsdisplay.cpp +++ b/main/displays/bmsdisplay.cpp @@ -100,9 +100,11 @@ void BmsDisplay::buttonPressed(espgui::Button button) switch (button) { - case Button::Right: switchScreen(); break; + using espgui::Button; + case Button::Right: pushScreen(); break; case Button::Up: switchScreen(); break; - case Button::Down: switchScreen(); + case Button::Down: switchScreen(); break; + default:; } } #endif diff --git a/main/displays/ledstripcolorsdisplay.cpp b/main/displays/ledstripcolorsdisplay.cpp index 51a2da0..d2e6d81 100644 --- a/main/displays/ledstripcolorsdisplay.cpp +++ b/main/displays/ledstripcolorsdisplay.cpp @@ -7,19 +7,16 @@ #include #include #include -#include #include #include #include +#include // local includes -#include "menudisplay.h" #include "utils.h" #include "icons/back.h" #include "icons/bobbycar.h" -#include "actions/dummyaction.h" #include "globals.h" -#include "displays/menus/ledstripmenu.h" namespace { constexpr char TEXT_LEDSTRIPCOLORMENU[] = "Customize Ledstrip"; @@ -101,7 +98,7 @@ void LedstripColorsDisplay::buttonPressed(espgui::Button button) case Button::Left: if(!state_select_color) { - espgui::switchScreen(); + espgui::popScreen(); } else { diff --git a/main/displays/menus/batterymenu.cpp b/main/displays/menus/batterymenu.cpp index 022fb33..f82d848 100644 --- a/main/displays/menus/batterymenu.cpp +++ b/main/displays/menus/batterymenu.cpp @@ -80,7 +80,7 @@ BatteryMenu::BatteryMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem>(&configs.battery.cellType); + constructMenuItem>(&configs.battery.cellType); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::graph>>>(); constructMenuItem>(); constructMenuItem>(); diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index fa6344e..0281f4d 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -3,7 +3,8 @@ // 3rdparty lib includes #include #include -#include +#include +#include #include #include #include @@ -14,7 +15,6 @@ #include "changevaluedisplay_unifiedmodelmode.h" #include "accessors/settingsaccessors.h" #include "displays/menus/handbremssettingsmenu.h" -#include "displays/menus/modessettingsmenu.h" #include "bobbycheckbox.h" namespace { @@ -49,71 +49,71 @@ using DefaultModeModelModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeModelModeAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeSmoothingChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeSmoothingAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeFwSmoothingLowerLimitChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeFrontPercentageChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeFrontPercentageAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeBackPercentageChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBackPercentageAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeAddSchwelleChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeAddSchwelleAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeGas1WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeGas1WertAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeGas2WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeGas2WertAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeBrems1WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBrems1WertAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using DefaultModeBrems2WertChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, DefaultModeBrems2WertAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; } // namespace @@ -121,24 +121,24 @@ using namespace espgui; DefaultModeSettingsMenu::DefaultModeSettingsMenu() { - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, PushScreenAction>>(); constructMenuItem, BobbyCheckbox, DefaultModeSquareGasAccessor>>(); constructMenuItem, BobbyCheckbox, DefaultModeSquareBremsAccessor>>(); constructMenuItem, BobbyCheckbox, DefaultModeEnableSmoothingUpAccessor>>(); constructMenuItem, BobbyCheckbox, DefaultModeEnableSmoothingDownAccessor>>(); constructMenuItem, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); constructMenuItem, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string DefaultModeSettingsMenu::text() const @@ -148,5 +148,5 @@ std::string DefaultModeSettingsMenu::text() const void DefaultModeSettingsMenu::back() { - switchScreen(); + popScreen(); } diff --git a/main/displays/menus/gametrakmodesettingsmenu.h b/main/displays/menus/gametrakmodesettingsmenu.h index ca8f329..91f98f6 100644 --- a/main/displays/menus/gametrakmodesettingsmenu.h +++ b/main/displays/menus/gametrakmodesettingsmenu.h @@ -4,7 +4,7 @@ #include "displays/bobbymenudisplay.h" #include "utils.h" #include "menuitem.h" -#include "actions/switchscreenaction.h" +#include "actions/popscreenaction.h" #include "icons/back.h" namespace { @@ -16,7 +16,7 @@ class ContainerModeSettingsMenu : public: ContainerModeSettingsMenu() { - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string text() const override diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index 186b10f..b7bd1a5 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -39,7 +39,7 @@ HandbremsSettingsMenu::HandbremsSettingsMenu() constructMenuItem, BobbyCheckbox, HandbremsEnabledAccessor>>(); constructMenuItem, BobbyCheckbox, HandbremsAutomaticAccessor>>(); constructMenuItem, BobbyCheckbox, HandbremsVisualizeAccessor>>(); - constructMenuItem>(&configs.handbremse.mode); + constructMenuItem>(&configs.handbremse.mode); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/larsmmodesettingsmenu.cpp b/main/displays/menus/larsmmodesettingsmenu.cpp index f3b9c78..00cc97f 100644 --- a/main/displays/menus/larsmmodesettingsmenu.cpp +++ b/main/displays/menus/larsmmodesettingsmenu.cpp @@ -3,7 +3,8 @@ // 3rdparty lib includes #include "changevaluedisplay.h" #include "menuitem.h" -#include "actions/switchscreenaction.h" +#include "actions/pushscreenaction.h" +#include "actions/popscreenaction.h" #include "icons/back.h" // local includes @@ -12,7 +13,6 @@ #include "changevaluedisplay_larsmmode_mode.h" #include "changevaluedisplay_unifiedmodelmode.h" #include "accessors/settingsaccessors.h" -#include "displays/menus/modessettingsmenu.h" namespace { constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; @@ -25,22 +25,22 @@ using LarsmModeModelModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeModelModeAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using LarsmModeModeChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeModeAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using LarsmModeIterationsChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LarsmModeIterationsAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; } // namespace @@ -48,10 +48,10 @@ using namespace espgui; LarsmModeSettingsMenu::LarsmModeSettingsMenu() { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string LarsmModeSettingsMenu::text() const @@ -61,5 +61,5 @@ std::string LarsmModeSettingsMenu::text() const void LarsmModeSettingsMenu::back() { - switchScreen(); + popScreen(); } diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index c89b214..7a4a671 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -3,7 +3,8 @@ // 3rdparty lib includes #include #include -#include +#include +#include #include #include #include @@ -53,32 +54,32 @@ using LedsCountChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsCountAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using CenterOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, CenterOffsetAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using SmallOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, SmallOffsetAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using BigOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, BigOffsetAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using LedStripMaxAmpereChangeScreen = espgui::makeComponent< @@ -86,40 +87,40 @@ using LedStripMaxAmpereChangeScreen = espgui::makeComponent< espgui::StaticText, LedStripMaxAmpereAccessor, espgui::RatioNumberStep>, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using StVOOffsetChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsStVOFrontOffsetAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using StVOLengthChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedsStVOFrontLengthAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using AnimationMultiplierChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, AnimationMultiplierAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using LedStripBrightnessChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, LedstripBrightnessAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; class AllCustomLedsOffAction : public virtual espgui::ActionInterface @@ -154,30 +155,31 @@ LedstripMenu::LedstripMenu() constructMenuItem, BobbyCheckbox, LedstripAutomaticLightAccessor>>(); constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); - constructMenuItem>(&configs.ledstrip.animationType); - constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); + constructMenuItem>(&configs.ledstrip.animationType); - constructMenuItem, espgui::SwitchScreenAction>>(); + constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); + + constructMenuItem, espgui::PushScreenAction>>(); constructMenuItem, AllCustomLedsOffAction>>(); - constructMenuItem, BobbyCheckbox, EnableBeepWhenBlinkAccessor>>(); - constructMenuItem, BobbyCheckbox, EnableFullBlinkAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableBeepWhenBlinkAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableFullBlinkAccessor>>(); - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } - constructMenuItem, espgui::SwitchScreenAction>>(); + constructMenuItem, espgui::PushScreenAction>>(); if (configs.feature.ota.isEnabled.value) - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - constructMenuItem, espgui::SwitchScreenAction>>(); - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } - if (!simplified) { constructMenuItem>>(); } - constructMenuItem, espgui::SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + constructMenuItem, espgui::PushScreenAction>>(); + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem, espgui::PushScreenAction>>(); } + if (!simplified) { constructMenuItem>>(); } + constructMenuItem, espgui::PushScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string LedstripMenu::text() const @@ -187,5 +189,5 @@ std::string LedstripMenu::text() const void LedstripMenu::back() { - espgui::switchScreen(); + espgui::popScreen(); } diff --git a/main/displays/menus/ledstripselectanimationmenu.cpp b/main/displays/menus/ledstripselectanimationmenu.cpp new file mode 100644 index 0000000..6d7a6cf --- /dev/null +++ b/main/displays/menus/ledstripselectanimationmenu.cpp @@ -0,0 +1,72 @@ +#include "ledstripselectanimationmenu.h" + +// Local includes +#include "actions/dummyaction.h" +#include "actions/ledstripanimationactions.h" +#include "actions/popscreenaction.h" +#include "icons/back.h" +#include "ledstripdefines.h" +#include "ledstripmenu.h" +#include "newsettings.h" + +#ifdef FEATURE_LEDSTRIP +namespace { +constexpr char TEXT_SELECTANIMATION[] = "Select Animation"; +constexpr char TEXT_ANIMATION_DEFAULTRAINBOW[] = "Default Rainbow"; +constexpr char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; +constexpr char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; +constexpr char TEXT_ANIMATION_CUSTOMCOLOR[] = "Custom Color"; +constexpr char TEXT_BACK[] = "Back"; + +class CurrentSelectedAnimationText : public virtual espgui::TextInterface +{ +public: + std::string text() const override; +}; + +} // namespace + +LedstripSelectAnimationMenu::LedstripSelectAnimationMenu() +{ + using namespace espgui; + + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +std::string LedstripSelectAnimationMenu::text() const +{ + return TEXT_SELECTANIMATION; +} + +void LedstripSelectAnimationMenu::back() +{ + espgui::popScreen(); +} + +namespace { + +std::string CurrentSelectedAnimationText::text() const +{ + switch (configs.ledstrip.animationType.value) + { + case LedstripAnimation::DefaultRainbow: + return TEXT_ANIMATION_DEFAULTRAINBOW; + case LedstripAnimation::BetterRainbow: + return TEXT_ANIMATION_BETTERRAINBOW; + case LedstripAnimation::SpeedSync: + return TEXT_ANIMATION_SPEEDSYNCANIMATION; + case LedstripAnimation::CustomColor: + return TEXT_ANIMATION_CUSTOMCOLOR; + default: + return "Animation Unkown"; + } +} + +} // namespace +#endif diff --git a/main/displays/menus/ledstripselectblinkmenu.cpp b/main/displays/menus/ledstripselectblinkmenu.cpp index fe0f1a4..cd67f2a 100644 --- a/main/displays/menus/ledstripselectblinkmenu.cpp +++ b/main/displays/menus/ledstripselectblinkmenu.cpp @@ -2,13 +2,12 @@ // 3rdparty lib includes #include "actions/dummyaction.h" -#include "actions/switchscreenaction.h" +#include "actions/popscreenaction.h" #include "icons/back.h" // local includes #include "accessors/settingsaccessors.h" #include "actions/ledstripblinkactions.h" -#include "displays/menus/ledstripmenu.h" #include "ledstrip.h" #include "ledstripdefines.h" #include "bobbycheckbox.h" @@ -42,7 +41,7 @@ LedstripSelectBlinkMenu::LedstripSelectBlinkMenu() constructMenuItem, LedstripAnimationBlinkBothAction>>(); constructMenuItem, BobbyCheckbox, LedstripEnableBlinkAnimationAccessor>>(); constructMenuItem, BobbyCheckbox, LedstripEnableVisualizeBlinkAnimationAccessor>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string LedstripSelectBlinkMenu::text() const @@ -52,7 +51,7 @@ std::string LedstripSelectBlinkMenu::text() const void LedstripSelectBlinkMenu::back() { - espgui::switchScreen(); + espgui::popScreen(); } namespace { diff --git a/main/displays/menus/ledstripselectotamode.cpp b/main/displays/menus/ledstripselectotamode.cpp index 81dd95a..4355d06 100644 --- a/main/displays/menus/ledstripselectotamode.cpp +++ b/main/displays/menus/ledstripselectotamode.cpp @@ -1,14 +1,14 @@ #include "ledstripselectotamode.h" // 3rdparty lib includes -#include "actions/switchscreenaction.h" +#include "actions/pushscreenaction.h" +#include "actions/popscreenaction.h" #include "icons/back.h" // local includes #include "ledstrip.h" #include "newsettings.h" #include "utils.h" -#include "ledstripmenu.h" namespace { constexpr char TEXT_BLINKANIMATION[] = "Blink animation"; @@ -34,7 +34,7 @@ LedstripOtaAnimationChangeMenu::LedstripOtaAnimationChangeMenu() constructMenuItem, LedstripChangeOtaAnimModeAction>>(); constructMenuItem, LedstripChangeOtaAnimModeAction>>(); constructMenuItem, LedstripChangeOtaAnimModeAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string LedstripOtaAnimationChangeMenu::text() const @@ -44,5 +44,5 @@ std::string LedstripOtaAnimationChangeMenu::text() const void LedstripOtaAnimationChangeMenu::back() { - espgui::switchScreen(); + espgui::popScreen(); } diff --git a/main/displays/menus/mainmenu.cpp b/main/displays/menus/mainmenu.cpp index 919dece..e029a78 100644 --- a/main/displays/menus/mainmenu.cpp +++ b/main/displays/menus/mainmenu.cpp @@ -1,11 +1,12 @@ #include "mainmenu.h" // 3rdparty lib includes -#include "actions/switchscreenaction.h" -#include "icons/back.h" +#include +#include +#include +#include // local includes -#include "displays/statusdisplay.h" #include "displays/menus/selectmodemenu.h" #include "displays/menus/selectmodemenu.h" #include "displays/menus/ledstripmenu.h" @@ -45,7 +46,7 @@ #include "icons/statistics.h" #include "icons/greenpass.h" #include "icons/time.h" -#include "tftinstance.h" +#include "displays/statusdisplay.h" namespace { constexpr char TAG[] = "BOBBY"; @@ -84,40 +85,40 @@ MainMenu::MainMenu() using namespace espgui; // constructMenuItem>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); if (configs.feature.ledstrip.isEnabled.value) { - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::neopixel>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::neopixel>>>(); } - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::statistics>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::modes>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::statistics>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::modes>>>(); if (SHOWITEM) { constructMenuItem, ModeSettingsAction>>(); } - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::settings>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::greenpass>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::lock>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::settings>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::greenpass>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::lock>>>(); if (configs.feature.garage.isEnabled.value && configs.feature.esp_now.isEnabled.value) { - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, PushScreenAction>>(); } if (configs.feature.ota.isEnabled.value) - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::update>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::graph>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::update>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::graph>>>(); #if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY) - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, PushScreenAction>>(); #endif #ifdef FEATURE_MOSFETS - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, PushScreenAction>>(); #endif #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::bms>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::bms>>>(); #endif - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::demos>>>(); - if (SHOWITEM) { constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); } - if (SHOWITEM) { constructMenuItem,SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); } - if (SHOWITEM) { constructMenuItem, SwitchScreenAction>>(); } - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::poweroff>>>(); - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::demos>>>(); + if (SHOWITEM) { constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); } + if (SHOWITEM) { constructMenuItem,PushScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); } + if (SHOWITEM) { constructMenuItem, PushScreenAction>>(); } + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&bobbyicons::poweroff>>>(); + constructMenuItem, PushScreenAction>>(); constructMenuItem, RebootAction, StaticMenuItemIcon<&bobbyicons::reboot>>>(); //#ifdef MAINMENU_PLUGIN // GMEN1 @@ -131,5 +132,5 @@ std::string MainMenu::text() const void MainMenu::back() { - espgui::switchScreen(); + espgui::popScreen(); } diff --git a/main/displays/menus/motortestmodesettingsmenu.cpp b/main/displays/menus/motortestmodesettingsmenu.cpp index 1554929..f85460e 100644 --- a/main/displays/menus/motortestmodesettingsmenu.cpp +++ b/main/displays/menus/motortestmodesettingsmenu.cpp @@ -3,14 +3,14 @@ // 3rdparty lib includes #include "changevaluedisplay.h" #include "menuitem.h" -#include "actions/switchscreenaction.h" +#include "actions/pushscreenaction.h" +#include "actions/popscreenaction.h" #include "icons/back.h" // local includes #include "displays/bobbychangevaluedisplay.h" #include "utils.h" #include "accessors/settingsaccessors.h" -#include "displays/menus/modessettingsmenu.h" namespace { constexpr char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings"; @@ -22,16 +22,16 @@ using MotortestMultiplikatorChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, MotortestModeMultiplikatorAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using MotortestMaxPwmChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, MotortestMaxPwmAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; } // namespace @@ -39,9 +39,9 @@ using namespace espgui; MotortestModeSettingsMenu::MotortestModeSettingsMenu() { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string MotortestModeSettingsMenu::text() const @@ -51,5 +51,5 @@ std::string MotortestModeSettingsMenu::text() const void MotortestModeSettingsMenu::back() { - switchScreen(); + popScreen(); } diff --git a/main/displays/menus/selectmodemenu.cpp b/main/displays/menus/selectmodemenu.cpp index e0c1d5e..66c86a6 100644 --- a/main/displays/menus/selectmodemenu.cpp +++ b/main/displays/menus/selectmodemenu.cpp @@ -2,9 +2,10 @@ // 3rdparty lib includes #include -#include +#include #include #include +#include // local includes #include "utils.h" @@ -20,7 +21,7 @@ #include "modes/wheelchairmode.h" #endif #include "accessors/globalaccessors.h" -#include "displays/menus/mainmenu.h" +#include "mainmenu.h" namespace { constexpr char TEXT_SELECTMODE[] = "Select mode"; @@ -60,19 +61,19 @@ using namespace espgui; SelectModeMenu::SelectModeMenu() { - constructMenuItem, MultiAction>>>(); - if (!simplified) { constructMenuItem, MultiAction>>>(); } - constructMenuItem, MultiAction>>>(); - constructMenuItem, MultiAction>>>(); - if (!simplified) { constructMenuItem, MultiAction>>>(); } + constructMenuItem, MultiAction>>>(); + if (!simplified) { constructMenuItem, MultiAction>>>(); } + constructMenuItem, MultiAction>>>(); + constructMenuItem, MultiAction>>>(); + if (!simplified) { constructMenuItem, MultiAction>>>(); } #ifdef FEATURE_GAMETRAK - constructMenuItem, MultiAction>>>(); + constructMenuItem, MultiAction>>(); #endif - if (!simplified) { constructMenuItem, MultiAction>>>(); } + if (!simplified) { constructMenuItem, MultiAction>>>(); } #ifdef FEATURE_JOYSTICK - constructMenuItem, MultiAction>>>(); + constructMenuItem, MultiAction>>>(); #endif - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string SelectModeMenu::text() const @@ -113,5 +114,5 @@ void SelectModeMenu::start() void SelectModeMenu::back() { - switchScreen(); + popScreen(); } diff --git a/main/displays/menus/statisticsmenu.cpp b/main/displays/menus/statisticsmenu.cpp index cb767fd..1880f7a 100644 --- a/main/displays/menus/statisticsmenu.cpp +++ b/main/displays/menus/statisticsmenu.cpp @@ -3,13 +3,12 @@ // 3rdparty lib includes #include #include "actions/dummyaction.h" -#include "actions/switchscreenaction.h" +#include "actions/popscreenaction.h" #include "actioninterface.h" #include "fmt/core.h" #include "icons/back.h" // local includes -#include "mainmenu.h" #include "utils.h" #include "icons/time.h" #include "icons/reboot.h" @@ -187,7 +186,7 @@ StatisticsMenu::StatisticsMenu() constructMenuItem>(); constructMenuItem, SaveKilometersAction, StaticMenuItemIcon<&bobbyicons::update>>>(); constructMenuItem, ClearCurrentStatsAction, StaticMenuItemIcon<&bobbyicons::reboot>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string StatisticsMenu::text() const @@ -197,5 +196,5 @@ std::string StatisticsMenu::text() const void StatisticsMenu::back() { - espgui::switchScreen(); + espgui::popScreen(); } diff --git a/main/displays/menus/tempomatmodesettingsmenu.cpp b/main/displays/menus/tempomatmodesettingsmenu.cpp index 960c75c..daf3324 100644 --- a/main/displays/menus/tempomatmodesettingsmenu.cpp +++ b/main/displays/menus/tempomatmodesettingsmenu.cpp @@ -3,7 +3,8 @@ // 3rdparty lib includes #include #include -#include +#include +#include #include #include @@ -14,7 +15,6 @@ #include "accessors/settingsaccessors.h" #include "accessors/globalaccessors.h" #include "actions/tempomatmodeapplycurrentpeedaction.h" -#include "displays/menus/modessettingsmenu.h" namespace { constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; @@ -27,16 +27,16 @@ using TempomatModeCruiseMotTgtChangeDisplay = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TempomatModeCruiseMotTgtAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; using TempomatModeModelModeChangeScreen = espgui::makeComponent< BobbyChangeValueDisplay, espgui::StaticText, TempomatModeModelModeAccessor, - espgui::ConfirmActionInterface>, - espgui::BackActionInterface> + espgui::ConfirmActionInterface, + espgui::BackActionInterface >; } // namespace @@ -45,9 +45,9 @@ using namespace espgui; TempomatModeSettingsMenu::TempomatModeSettingsMenu() { constructMenuItem, TempomatModeApplyCurrentSpeedAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PushScreenAction>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string TempomatModeSettingsMenu::text() const @@ -57,5 +57,5 @@ std::string TempomatModeSettingsMenu::text() const void TempomatModeSettingsMenu::back() { - switchScreen(); + popScreen(); } diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index 4a9d730..58e7208 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -4,11 +4,12 @@ #include #include #include +#include +#include +#include // local includes #include "globals.h" -#include "actions/dummyaction.h" -#include "actions/switchscreenaction.h" #include "displays/bobbymenudisplay.h" #include "bobbyerrorhandler.h" @@ -57,7 +58,7 @@ private: ConfigWrapper* m_config; }; -template +template class TypeSafeChangeMenu : public BobbyMenuDisplay { @@ -71,7 +72,7 @@ public: iterateEnum::iterate([&](TEnum enum_value, const auto &string_value){ constructMenuItem>(enum_value, m_config); }); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } std::string text() const override @@ -81,7 +82,7 @@ public: void back() override { - espgui::switchScreen(); + espgui::popScreen(); } private: ConfigWrapper* m_config; @@ -102,7 +103,47 @@ public: void triggered() override { - espgui::switchScreen>(m_config); + espgui::switchScreen>(m_config); + } +private: + ConfigWrapper* m_config; +}; + +template +class PopScreenTypeSafeChangeMenuItem : public espgui::MenuItem +{ +public: + PopScreenTypeSafeChangeMenuItem(ConfigWrapper* config) : m_config{config} {} + + static constexpr const char *STATIC_TEXT = Ttext; + std::string text() const override + { + return Ttext; + } + + void triggered() override + { + espgui::popScreen(); + } +private: + ConfigWrapper* m_config; +}; + +template +class PushScreenTypeSafeChangeMenuItem : public espgui::MenuItem +{ +public: + PushScreenTypeSafeChangeMenuItem(ConfigWrapper* config) : m_config{config} {} + + static constexpr const char *STATIC_TEXT = Ttext; + std::string text() const override + { + return Ttext; + } + + void triggered() override + { + espgui::pushScreen>(m_config); } private: ConfigWrapper* m_config; diff --git a/main/displays/metersdisplay.cpp b/main/displays/metersdisplay.cpp index c7e3f3e..e413fd8 100644 --- a/main/displays/metersdisplay.cpp +++ b/main/displays/metersdisplay.cpp @@ -57,14 +57,9 @@ void MetersDisplay::buttonPressed(espgui::Button button) switch (button) { - using espgui::Button; - case Button::Left: - case Button::Right: - switchScreen(); - break; - case Button::Up: - switchScreen(); - break; + using espgui::Button; + case Button::Right: pushScreen(); break; + case Button::Up: switchScreen(); break; case Button::Down: #ifdef FEATURE_BMS switchScreen(); @@ -72,5 +67,6 @@ void MetersDisplay::buttonPressed(espgui::Button button) switchScreen(); #endif break; + default:; } } diff --git a/main/displays/statusdisplay.cpp b/main/displays/statusdisplay.cpp index 1213877..f730caf 100644 --- a/main/displays/statusdisplay.cpp +++ b/main/displays/statusdisplay.cpp @@ -230,9 +230,7 @@ void StatusDisplay::buttonPressed(espgui::Button button) switch (button) { using espgui::Button; - case Button::Right: - switchScreen(); - break; + case Button::Right: pushScreen(); break; case Button::Up: if (simplified) return; diff --git a/main/main.cpp b/main/main.cpp index bd33ef6..c966a44 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -35,7 +35,7 @@ using namespace std::chrono_literals; namespace { espchrono::millis_clock::time_point lastStatsPush; std::optional lastStatsUpdate; -} +} // namespace extern "C" void app_main() {