Push/Pop screens

This commit is contained in:
2022-03-05 22:12:08 +01:00
parent b9cb7835a1
commit c18403a30f
21 changed files with 300 additions and 193 deletions

View File

@ -30,24 +30,23 @@ public:
void ModeSettingsAction::triggered() void ModeSettingsAction::triggered()
{ {
if ( if (currentMode == &modes::defaultMode
currentMode == &modes::defaultMode #ifdef FEATURE_JOYSTICK
#ifdef FEATURE_JOYSTICK
|| currentMode == &modes::wheelchairMode || currentMode == &modes::wheelchairMode
#endif #endif
) )
switchScreen<DefaultModeSettingsMenu>(); pushScreen<DefaultModeSettingsMenu>();
else if (currentMode == &modes::tempomatMode) else if (currentMode == &modes::tempomatMode)
switchScreen<TempomatModeSettingsMenu>(); pushScreen<TempomatModeSettingsMenu>();
else if (currentMode == &modes::larsmMode) else if (currentMode == &modes::larsmMode)
switchScreen<LarsmModeSettingsMenu>(); pushScreen<LarsmModeSettingsMenu>();
else if (currentMode == &modes::mickMode) else if (currentMode == &modes::mickMode)
switchScreen<MickModeSettingsMenu>(); pushScreen<MickModeSettingsMenu>();
else if (currentMode == &modes::motortestMode) else if (currentMode == &modes::motortestMode)
switchScreen<MotortestModeSettingsMenu>(); pushScreen<MotortestModeSettingsMenu>();
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
else if (currentMode == &modes::gametrakMode) else if (currentMode == &modes::gametrakMode)
switchScreen<GametrakModeSettingsMenu>(); pushScreen<GametrakModeSettingsMenu>();
#endif #endif
else else
{ {

View File

@ -100,9 +100,11 @@ void BmsDisplay::buttonPressed(espgui::Button button)
switch (button) switch (button)
{ {
case Button::Right: switchScreen<MainMenu>(); break; using espgui::Button;
case Button::Right: pushScreen<MainMenu>(); break;
case Button::Up: switchScreen<MetersDisplay>(); break; case Button::Up: switchScreen<MetersDisplay>(); break;
case Button::Down: switchScreen<StatusDisplay>(); case Button::Down: switchScreen<StatusDisplay>(); break;
default:;
} }
} }
#endif #endif

View File

@ -7,19 +7,16 @@
#include <TFT_eSPI.h> #include <TFT_eSPI.h>
#include <cpputils.h> #include <cpputils.h>
#include <menuitem.h> #include <menuitem.h>
#include <actions/switchscreenaction.h>
#include <actioninterface.h> #include <actioninterface.h>
#include <tftinstance.h> #include <tftinstance.h>
#include <screenmanager.h> #include <screenmanager.h>
#include <actions/dummyaction.h>
// local includes // local includes
#include "menudisplay.h"
#include "utils.h" #include "utils.h"
#include "icons/back.h" #include "icons/back.h"
#include "icons/bobbycar.h" #include "icons/bobbycar.h"
#include "actions/dummyaction.h"
#include "globals.h" #include "globals.h"
#include "displays/menus/ledstripmenu.h"
namespace { namespace {
constexpr char TEXT_LEDSTRIPCOLORMENU[] = "Customize Ledstrip"; constexpr char TEXT_LEDSTRIPCOLORMENU[] = "Customize Ledstrip";
@ -101,7 +98,7 @@ void LedstripColorsDisplay::buttonPressed(espgui::Button button)
case Button::Left: case Button::Left:
if(!state_select_color) if(!state_select_color)
{ {
espgui::switchScreen<LedstripMenu>(); espgui::popScreen();
} }
else else
{ {

View File

@ -80,7 +80,7 @@ BatteryMenu::BatteryMenu()
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CELL_SERIES, BatterySeriesCellsAccessor>, SwitchScreenAction<BatteryCellSeriesChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CELL_SERIES, BatterySeriesCellsAccessor>, SwitchScreenAction<BatteryCellSeriesChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CELL_PARALLEL, BatteryParallelCellsAccessor>, SwitchScreenAction<BatteryCellParallelChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CELL_PARALLEL, BatteryParallelCellsAccessor>, SwitchScreenAction<BatteryCellParallelChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BATTERY_WHKM, BatteryWHperKMAccessor>, SwitchScreenAction<BatteryWHperKMChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BATTERY_WHKM, BatteryWHperKMAccessor>, SwitchScreenAction<BatteryWHperKMChangeScreen>>>();
constructMenuItem<SwitchScreenTypeSafeChangeMenuItem<BatteryCellType, BatteryMenu, TEXT_SELECT_CELL_TYPE>>(&configs.battery.cellType); constructMenuItem<PopScreenTypeSafeChangeMenuItem<BatteryCellType, TEXT_SELECT_CELL_TYPE>>(&configs.battery.cellType);
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SHOW_BATTERY_GRAPH>, SwitchScreenAction<BatteryGraphDisplay>, StaticMenuItemIcon<&bobbyicons::graph>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SHOW_BATTERY_GRAPH>, SwitchScreenAction<BatteryGraphDisplay>, StaticMenuItemIcon<&bobbyicons::graph>>>();
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>(); constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, WhStatisticsText, DummyAction>>(); constructMenuItem<makeComponent<MenuItem, WhStatisticsText, DummyAction>>();

View File

@ -3,7 +3,8 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <changevaluedisplay.h> #include <changevaluedisplay.h>
#include <menuitem.h> #include <menuitem.h>
#include <actions/switchscreenaction.h> #include <actions/pushscreenaction.h>
#include <actions/popscreenaction.h>
#include <actions/dummyaction.h> #include <actions/dummyaction.h>
#include <icons/back.h> #include <icons/back.h>
#include <textwithvaluehelper.h> #include <textwithvaluehelper.h>
@ -14,7 +15,6 @@
#include "changevaluedisplay_unifiedmodelmode.h" #include "changevaluedisplay_unifiedmodelmode.h"
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "displays/menus/handbremssettingsmenu.h" #include "displays/menus/handbremssettingsmenu.h"
#include "displays/menus/modessettingsmenu.h"
#include "bobbycheckbox.h" #include "bobbycheckbox.h"
namespace { namespace {
@ -49,71 +49,71 @@ using DefaultModeModelModeChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<UnifiedModelMode>, BobbyChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_MODELMODE>, espgui::StaticText<TEXT_MODELMODE>,
DefaultModeModelModeAccessor, DefaultModeModelModeAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeSmoothingChangeDisplay = espgui::makeComponent< using DefaultModeSmoothingChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SMOOTHINGVAL>, espgui::StaticText<TEXT_SMOOTHINGVAL>,
DefaultModeSmoothingAccessor, DefaultModeSmoothingAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeFwSmoothingLowerLimitChangeDisplay = espgui::makeComponent< using DefaultModeFwSmoothingLowerLimitChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_FWSMOOTHING_LIMIT>, espgui::StaticText<TEXT_FWSMOOTHING_LIMIT>,
DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeFrontPercentageChangeDisplay = espgui::makeComponent< using DefaultModeFrontPercentageChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_FRONTPERCENTAGE>, espgui::StaticText<TEXT_FRONTPERCENTAGE>,
DefaultModeFrontPercentageAccessor, DefaultModeFrontPercentageAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeBackPercentageChangeDisplay = espgui::makeComponent< using DefaultModeBackPercentageChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_BACKPERCENTAGE>, espgui::StaticText<TEXT_BACKPERCENTAGE>,
DefaultModeBackPercentageAccessor, DefaultModeBackPercentageAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeAddSchwelleChangeDisplay = espgui::makeComponent< using DefaultModeAddSchwelleChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDSCHWELLE>, espgui::StaticText<TEXT_ADDSCHWELLE>,
DefaultModeAddSchwelleAccessor, DefaultModeAddSchwelleAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeGas1WertChangeDisplay = espgui::makeComponent< using DefaultModeGas1WertChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDGASVAL>, espgui::StaticText<TEXT_ADDGASVAL>,
DefaultModeGas1WertAccessor, DefaultModeGas1WertAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeGas2WertChangeDisplay = espgui::makeComponent< using DefaultModeGas2WertChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SUBGASVAL>, espgui::StaticText<TEXT_SUBGASVAL>,
DefaultModeGas2WertAccessor, DefaultModeGas2WertAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeBrems1WertChangeDisplay = espgui::makeComponent< using DefaultModeBrems1WertChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDBRAKEVAL>, espgui::StaticText<TEXT_ADDBRAKEVAL>,
DefaultModeBrems1WertAccessor, DefaultModeBrems1WertAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using DefaultModeBrems2WertChangeDisplay = espgui::makeComponent< using DefaultModeBrems2WertChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SUBBRAKEVAL>, espgui::StaticText<TEXT_SUBBRAKEVAL>,
DefaultModeBrems2WertAccessor, DefaultModeBrems2WertAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
} // namespace } // namespace
@ -121,24 +121,24 @@ using namespace espgui;
DefaultModeSettingsMenu::DefaultModeSettingsMenu() DefaultModeSettingsMenu::DefaultModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<DefaultModeModelModeChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, PushScreenAction<DefaultModeModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, BobbyCheckbox, DefaultModeSquareGasAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, BobbyCheckbox, DefaultModeSquareGasAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, BobbyCheckbox, DefaultModeSquareBremsAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, BobbyCheckbox, DefaultModeSquareBremsAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGUP>, BobbyCheckbox, DefaultModeEnableSmoothingUpAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGUP>, BobbyCheckbox, DefaultModeEnableSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGDOWN>, BobbyCheckbox, DefaultModeEnableSmoothingDownAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGDOWN>, BobbyCheckbox, DefaultModeEnableSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGUP>, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGUP>, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGDOWN>, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGDOWN>, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE>, SwitchScreenAction<HandbremsSettingsMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE>, PushScreenAction<HandbremsSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FWSMOOTHING_LIMIT, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor>, SwitchScreenAction<DefaultModeFwSmoothingLowerLimitChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FWSMOOTHING_LIMIT, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor>, PushScreenAction<DefaultModeFwSmoothingLowerLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMOOTHINGVAL, DefaultModeSmoothingAccessor>, SwitchScreenAction<DefaultModeSmoothingChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMOOTHINGVAL, DefaultModeSmoothingAccessor>, PushScreenAction<DefaultModeSmoothingChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FRONTPERCENTAGE, DefaultModeFrontPercentageAccessor>, SwitchScreenAction<DefaultModeFrontPercentageChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FRONTPERCENTAGE, DefaultModeFrontPercentageAccessor>, PushScreenAction<DefaultModeFrontPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BACKPERCENTAGE, DefaultModeBackPercentageAccessor>, SwitchScreenAction<DefaultModeBackPercentageChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BACKPERCENTAGE, DefaultModeBackPercentageAccessor>, PushScreenAction<DefaultModeBackPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDSCHWELLE, DefaultModeAddSchwelleAccessor>, SwitchScreenAction<DefaultModeAddSchwelleChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDSCHWELLE, DefaultModeAddSchwelleAccessor>, PushScreenAction<DefaultModeAddSchwelleChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBGASVAL, DefaultModeGas2WertAccessor>, SwitchScreenAction<DefaultModeGas2WertChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBGASVAL, DefaultModeGas2WertAccessor>, PushScreenAction<DefaultModeGas2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBBRAKEVAL, DefaultModeBrems2WertAccessor>, SwitchScreenAction<DefaultModeBrems2WertChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBBRAKEVAL, DefaultModeBrems2WertAccessor>, PushScreenAction<DefaultModeBrems2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDGASVAL, DefaultModeGas1WertAccessor>, SwitchScreenAction<DefaultModeGas1WertChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDGASVAL, DefaultModeGas1WertAccessor>, PushScreenAction<DefaultModeGas1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDBRAKEVAL, DefaultModeBrems1WertAccessor>, SwitchScreenAction<DefaultModeBrems1WertChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDBRAKEVAL, DefaultModeBrems1WertAccessor>, PushScreenAction<DefaultModeBrems1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string DefaultModeSettingsMenu::text() const std::string DefaultModeSettingsMenu::text() const
@ -148,5 +148,5 @@ std::string DefaultModeSettingsMenu::text() const
void DefaultModeSettingsMenu::back() void DefaultModeSettingsMenu::back()
{ {
switchScreen<ModesSettingsMenu>(); popScreen();
} }

View File

@ -4,7 +4,7 @@
#include "displays/bobbymenudisplay.h" #include "displays/bobbymenudisplay.h"
#include "utils.h" #include "utils.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/switchscreenaction.h" #include "actions/popscreenaction.h"
#include "icons/back.h" #include "icons/back.h"
namespace { namespace {
@ -16,7 +16,7 @@ class ContainerModeSettingsMenu :
public: public:
ContainerModeSettingsMenu() ContainerModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string text() const override std::string text() const override

View File

@ -39,7 +39,7 @@ HandbremsSettingsMenu::HandbremsSettingsMenu()
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_ENABLE>, BobbyCheckbox, HandbremsEnabledAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_ENABLE>, BobbyCheckbox, HandbremsEnabledAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_AUTOMATIC>, BobbyCheckbox, HandbremsAutomaticAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_AUTOMATIC>, BobbyCheckbox, HandbremsAutomaticAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_VISUALIZE>, BobbyCheckbox, HandbremsVisualizeAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HANDBREMSE_VISUALIZE>, BobbyCheckbox, HandbremsVisualizeAccessor>>();
constructMenuItem<SwitchScreenTypeSafeChangeMenuItem<HandbremseMode, HandbremsSettingsMenu, TEXT_HANDBREMSE_MODE>>(&configs.handbremse.mode); constructMenuItem<PushScreenTypeSafeChangeMenuItem<HandbremseMode, TEXT_HANDBREMSE_MODE>>(&configs.handbremse.mode);
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HANDBREMSE_TRIGGERTIMEOUT, HandbremsTimeoutAccessor>, SwitchScreenAction<HandBremsTriggerTimeoutChangeValueDisplay>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HANDBREMSE_TRIGGERTIMEOUT, HandbremsTimeoutAccessor>, SwitchScreenAction<HandBremsTriggerTimeoutChangeValueDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<DefaultModeSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<DefaultModeSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
} }

View File

@ -3,7 +3,8 @@
// 3rdparty lib includes // 3rdparty lib includes
#include "changevaluedisplay.h" #include "changevaluedisplay.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/switchscreenaction.h" #include "actions/pushscreenaction.h"
#include "actions/popscreenaction.h"
#include "icons/back.h" #include "icons/back.h"
// local includes // local includes
@ -12,7 +13,6 @@
#include "changevaluedisplay_larsmmode_mode.h" #include "changevaluedisplay_larsmmode_mode.h"
#include "changevaluedisplay_unifiedmodelmode.h" #include "changevaluedisplay_unifiedmodelmode.h"
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "displays/menus/modessettingsmenu.h"
namespace { namespace {
constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings";
@ -25,22 +25,22 @@ using LarsmModeModelModeChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<UnifiedModelMode>, BobbyChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_MODELMODE>, espgui::StaticText<TEXT_MODELMODE>,
LarsmModeModelModeAccessor, LarsmModeModelModeAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using LarsmModeModeChangeDisplay = espgui::makeComponent< using LarsmModeModeChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<LarsmModeMode>, BobbyChangeValueDisplay<LarsmModeMode>,
espgui::StaticText<TEXT_SETMODE>, espgui::StaticText<TEXT_SETMODE>,
LarsmModeModeAccessor, LarsmModeModeAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using LarsmModeIterationsChangeDisplay = espgui::makeComponent< using LarsmModeIterationsChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<uint8_t>, BobbyChangeValueDisplay<uint8_t>,
espgui::StaticText<TEXT_SETITERATIONS>, espgui::StaticText<TEXT_SETITERATIONS>,
LarsmModeIterationsAccessor, LarsmModeIterationsAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LarsmModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
} // namespace } // namespace
@ -48,10 +48,10 @@ using namespace espgui;
LarsmModeSettingsMenu::LarsmModeSettingsMenu() LarsmModeSettingsMenu::LarsmModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<LarsmModeModelModeChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, PushScreenAction<LarsmModeModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETMODE>, SwitchScreenAction<LarsmModeModeChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETMODE>, PushScreenAction<LarsmModeModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETITERATIONS>, SwitchScreenAction<LarsmModeIterationsChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETITERATIONS>, PushScreenAction<LarsmModeIterationsChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string LarsmModeSettingsMenu::text() const std::string LarsmModeSettingsMenu::text() const
@ -61,5 +61,5 @@ std::string LarsmModeSettingsMenu::text() const
void LarsmModeSettingsMenu::back() void LarsmModeSettingsMenu::back()
{ {
switchScreen<ModesSettingsMenu>(); popScreen();
} }

View File

@ -3,7 +3,8 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <FastLED.h> #include <FastLED.h>
#include <actioninterface.h> #include <actioninterface.h>
#include <actions/switchscreenaction.h> #include <actions/pushscreenaction.h>
#include <actions/popscreenaction.h>
#include <changevaluedisplay.h> #include <changevaluedisplay.h>
#include <icons/back.h> #include <icons/back.h>
#include <menuitem.h> #include <menuitem.h>
@ -53,32 +54,32 @@ using LedsCountChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_LEDSCOUNT>, espgui::StaticText<TEXT_LEDSCOUNT>,
LedsCountAccessor, LedsCountAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using CenterOffsetChangeScreen = espgui::makeComponent< using CenterOffsetChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CENTEROFFSET>, espgui::StaticText<TEXT_CENTEROFFSET>,
CenterOffsetAccessor, CenterOffsetAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using SmallOffsetChangeScreen = espgui::makeComponent< using SmallOffsetChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SMALLOFFSET>, espgui::StaticText<TEXT_SMALLOFFSET>,
SmallOffsetAccessor, SmallOffsetAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using BigOffsetChangeScreen = espgui::makeComponent< using BigOffsetChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_BIGOFFSET>, espgui::StaticText<TEXT_BIGOFFSET>,
BigOffsetAccessor, BigOffsetAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using LedStripMaxAmpereChangeScreen = espgui::makeComponent< using LedStripMaxAmpereChangeScreen = espgui::makeComponent<
@ -86,40 +87,40 @@ using LedStripMaxAmpereChangeScreen = espgui::makeComponent<
espgui::StaticText<TEXT_LEDSTRIPCURRENTLIMIT>, espgui::StaticText<TEXT_LEDSTRIPCURRENTLIMIT>,
LedStripMaxAmpereAccessor, LedStripMaxAmpereAccessor,
espgui::RatioNumberStep<float, std::ratio<1,10>>, espgui::RatioNumberStep<float, std::ratio<1,10>>,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using StVOOffsetChangeScreen = espgui::makeComponent< using StVOOffsetChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_STVO_FRONTOFFSET>, espgui::StaticText<TEXT_STVO_FRONTOFFSET>,
LedsStVOFrontOffsetAccessor, LedsStVOFrontOffsetAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using StVOLengthChangeScreen = espgui::makeComponent< using StVOLengthChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_STVO_FRONTLENGTH>, espgui::StaticText<TEXT_STVO_FRONTLENGTH>,
LedsStVOFrontLengthAccessor, LedsStVOFrontLengthAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using AnimationMultiplierChangeScreen = espgui::makeComponent< using AnimationMultiplierChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ANIMATION_MULTIPLIER>, espgui::StaticText<TEXT_ANIMATION_MULTIPLIER>,
AnimationMultiplierAccessor, AnimationMultiplierAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using LedStripBrightnessChangeScreen = espgui::makeComponent< using LedStripBrightnessChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<uint8_t>, BobbyChangeValueDisplay<uint8_t>,
espgui::StaticText<TEXT_LEDSTRIP_BRIGHTNESS>, espgui::StaticText<TEXT_LEDSTRIP_BRIGHTNESS>,
LedstripBrightnessAccessor, LedstripBrightnessAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<LedstripMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<LedstripMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
class AllCustomLedsOffAction : public virtual espgui::ActionInterface class AllCustomLedsOffAction : public virtual espgui::ActionInterface
@ -154,30 +155,31 @@ LedstripMenu::LedstripMenu()
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_AUTOMATIC_LIGHTS>, BobbyCheckbox, LedstripAutomaticLightAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_AUTOMATIC_LIGHTS>, BobbyCheckbox, LedstripAutomaticLightAccessor>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDANIMATION>, BobbyCheckbox, EnableLedAnimationAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDANIMATION>, BobbyCheckbox, EnableLedAnimationAccessor>>();
constructMenuItem<SwitchScreenTypeSafeChangeMenuItem<LedstripAnimation, LedstripMenu, TEXT_SELECTANIMATION>>(&configs.ledstrip.animationType);
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>(); constructMenuItem<PushScreenTypeSafeChangeMenuItem<LedstripAnimation, TEXT_SELECTANIMATION>>(&configs.ledstrip.animationType);
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIPCOLORMENU>, espgui::SwitchScreenAction<LedstripColorsDisplay>>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIPCOLORMENU>, espgui::PushScreenAction<LedstripColorsDisplay>>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_ALLCUSTOMOFF>, AllCustomLedsOffAction>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_ALLCUSTOMOFF>, AllCustomLedsOffAction>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BLINKBEEP>, BobbyCheckbox, EnableBeepWhenBlinkAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BLINKBEEP>, BobbyCheckbox, EnableBeepWhenBlinkAccessor>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_FULLBLINK>, BobbyCheckbox, EnableFullBlinkAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_FULLBLINK>, BobbyCheckbox, EnableFullBlinkAccessor>>();
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTOFFSET, LedsStVOFrontOffsetAccessor>, espgui::SwitchScreenAction<StVOOffsetChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTOFFSET, LedsStVOFrontOffsetAccessor>, espgui::PushScreenAction<StVOOffsetChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTLENGTH, LedsStVOFrontLengthAccessor>, espgui::SwitchScreenAction<StVOLengthChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_STVO_FRONTLENGTH, LedsStVOFrontLengthAccessor>, espgui::PushScreenAction<StVOLengthChangeScreen>>>(); }
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BLINKANIMATION>, espgui::SwitchScreenAction<LedstripSelectBlinkMenu>>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BLINKANIMATION>, espgui::PushScreenAction<LedstripSelectBlinkMenu>>>();
if (configs.feature.ota.isEnabled.value) if (configs.feature.ota.isEnabled.value)
if (!simplified) { constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_CHANGE_OTA_ANIM>, espgui::SwitchScreenAction<LedstripOtaAnimationChangeMenu>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_CHANGE_OTA_ANIM>, espgui::PushScreenAction<LedstripOtaAnimationChangeMenu>>>(); }
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_ANIMATION_MULTIPLIER>, espgui::SwitchScreenAction<AnimationMultiplierChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_ANIMATION_MULTIPLIER>, espgui::PushScreenAction<AnimationMultiplierChangeScreen>>>();
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSCOUNT, LedsCountAccessor>, espgui::SwitchScreenAction<LedsCountChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_LEDSCOUNT, LedsCountAccessor>, espgui::PushScreenAction<LedsCountChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CENTEROFFSET, CenterOffsetAccessor>, espgui::SwitchScreenAction<CenterOffsetChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_CENTEROFFSET, CenterOffsetAccessor>, espgui::PushScreenAction<CenterOffsetChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMALLOFFSET, SmallOffsetAccessor>, espgui::SwitchScreenAction<SmallOffsetChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMALLOFFSET, SmallOffsetAccessor>, espgui::PushScreenAction<SmallOffsetChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BIGOFFSET, BigOffsetAccessor>, espgui::SwitchScreenAction<BigOffsetChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BIGOFFSET, BigOffsetAccessor>, espgui::PushScreenAction<BigOffsetChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_BRIGHTNESS>, espgui::SwitchScreenAction<LedStripBrightnessChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDSTRIP_BRIGHTNESS>, espgui::PushScreenAction<LedStripBrightnessChangeScreen>>>(); }
if (!simplified) { constructMenuItem<makeComponent<MenuItem, LedStripMaxCurrentText, espgui::SwitchScreenAction<LedStripMaxAmpereChangeScreen>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, LedStripMaxCurrentText, espgui::PushScreenAction<LedStripMaxAmpereChangeScreen>>>(); }
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BACK>, espgui::SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BACK>, espgui::PushScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string LedstripMenu::text() const std::string LedstripMenu::text() const
@ -187,5 +189,5 @@ std::string LedstripMenu::text() const
void LedstripMenu::back() void LedstripMenu::back()
{ {
espgui::switchScreen<MainMenu>(); espgui::popScreen();
} }

View File

@ -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<makeComponent<MenuItem, CurrentSelectedAnimationText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_DEFAULTRAINBOW>, LedStripSetAnimationAction<LedstripAnimation::DefaultRainbow>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_BETTERRAINBOW>, LedStripSetAnimationAction<LedstripAnimation::BetterRainbow>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_SPEEDSYNCANIMATION>, LedStripSetAnimationAction<LedstripAnimation::SpeedSync>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_CUSTOMCOLOR>, LedStripSetAnimationAction<LedstripAnimation::CustomColor>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, 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

View File

@ -2,13 +2,12 @@
// 3rdparty lib includes // 3rdparty lib includes
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
#include "actions/switchscreenaction.h" #include "actions/popscreenaction.h"
#include "icons/back.h" #include "icons/back.h"
// local includes // local includes
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "actions/ledstripblinkactions.h" #include "actions/ledstripblinkactions.h"
#include "displays/menus/ledstripmenu.h"
#include "ledstrip.h" #include "ledstrip.h"
#include "ledstripdefines.h" #include "ledstripdefines.h"
#include "bobbycheckbox.h" #include "bobbycheckbox.h"
@ -42,7 +41,7 @@ LedstripSelectBlinkMenu::LedstripSelectBlinkMenu()
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_BLINKBOTH>, LedstripAnimationBlinkBothAction>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ANIMATION_BLINKBOTH>, LedstripAnimationBlinkBothAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_EN_BLINK_ANIM>, BobbyCheckbox, LedstripEnableBlinkAnimationAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_EN_BLINK_ANIM>, BobbyCheckbox, LedstripEnableBlinkAnimationAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_VISUALIZE_BLINK>, BobbyCheckbox, LedstripEnableVisualizeBlinkAnimationAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP_VISUALIZE_BLINK>, BobbyCheckbox, LedstripEnableVisualizeBlinkAnimationAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string LedstripSelectBlinkMenu::text() const std::string LedstripSelectBlinkMenu::text() const
@ -52,7 +51,7 @@ std::string LedstripSelectBlinkMenu::text() const
void LedstripSelectBlinkMenu::back() void LedstripSelectBlinkMenu::back()
{ {
espgui::switchScreen<LedstripMenu>(); espgui::popScreen();
} }
namespace { namespace {

View File

@ -1,14 +1,14 @@
#include "ledstripselectotamode.h" #include "ledstripselectotamode.h"
// 3rdparty lib includes // 3rdparty lib includes
#include "actions/switchscreenaction.h" #include "actions/pushscreenaction.h"
#include "actions/popscreenaction.h"
#include "icons/back.h" #include "icons/back.h"
// local includes // local includes
#include "ledstrip.h" #include "ledstrip.h"
#include "newsettings.h" #include "newsettings.h"
#include "utils.h" #include "utils.h"
#include "ledstripmenu.h"
namespace { namespace {
constexpr char TEXT_BLINKANIMATION[] = "Blink animation"; constexpr char TEXT_BLINKANIMATION[] = "Blink animation";
@ -34,7 +34,7 @@ LedstripOtaAnimationChangeMenu::LedstripOtaAnimationChangeMenu()
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_NONE>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::None>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_NONE>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::None>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_PROGRESS>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::GreenProgressBar>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_PROGRESS>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::GreenProgressBar>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_COLOR>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::ColorChangeAll>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OTAANIM_COLOR>, LedstripChangeOtaAnimModeAction<OtaAnimationModes::ColorChangeAll>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string LedstripOtaAnimationChangeMenu::text() const std::string LedstripOtaAnimationChangeMenu::text() const
@ -44,5 +44,5 @@ std::string LedstripOtaAnimationChangeMenu::text() const
void LedstripOtaAnimationChangeMenu::back() void LedstripOtaAnimationChangeMenu::back()
{ {
espgui::switchScreen<LedstripMenu>(); espgui::popScreen();
} }

View File

@ -1,11 +1,12 @@
#include "mainmenu.h" #include "mainmenu.h"
// 3rdparty lib includes // 3rdparty lib includes
#include "actions/switchscreenaction.h" #include <actions/pushscreenaction.h>
#include "icons/back.h" #include <actions/popscreenaction.h>
#include <icons/back.h>
#include <tftinstance.h>
// local includes // local includes
#include "displays/statusdisplay.h"
#include "displays/menus/selectmodemenu.h" #include "displays/menus/selectmodemenu.h"
#include "displays/menus/selectmodemenu.h" #include "displays/menus/selectmodemenu.h"
#include "displays/menus/ledstripmenu.h" #include "displays/menus/ledstripmenu.h"
@ -45,7 +46,7 @@
#include "icons/statistics.h" #include "icons/statistics.h"
#include "icons/greenpass.h" #include "icons/greenpass.h"
#include "icons/time.h" #include "icons/time.h"
#include "tftinstance.h" #include "displays/statusdisplay.h"
namespace { namespace {
constexpr char TAG[] = "BOBBY"; constexpr char TAG[] = "BOBBY";
@ -84,40 +85,40 @@ MainMenu::MainMenu()
using namespace espgui; using namespace espgui;
// constructMenuItem<makeComponent<MenuItem, mainmenu::CurrentTimeText, DummyAction, StaticMenuItemIcon<&bobbyicons::time>>>(); // constructMenuItem<makeComponent<MenuItem, mainmenu::CurrentTimeText, DummyAction, StaticMenuItemIcon<&bobbyicons::time>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATUS>, SwitchScreenAction<StatusDisplay>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATUS>, PushScreenAction<StatusDisplay>, StaticMenuItemIcon<&espgui::icons::back>>>();
if (configs.feature.ledstrip.isEnabled.value) if (configs.feature.ledstrip.isEnabled.value)
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&bobbyicons::neopixel>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LEDSTRIP>, PushScreenAction<LedstripMenu>, StaticMenuItemIcon<&bobbyicons::neopixel>>>();
} }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATISTICSMENU>, SwitchScreenAction<StatisticsMenu>, StaticMenuItemIcon<&bobbyicons::statistics>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATISTICSMENU>, PushScreenAction<StatisticsMenu>, StaticMenuItemIcon<&bobbyicons::statistics>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTMODE>, SwitchScreenAction<SelectModeMenu>, StaticMenuItemIcon<&bobbyicons::modes>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SELECTMODE>, PushScreenAction<SelectModeMenu>, StaticMenuItemIcon<&bobbyicons::modes>>>();
if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODESETTINGS>, ModeSettingsAction>>(); } if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODESETTINGS>, ModeSettingsAction>>(); }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BATTERY>, SwitchScreenAction<BatteryMenu>, StaticMenuItemIcon<&bobbyicons::battery>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BATTERY>, PushScreenAction<BatteryMenu>, StaticMenuItemIcon<&bobbyicons::battery>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&bobbyicons::settings>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SETTINGS>, PushScreenAction<SettingsMenu>, StaticMenuItemIcon<&bobbyicons::settings>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GREENPASS>, SwitchScreenAction<GreenPassMenu>, StaticMenuItemIcon<&bobbyicons::greenpass>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GREENPASS>, PushScreenAction<GreenPassMenu>, StaticMenuItemIcon<&bobbyicons::greenpass>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LOCKVEHICLE>, SwitchScreenAction<Lockscreen>, StaticMenuItemIcon<&bobbyicons::lock>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LOCKVEHICLE>, PushScreenAction<Lockscreen>, StaticMenuItemIcon<&bobbyicons::lock>>>();
if (configs.feature.garage.isEnabled.value && configs.feature.esp_now.isEnabled.value) if (configs.feature.garage.isEnabled.value && configs.feature.esp_now.isEnabled.value)
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GARAGE>, SwitchScreenAction<GarageMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GARAGE>, PushScreenAction<GarageMenu>>>();
} }
if (configs.feature.ota.isEnabled.value) if (configs.feature.ota.isEnabled.value)
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATE>, SwitchScreenAction<OtaMenu>, StaticMenuItemIcon<&bobbyicons::update>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_UPDATE>, PushScreenAction<OtaMenu>, StaticMenuItemIcon<&bobbyicons::update>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, SwitchScreenAction<GraphsMenu>, StaticMenuItemIcon<&bobbyicons::graph>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GRAPHS>, PushScreenAction<GraphsMenu>, StaticMenuItemIcon<&bobbyicons::graph>>>();
#if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY) #if defined(FEATURE_CAN) && defined(FEATURE_POWERSUPPLY)
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWERSUPPLY>, SwitchScreenAction<PowerSupplyDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWERSUPPLY>, PushScreenAction<PowerSupplyDisplay>>>();
#endif #endif
#ifdef FEATURE_MOSFETS #ifdef FEATURE_MOSFETS
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOSFETS>, SwitchScreenAction<MosfetsMenu>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOSFETS>, PushScreenAction<MosfetsMenu>>>();
#endif #endif
#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS)
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMS>, SwitchScreenAction<BmsMenu>, StaticMenuItemIcon<&bobbyicons::bms>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BMS>, PushScreenAction<BmsMenu>, StaticMenuItemIcon<&bobbyicons::bms>>>();
#endif #endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEMOS>, SwitchScreenAction<DemosMenu>, StaticMenuItemIcon<&bobbyicons::demos>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEMOS>, PushScreenAction<DemosMenu>, StaticMenuItemIcon<&bobbyicons::demos>>>();
if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILES>, SwitchScreenAction<ProfilesMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>(); } if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_PROFILES>, PushScreenAction<ProfilesMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>(); }
if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MANAGEPROFILESMENU>,SwitchScreenAction<ManageProfilesMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>(); } if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MANAGEPROFILESMENU>,PushScreenAction<ManageProfilesMenu>, StaticMenuItemIcon<&bobbyicons::presets>>>(); }
if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEBUG>, SwitchScreenAction<DebugMenu>>>(); } if (SHOWITEM) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEBUG>, PushScreenAction<DebugMenu>>>(); }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWEROFF>, SwitchScreenAction<PoweroffDisplay>, StaticMenuItemIcon<&bobbyicons::poweroff>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_POWEROFF>, PushScreenAction<PoweroffDisplay>, StaticMenuItemIcon<&bobbyicons::poweroff>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CONFISCATIONMODE>, SwitchScreenAction<ConfiscationDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CONFISCATIONMODE>, PushScreenAction<ConfiscationDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REBOOT>, RebootAction, StaticMenuItemIcon<&bobbyicons::reboot>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REBOOT>, RebootAction, StaticMenuItemIcon<&bobbyicons::reboot>>>();
//#ifdef MAINMENU_PLUGIN //#ifdef MAINMENU_PLUGIN
// GMEN1 // GMEN1
@ -131,5 +132,5 @@ std::string MainMenu::text() const
void MainMenu::back() void MainMenu::back()
{ {
espgui::switchScreen<StatusDisplay>(); espgui::popScreen();
} }

View File

@ -3,14 +3,14 @@
// 3rdparty lib includes // 3rdparty lib includes
#include "changevaluedisplay.h" #include "changevaluedisplay.h"
#include "menuitem.h" #include "menuitem.h"
#include "actions/switchscreenaction.h" #include "actions/pushscreenaction.h"
#include "actions/popscreenaction.h"
#include "icons/back.h" #include "icons/back.h"
// local includes // local includes
#include "displays/bobbychangevaluedisplay.h" #include "displays/bobbychangevaluedisplay.h"
#include "utils.h" #include "utils.h"
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "displays/menus/modessettingsmenu.h"
namespace { namespace {
constexpr char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings"; constexpr char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings";
@ -22,16 +22,16 @@ using MotortestMultiplikatorChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<uint8_t>, BobbyChangeValueDisplay<uint8_t>,
espgui::StaticText<TEXT_MOTORTESTMULTIPLIKATOR>, espgui::StaticText<TEXT_MOTORTESTMULTIPLIKATOR>,
MotortestModeMultiplikatorAccessor, MotortestModeMultiplikatorAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using MotortestMaxPwmChangeDisplay = espgui::makeComponent< using MotortestMaxPwmChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<uint16_t>, BobbyChangeValueDisplay<uint16_t>,
espgui::StaticText<TEXT_MOTORTESTMAXPWM>, espgui::StaticText<TEXT_MOTORTESTMAXPWM>,
MotortestMaxPwmAccessor, MotortestMaxPwmAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<MotortestModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
} // namespace } // namespace
@ -39,9 +39,9 @@ using namespace espgui;
MotortestModeSettingsMenu::MotortestModeSettingsMenu() MotortestModeSettingsMenu::MotortestModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMULTIPLIKATOR>, SwitchScreenAction<MotortestMultiplikatorChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMULTIPLIKATOR>, PushScreenAction<MotortestMultiplikatorChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMAXPWM>, SwitchScreenAction<MotortestMaxPwmChangeDisplay>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTESTMAXPWM>, PushScreenAction<MotortestMaxPwmChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string MotortestModeSettingsMenu::text() const std::string MotortestModeSettingsMenu::text() const
@ -51,5 +51,5 @@ std::string MotortestModeSettingsMenu::text() const
void MotortestModeSettingsMenu::back() void MotortestModeSettingsMenu::back()
{ {
switchScreen<ModesSettingsMenu>(); popScreen();
} }

View File

@ -2,9 +2,10 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <actions/multiaction.h> #include <actions/multiaction.h>
#include <actions/switchscreenaction.h> #include <actions/popscreenaction.h>
#include <icons/back.h> #include <icons/back.h>
#include <textwithvaluehelper.h> #include <textwithvaluehelper.h>
#include <actions/pushscreenaction.h>
// local includes // local includes
#include "utils.h" #include "utils.h"
@ -20,7 +21,7 @@
#include "modes/wheelchairmode.h" #include "modes/wheelchairmode.h"
#endif #endif
#include "accessors/globalaccessors.h" #include "accessors/globalaccessors.h"
#include "displays/menus/mainmenu.h" #include "mainmenu.h"
namespace { namespace {
constexpr char TEXT_SELECTMODE[] = "Select mode"; constexpr char TEXT_SELECTMODE[] = "Select mode";
@ -60,19 +61,19 @@ using namespace espgui;
SelectModeMenu::SelectModeMenu() SelectModeMenu::SelectModeMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULT>, MultiAction<SetDefaultModeAction, PushScreenAction<MainMenu>>>>();
if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_TEMPOMAT, AvgSpeedAccessor>, MultiAction<SetTempomatModeAction, SwitchScreenAction<MainMenu>>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_TEMPOMAT, AvgSpeedAccessor>, MultiAction<SetTempomatModeAction, PushScreenAction<MainMenu>>>>(); }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSM>, MultiAction<SetLarsmModeAction, PushScreenAction<MainMenu>>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MICK>, MultiAction<SetMickModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MICK>, MultiAction<SetMickModeAction, PushScreenAction<MainMenu>>>>();
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REMOTECONTROL>, MultiAction<SetRemoteControlModeAction, SwitchScreenAction<MainMenu>>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_REMOTECONTROL>, MultiAction<SetRemoteControlModeAction, PushScreenAction<MainMenu>>>>(); }
#ifdef FEATURE_GAMETRAK #ifdef FEATURE_GAMETRAK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAK>, MultiAction<SetGametrakModeAction, PopScreenAction>>>();
#endif #endif
if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTEST>, MultiAction<SetMotorTestModeAction, SwitchScreenAction<MainMenu>>>>(); } if (!simplified) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MOTORTEST>, MultiAction<SetMotorTestModeAction, PushScreenAction<MainMenu>>>>(); }
#ifdef FEATURE_JOYSTICK #ifdef FEATURE_JOYSTICK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELCHAIR>, MultiAction<SetWheelchairModeAction, SwitchScreenAction<MainMenu>>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_WHEELCHAIR>, MultiAction<SetWheelchairModeAction, PushScreenAction<MainMenu>>>>();
#endif #endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PushScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string SelectModeMenu::text() const std::string SelectModeMenu::text() const
@ -113,5 +114,5 @@ void SelectModeMenu::start()
void SelectModeMenu::back() void SelectModeMenu::back()
{ {
switchScreen<MainMenu>(); popScreen();
} }

View File

@ -3,13 +3,12 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <menuitem.h> #include <menuitem.h>
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
#include "actions/switchscreenaction.h" #include "actions/popscreenaction.h"
#include "actioninterface.h" #include "actioninterface.h"
#include "fmt/core.h" #include "fmt/core.h"
#include "icons/back.h" #include "icons/back.h"
// local includes // local includes
#include "mainmenu.h"
#include "utils.h" #include "utils.h"
#include "icons/time.h" #include "icons/time.h"
#include "icons/reboot.h" #include "icons/reboot.h"
@ -187,7 +186,7 @@ StatisticsMenu::StatisticsMenu()
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>(); constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATSSAVE>, SaveKilometersAction, StaticMenuItemIcon<&bobbyicons::update>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATSSAVE>, SaveKilometersAction, StaticMenuItemIcon<&bobbyicons::update>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATSCLEAR>, ClearCurrentStatsAction, StaticMenuItemIcon<&bobbyicons::reboot>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_STATSCLEAR>, ClearCurrentStatsAction, StaticMenuItemIcon<&bobbyicons::reboot>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string StatisticsMenu::text() const std::string StatisticsMenu::text() const
@ -197,5 +196,5 @@ std::string StatisticsMenu::text() const
void StatisticsMenu::back() void StatisticsMenu::back()
{ {
espgui::switchScreen<MainMenu>(); espgui::popScreen();
} }

View File

@ -3,7 +3,8 @@
// 3rdparty lib includes // 3rdparty lib includes
#include <changevaluedisplay.h> #include <changevaluedisplay.h>
#include <menuitem.h> #include <menuitem.h>
#include <actions/switchscreenaction.h> #include <actions/pushscreenaction.h>
#include <actions/popscreenaction.h>
#include <icons/back.h> #include <icons/back.h>
#include <textwithvaluehelper.h> #include <textwithvaluehelper.h>
@ -14,7 +15,6 @@
#include "accessors/settingsaccessors.h" #include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h" #include "accessors/globalaccessors.h"
#include "actions/tempomatmodeapplycurrentpeedaction.h" #include "actions/tempomatmodeapplycurrentpeedaction.h"
#include "displays/menus/modessettingsmenu.h"
namespace { namespace {
constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings";
@ -27,16 +27,16 @@ using TempomatModeCruiseMotTgtChangeDisplay = espgui::makeComponent<
BobbyChangeValueDisplay<int16_t>, BobbyChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_NCRUISEMOTTGT>, espgui::StaticText<TEXT_NCRUISEMOTTGT>,
TempomatModeCruiseMotTgtAccessor, TempomatModeCruiseMotTgtAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
using TempomatModeModelModeChangeScreen = espgui::makeComponent< using TempomatModeModelModeChangeScreen = espgui::makeComponent<
BobbyChangeValueDisplay<UnifiedModelMode>, BobbyChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_MODELMODE>, espgui::StaticText<TEXT_MODELMODE>,
TempomatModeModelModeAccessor, TempomatModeModelModeAccessor,
espgui::ConfirmActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>>, espgui::ConfirmActionInterface<espgui::PopScreenAction>,
espgui::BackActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>> espgui::BackActionInterface<espgui::PopScreenAction>
>; >;
} // namespace } // namespace
@ -45,9 +45,9 @@ using namespace espgui;
TempomatModeSettingsMenu::TempomatModeSettingsMenu() TempomatModeSettingsMenu::TempomatModeSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLY, AvgSpeedAccessor>, TempomatModeApplyCurrentSpeedAction>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLY, AvgSpeedAccessor>, TempomatModeApplyCurrentSpeedAction>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, TempomatModeCruiseMotTgtAccessor>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, TempomatModeCruiseMotTgtAccessor>, PushScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, PushScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string TempomatModeSettingsMenu::text() const std::string TempomatModeSettingsMenu::text() const
@ -57,5 +57,5 @@ std::string TempomatModeSettingsMenu::text() const
void TempomatModeSettingsMenu::back() void TempomatModeSettingsMenu::back()
{ {
switchScreen<ModesSettingsMenu>(); popScreen();
} }

View File

@ -4,11 +4,12 @@
#include <configwrapper.h> #include <configwrapper.h>
#include <fmt/core.h> #include <fmt/core.h>
#include <icons/back.h> #include <icons/back.h>
#include <actions/dummyaction.h>
#include <actions/switchscreenaction.h>
#include <actions/popscreenaction.h>
// local includes // local includes
#include "globals.h" #include "globals.h"
#include "actions/dummyaction.h"
#include "actions/switchscreenaction.h"
#include "displays/bobbymenudisplay.h" #include "displays/bobbymenudisplay.h"
#include "bobbyerrorhandler.h" #include "bobbyerrorhandler.h"
@ -57,7 +58,7 @@ private:
ConfigWrapper<TEnum>* m_config; ConfigWrapper<TEnum>* m_config;
}; };
template<typename TEnum, typename TMenu> template<typename TEnum>
class TypeSafeChangeMenu : class TypeSafeChangeMenu :
public BobbyMenuDisplay public BobbyMenuDisplay
{ {
@ -71,7 +72,7 @@ public:
iterateEnum<TEnum>::iterate([&](TEnum enum_value, const auto &string_value){ iterateEnum<TEnum>::iterate([&](TEnum enum_value, const auto &string_value){
constructMenuItem<TypesafeEnumSetterMenuItem<TEnum>>(enum_value, m_config); constructMenuItem<TypesafeEnumSetterMenuItem<TEnum>>(enum_value, m_config);
}); });
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<TMenu>, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, PopScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
std::string text() const override std::string text() const override
@ -81,7 +82,7 @@ public:
void back() override void back() override
{ {
espgui::switchScreen<TMenu>(); espgui::popScreen();
} }
private: private:
ConfigWrapper<TEnum>* m_config; ConfigWrapper<TEnum>* m_config;
@ -102,7 +103,47 @@ public:
void triggered() override void triggered() override
{ {
espgui::switchScreen<typesafeenumchangemenu::TypeSafeChangeMenu<TEnum, TMenu>>(m_config); espgui::switchScreen<typesafeenumchangemenu::TypeSafeChangeMenu<TEnum>>(m_config);
}
private:
ConfigWrapper<TEnum>* m_config;
};
template<typename TEnum, const char *Ttext>
class PopScreenTypeSafeChangeMenuItem : public espgui::MenuItem
{
public:
PopScreenTypeSafeChangeMenuItem(ConfigWrapper<TEnum>* 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<TEnum>* m_config;
};
template<typename TEnum, const char *Ttext>
class PushScreenTypeSafeChangeMenuItem : public espgui::MenuItem
{
public:
PushScreenTypeSafeChangeMenuItem(ConfigWrapper<TEnum>* config) : m_config{config} {}
static constexpr const char *STATIC_TEXT = Ttext;
std::string text() const override
{
return Ttext;
}
void triggered() override
{
espgui::pushScreen<typesafeenumchangemenu::TypeSafeChangeMenu<TEnum>>(m_config);
} }
private: private:
ConfigWrapper<TEnum>* m_config; ConfigWrapper<TEnum>* m_config;

View File

@ -57,14 +57,9 @@ void MetersDisplay::buttonPressed(espgui::Button button)
switch (button) switch (button)
{ {
using espgui::Button; using espgui::Button;
case Button::Left: case Button::Right: pushScreen<MainMenu>(); break;
case Button::Right: case Button::Up: switchScreen<StatusDisplay>(); break;
switchScreen<MainMenu>();
break;
case Button::Up:
switchScreen<StatusDisplay>();
break;
case Button::Down: case Button::Down:
#ifdef FEATURE_BMS #ifdef FEATURE_BMS
switchScreen<BmsDisplay>(); switchScreen<BmsDisplay>();
@ -72,5 +67,6 @@ void MetersDisplay::buttonPressed(espgui::Button button)
switchScreen<StatusDisplay>(); switchScreen<StatusDisplay>();
#endif #endif
break; break;
default:;
} }
} }

View File

@ -230,9 +230,7 @@ void StatusDisplay::buttonPressed(espgui::Button button)
switch (button) switch (button)
{ {
using espgui::Button; using espgui::Button;
case Button::Right: case Button::Right: pushScreen<MainMenu>(); break;
switchScreen<MainMenu>();
break;
case Button::Up: case Button::Up:
if (simplified) if (simplified)
return; return;

View File

@ -35,7 +35,7 @@ using namespace std::chrono_literals;
namespace { namespace {
espchrono::millis_clock::time_point lastStatsPush; espchrono::millis_clock::time_point lastStatsPush;
std::optional<espchrono::millis_clock::time_point> lastStatsUpdate; std::optional<espchrono::millis_clock::time_point> lastStatsUpdate;
} } // namespace
extern "C" void app_main() extern "C" void app_main()
{ {