From d5b9c1142f25d556432176f16ce1754e0b77233a Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 30 Dec 2021 00:57:53 +0100 Subject: [PATCH] Checkboxes now show an error message if saving fails --- components/esp-gui-lib | 2 +- main/CMakeLists.txt | 1 + main/accessors/wifistaconfigaccessors.h | 1 + main/bobbycheckbox.h | 15 ++ main/displays/calibratevoltagedisplay.cpp | 5 +- main/displays/menus/blesettingsmenu.cpp | 13 +- .../boardcomputerhardwaresettingsmenu.cpp | 2 - main/displays/menus/buzzermenu.cpp | 5 +- main/displays/menus/cloudsettingsmenu.cpp | 5 +- main/displays/menus/commanddebugmenu.h | 14 +- .../menus/controllerhardwaresettingsmenu.cpp | 9 +- main/displays/menus/debugmenu.cpp | 55 ++--- .../menus/defaultmodesettingsmenu.cpp | 17 +- main/displays/menus/dynamicdebugmenu.cpp | 203 ++++++++++++++++++ main/displays/menus/dynamicdebugmenu.h | 148 +------------ main/displays/menus/enablemenu.cpp | 19 +- main/displays/menus/espnowmenu.cpp | 10 +- main/displays/menus/espnowsettingsmenu.cpp | 14 +- main/displays/menus/feedbackdebugmenu.h | 14 +- main/displays/menus/greenpassmenu.cpp | 11 +- main/displays/menus/handbremssettingsmenu.cpp | 9 +- main/displays/menus/invertmenu.cpp | 17 +- main/displays/menus/ledstripmenu.cpp | 15 +- .../menus/ledstripselectblinkmenu.cpp | 16 +- .../displays/menus/lockscreensettingsmenu.cpp | 7 +- main/displays/menus/mosfetsmenu.cpp | 15 +- main/displays/menus/motorfeedbackdebugmenu.h | 9 +- main/displays/menus/motorstatedebugmenu.h | 8 +- main/displays/menus/settingsmenu.cpp | 11 +- main/displays/menus/timesettingsmenu.cpp | 5 +- main/displays/menus/udpcloudsettingsmenu.cpp | 7 +- main/displays/menus/wifiapsettingsmenu.cpp | 7 +- .../displays/menus/wifistaconfigentrymenu.cpp | 7 +- main/displays/menus/wifistasettingsmenu.cpp | 21 +- main/texts.cpp | 27 --- main/texts.h | 31 +-- 36 files changed, 414 insertions(+), 361 deletions(-) create mode 100644 main/bobbycheckbox.h diff --git a/components/esp-gui-lib b/components/esp-gui-lib index c593315..8914f2c 160000 --- a/components/esp-gui-lib +++ b/components/esp-gui-lib @@ -1 +1 @@ -Subproject commit c5933152e1b34e0c33e2db4a8b255f3306fe03fa +Subproject commit 8914f2cc3bebe516c28159ba5abb7dd96a63624b diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 4c12d22..8dfd123 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -8,6 +8,7 @@ set(headers bluetoothtexthelpers.h bmsutils.h bobbybuttons.h + bobbycheckbox.h bobbyerrorhandler.h buildserver.h buttons.h diff --git a/main/accessors/wifistaconfigaccessors.h b/main/accessors/wifistaconfigaccessors.h index bfeaa5f..a4d5db5 100644 --- a/main/accessors/wifistaconfigaccessors.h +++ b/main/accessors/wifistaconfigaccessors.h @@ -14,6 +14,7 @@ #include "accessorhelpers.h" struct WifiStaEnabledAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiStaEnabled; } }; +struct WifiStaMinRssiAccessor : public NewSettingsAccessor { ConfigWrapper &getConfig() const override { return configs.wifiStaMinRssi; } }; class WifiStaConfigSsidAccessor : public virtual NewSettingsAccessor { diff --git a/main/bobbycheckbox.h b/main/bobbycheckbox.h new file mode 100644 index 0000000..280c0e7 --- /dev/null +++ b/main/bobbycheckbox.h @@ -0,0 +1,15 @@ +#pragma once + +// 3rdparty lib includes +#include +#include + +// local includes +#include "bobbyerrorhandler.h" + +class BobbyCheckbox : + public virtual espgui::ToggleBoolAction, + public virtual espgui::CheckboxIcon, + public virtual BobbyErrorHandler +{ +}; diff --git a/main/displays/calibratevoltagedisplay.cpp b/main/displays/calibratevoltagedisplay.cpp index 2105c96..ee3179f 100644 --- a/main/displays/calibratevoltagedisplay.cpp +++ b/main/displays/calibratevoltagedisplay.cpp @@ -2,12 +2,11 @@ // 3rdparty lib includes #include -#include -#include // local includes #include "displays/menus/batterymenu.h" #include "accessors/settingsaccessors.h" +#include "bobbycheckbox.h" namespace { class Save30VCalibrationAction : public virtual espgui::ActionInterface @@ -63,7 +62,7 @@ CalibrateVoltageDisplay::CalibrateVoltageDisplay() { constructMenuItem, Save30VCalibrationAction>>(); constructMenuItem, Save50VCalibrationAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BatteryApplyCalibrationAccessor>>(); + constructMenuItem, BobbyCheckbox, BatteryApplyCalibrationAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); constructMenuItem>(); diff --git a/main/displays/menus/blesettingsmenu.cpp b/main/displays/menus/blesettingsmenu.cpp index 8fdc785..aec2d9a 100644 --- a/main/displays/menus/blesettingsmenu.cpp +++ b/main/displays/menus/blesettingsmenu.cpp @@ -1,14 +1,15 @@ #include "blesettingsmenu.h" +// 3rdparty lib includes +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" + // local includes #include "accessors/settingsaccessors.h" -#include "actions/dummyaction.h" -#include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" #include "bletexthelpers.h" -#include "checkboxicon.h" #include "displays/menus/settingsmenu.h" -#include "icons/back.h" +#include "bobbycheckbox.h" #include "texts.h" #ifdef FEATURE_BLE @@ -17,7 +18,7 @@ using namespace espgui; BleSettingsMenu::BleSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, BleEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, BleEnabledAccessor>>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp index 4c9ed7e..4f2b0c9 100644 --- a/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp +++ b/main/displays/menus/boardcomputerhardwaresettingsmenu.cpp @@ -5,9 +5,7 @@ #include #include #include -#include #include -#include #include // local includes diff --git a/main/displays/menus/buzzermenu.cpp b/main/displays/menus/buzzermenu.cpp index 3a09f02..757e0ee 100644 --- a/main/displays/menus/buzzermenu.cpp +++ b/main/displays/menus/buzzermenu.cpp @@ -4,8 +4,6 @@ #include "changevaluedisplay.h" #include "menuitem.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" #include "icons/back.h" // local includes @@ -14,6 +12,7 @@ #include "globals.h" #include "accessors/settingsaccessors.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" namespace { struct FrontFreqAccessor : public espgui::RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } }; @@ -90,7 +89,7 @@ BuzzerMenu::BuzzerMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); + constructMenuItem, BobbyCheckbox, ReverseBeepAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/cloudsettingsmenu.cpp b/main/displays/menus/cloudsettingsmenu.cpp index 227072b..d4e744d 100644 --- a/main/displays/menus/cloudsettingsmenu.cpp +++ b/main/displays/menus/cloudsettingsmenu.cpp @@ -5,9 +5,7 @@ #include "menuitem.h" #include "changevaluedisplay.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" #include "actions/dummyaction.h" -#include "checkboxicon.h" #include "icons/back.h" // local includes @@ -16,6 +14,7 @@ #include "accessors/settingsaccessors.h" #include "cloud.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" #ifdef FEATURE_CLOUD namespace { @@ -58,7 +57,7 @@ using namespace espgui; CloudSettingsMenu::CloudSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, CloudEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, CloudEnabledAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem>(); constructMenuItem>(); diff --git a/main/displays/menus/commanddebugmenu.h b/main/displays/menus/commanddebugmenu.h index c8e4685..003a14d 100644 --- a/main/displays/menus/commanddebugmenu.h +++ b/main/displays/menus/commanddebugmenu.h @@ -8,21 +8,18 @@ #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" #include "icons/back.h" -#include "texts.h" #include "debugtexthelpers.h" -using namespace espgui; - -namespace { template class CommandDebugMenu : public BobbyMenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::StaticText, + public espgui::BackActionInterface> { public: CommandDebugMenu() { + using namespace espgui; constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); @@ -31,7 +28,8 @@ public: } }; +constexpr char TEXT_FRONTCOMMAND[] = "Front command"; using FrontCommandDebugMenu = CommandDebugMenu; -using BackCommandDebugMenu = CommandDebugMenu; -} // namespace +constexpr char TEXT_BACKCOMMAND[] = "Back command"; +using BackCommandDebugMenu = CommandDebugMenu; diff --git a/main/displays/menus/controllerhardwaresettingsmenu.cpp b/main/displays/menus/controllerhardwaresettingsmenu.cpp index 3d9a092..4155d79 100644 --- a/main/displays/menus/controllerhardwaresettingsmenu.cpp +++ b/main/displays/menus/controllerhardwaresettingsmenu.cpp @@ -5,9 +5,7 @@ // 3rdparty lib includes #include "changevaluedisplay.h" -#include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" -#include "checkboxicon.h" #include "icons/back.h" // local includes @@ -18,6 +16,7 @@ #include "displays/menus/enablemenu.h" #include "displays/menus/invertmenu.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" namespace { using WheelDiameterMmChangeScreen = espgui::makeComponent< @@ -69,10 +68,10 @@ ControllerHardwareSettingsMenu::ControllerHardwareSettingsMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); + constructMenuItem, BobbyCheckbox, SwapFrontBackAccessor>>(); #ifdef FEATURE_CAN - constructMenuItem, ToggleBoolAction, CheckboxIcon, SendFrontCanCmdAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, SendBackCanCmdAccessor>>(); + constructMenuItem, BobbyCheckbox, SendFrontCanCmdAccessor>>(); + constructMenuItem, BobbyCheckbox, SendBackCanCmdAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); #endif diff --git a/main/displays/menus/debugmenu.cpp b/main/displays/menus/debugmenu.cpp index af0fb81..bad2aa6 100644 --- a/main/displays/menus/debugmenu.cpp +++ b/main/displays/menus/debugmenu.cpp @@ -4,8 +4,6 @@ #include "menuitem.h" #include "actions/switchscreenaction.h" #include "actions/dummyaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" #include "icons/back.h" #include "accessors/settingsaccessors.h" #include @@ -28,30 +26,39 @@ #include "displays/menus/dynamicdebugmenu.h" #include "displays/menus/mainmenu.h" #include "displays/menus/batterydebugmenu.h" -#include "bobbyerrorhandler.h" +#include "bobbycheckbox.h" namespace { -class AlertAction : public espgui::MenuItem -{ -public: - std::string text() const override { return "Open popup"; } - void triggered() override - { - BobbyErrorHandler{}.errorOccured("Das\nist\nein sehr langer text, der nicht in eine zeile passt"); - } -}; +//constexpr char TEXT_DEBUG[] = "Debug"; +//constexpr char TEXT_FRONTCOMMAND[] = "Front command"; +//constexpr char TEXT_BACKCOMMAND[] = "Back command"; +//constexpr char TEXT_FRONTLEFTCOMMAND[] = "Front left command"; +//constexpr char TEXT_FRONTRIGHTCOMMAND[] = "Front right command"; +//constexpr char TEXT_BACKLEFTCOMMAND[] = "Back left command"; +//constexpr char TEXT_BACKRIGHTCOMMAND[] = "Back right command"; +//constexpr char TEXT_FRONTFEEDBACK[] = "Front feedback"; +//constexpr char TEXT_BACKFEEDBACK[] = "Back feedback"; +//constexpr char TEXT_FRONTLEFTFEEDBACK[] = "Front left feedback"; +//constexpr char TEXT_FRONTRIGHTFEEDBACK[] = "Front right feedback"; +//constexpr char TEXT_BACKLEFTFEEDBACK[] = "Back left feedback"; +//constexpr char TEXT_BACKRIGHTFEEDBACK[] = "Back right feedback"; +constexpr char TEXT_LOADSETTINGS[] = "Load settings (old)"; +constexpr char TEXT_SAVESETTINGS[] = "Save settings (old)"; +constexpr char TEXT_ERASENVS[] = "Erase NVS (old)"; +constexpr char TEXT_DYNAMICMENU[] = "GUI experiments"; +//constexpr char TEXT_BACK[] = "Back"; } // namespace -using namespace espgui; - DebugMenu::DebugMenu() { - constructMenuItem(); - constructMenuItem, SwitchScreenAction>>(); + using namespace espgui; + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, LoadSettingsAction>>(); - constructMenuItem, SaveSettingsAction>>(); - constructMenuItem, EraseNvsAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); +#ifdef FEATURE_UDPCLOUD + constructMenuItem, BobbyCheckbox, CloudDebugEnableAccessor>>(); +#endif + constructMenuItem, DisabledColor, DummyAction>>(); constructMenuItem>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); @@ -64,19 +71,15 @@ DebugMenu::DebugMenu() constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); constructMenuItem>(); - constructMenuItem, DisabledColor, DummyAction>>(); - constructMenuItem>(); constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); constructMenuItem, SwitchScreenAction, FrontFeedbackColor>>(); constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); constructMenuItem, SwitchScreenAction, BackFeedbackColor>>(); constructMenuItem>(); + constructMenuItem, LoadSettingsAction>>(); + constructMenuItem, SaveSettingsAction>>(); + constructMenuItem, EraseNvsAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::battery>>>(); -#ifdef FEATURE_UDPCLOUD - constructMenuItem, ToggleBoolAction, CheckboxIcon, CloudDebugEnableAccessor>>(); -#endif constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index 6d32adc..965e31f 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -3,10 +3,8 @@ // 3rdparty lib includes #include #include -#include #include #include -#include #include #include @@ -17,6 +15,7 @@ #include "accessors/settingsaccessors.h" #include "displays/menus/handbremssettingsmenu.h" #include "displays/menus/modessettingsmenu.h" +#include "bobbycheckbox.h" namespace { using DefaultModeModelModeChangeDisplay = espgui::makeComponent< @@ -120,13 +119,13 @@ DefaultModeSettingsMenu::DefaultModeSettingsMenu() if (diff < 20) { constructMenuItem, StaticFont<2>, StaticColor, DummyAction>>(); } constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingUpAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingDownAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeSquareGasAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeSquareBremsAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeEnableSmoothingUpAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeEnableSmoothingDownAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); + constructMenuItem, BobbyCheckbox, DefaultModeEnableHybridAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/dynamicdebugmenu.cpp b/main/displays/menus/dynamicdebugmenu.cpp index e69de29..085f3c1 100644 --- a/main/displays/menus/dynamicdebugmenu.cpp +++ b/main/displays/menus/dynamicdebugmenu.cpp @@ -0,0 +1,203 @@ +#include "dynamicdebugmenu.h" + +// system includes +#include +#include + +// 3rdparty lib includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// local includes +#include "displays/bobbychangevaluedisplay.h" +#include "utils.h" +#include "icons/lock.h" +#include "texts.h" +#include "bobbycheckbox.h" +#include "bobbyerrorhandler.h" + +using namespace espgui; + +namespace { +constexpr char TEXT_FONTTEST0[] = "Rich&1Text&2Renderer"; +constexpr char TEXT_FONTTEST1[] = "Test&ssmall&mmedium"; +constexpr char TEXT_FONTTEST2[] = "Test&ssmall&frestored"; +constexpr char TEXT_FONTTEST3[] = "Test&s&3small&4with&6color&7grey"; +constexpr char TEXT_DUMMYITEM[] = "Dummy item"; +constexpr char TEXT_DYNAMICCOLOR[] = "Dynamic color"; +constexpr char TEXT_DYNAMICFONT[] = "Dynamic font"; +constexpr char TEXT_DYNAMICICON[] = "Dynamic icon"; +constexpr char TEXT_STATICICON[] = "Static icon"; +constexpr char TEXT_LOCKTOGGLE[] = "Lock toggle"; +constexpr char TEXT_DEBUGTOGGLE[] = "Toggle"; +constexpr char TEXT_DEBUGTOGGLEMENU[] = "Toggle (with menu)"; +constexpr char TEXT_OPENPOPUP[] = "Open popup"; + +bool toggleLocked{}; +bool toggle{}; + +class RandomColor : public virtual ColorInterface +{ +public: + int color() const override; + +private: + mutable std::optional m_nextUpdate; + mutable int m_color; +}; + +class RandomFont : public virtual FontInterface +{ +public: + int font() const override; + +private: + mutable std::optional m_nextUpdate; + mutable int m_font; +}; + +class RandomIcon : public virtual MenuItemIconInterface +{ +public: + const MenuItemIcon *icon() const override; + +private: + mutable std::optional m_nextUpdate; + mutable const Icon<24, 24> *m_icon; +}; + +struct ToggleLockedAccessor : public virtual RefAccessor +{ +public: + bool &getRef() const override { return toggleLocked; } +}; + +struct ToggleAccessor : public virtual AccessorInterface +{ +public: + bool getValue() const override { return toggle; }; + tl::expected setValue(bool value) override; +}; + +using ToggleChangeValueDisplay = espgui::makeComponent< + BobbyChangeValueDisplay, + espgui::StaticText, + ToggleAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; + +class OpenPopupAction : public virtual espgui::ActionInterface +{ +public: + void triggered() override + { + BobbyErrorHandler{}.errorOccured("Das\nist\nein sehr langer text, der nicht in eine zeile passt"); + } +}; +} // namespace + +std::string RandomText::text() const +{ + const auto now = espchrono::millis_clock::now(); + if (!m_nextUpdate || now >= *m_nextUpdate) + { + m_title = fmt::format("Dynamic text: {}", cpputils::randomNumber(100, espcpputils::esp_random_device{})); + m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; + } + + return m_title; +} + +DynamicDebugMenu::DynamicDebugMenu() +{ + // dummy items to allow for scrolling + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + + // the interesting bits + constructMenuItem, OpenPopupAction>>(); + constructMenuItem>(); + constructMenuItem, RandomColor, DummyAction>>(); + constructMenuItem, RandomFont, DummyAction>>(); + constructMenuItem, RandomIcon, DummyAction>>(); + constructMenuItem, StaticMenuItemIcon<&bobbyicons::lock>, DummyAction>>(); + constructMenuItem, BobbyCheckbox, ToggleLockedAccessor>>(); + constructMenuItem, BobbyCheckbox, ToggleAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem>(); + + // more scrolling + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + constructMenuItem, DummyAction>>(); + + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +namespace { + +int RandomColor::color() const +{ + const auto now = espchrono::millis_clock::now(); + if (!m_nextUpdate || now >= *m_nextUpdate) + { + const auto count = std::size(default_4bit_palette); + m_color = default_4bit_palette[cpputils::randomNumber(count-1, espcpputils::esp_random_device{})]; + m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; + } + + return m_color; +} + +int RandomFont::font() const +{ + const auto now = espchrono::millis_clock::now(); + if (!m_nextUpdate || now >= *m_nextUpdate) + { + constexpr const int fonts[] = { 2, 4 }; + m_font = fonts[cpputils::randomNumber(std::size(fonts)-1, espcpputils::esp_random_device{})]; + m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; + } + + return m_font; +} + +const MenuItemIcon *RandomIcon::icon() const +{ + const auto now = espchrono::millis_clock::now(); + if (!m_nextUpdate || now >= *m_nextUpdate) + { + if (m_icon) + m_icon = nullptr; + else + m_icon = &bobbyicons::lock; + m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; + } + + return m_icon; +} + +tl::expected ToggleAccessor::setValue(bool value) +{ + if (toggleLocked) + return tl::make_unexpected("cannot be changed while is locked!"); + toggle = value; + return {}; +} + +} // namespace diff --git a/main/displays/menus/dynamicdebugmenu.h b/main/displays/menus/dynamicdebugmenu.h index 6e0f075..ef543a2 100644 --- a/main/displays/menus/dynamicdebugmenu.h +++ b/main/displays/menus/dynamicdebugmenu.h @@ -1,163 +1,29 @@ #pragma once -// system includes -#include -#include - // 3rdparty lib includes +#include #include -#include -#include -#include +#include // local includes #include "displays/bobbymenudisplay.h" -#include "utils.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "actions/dummyaction.h" -#include "actions/toggleboolaction.h" -#include "icons/lock.h" -#include "checkboxicon.h" -#include "icons/back.h" -#include "texts.h" +#include "debugmenu.h" -using namespace espgui; - -namespace { -class RandomText : public virtual TextInterface +class RandomText : public virtual espgui::TextInterface { public: - std::string text() const override - { - const auto now = espchrono::millis_clock::now(); - if (!m_nextUpdate || now >= *m_nextUpdate) - { - m_title = fmt::format("Dynamic text: {}", cpputils::randomNumber(100, espcpputils::esp_random_device{})); - m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; - } - - return m_title; - } + std::string text() const override; private: mutable std::optional m_nextUpdate; mutable std::string m_title; }; -class RandomColor : public virtual ColorInterface -{ -public: - int color() const override - { - const auto now = espchrono::millis_clock::now(); - if (!m_nextUpdate || now >= *m_nextUpdate) - { - const auto count = std::size(default_4bit_palette); - m_color = default_4bit_palette[cpputils::randomNumber(count-1, espcpputils::esp_random_device{})]; - m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; - } - - return m_color; - } - -private: - mutable std::optional m_nextUpdate; - mutable int m_color; -}; - -class RandomFont : public virtual FontInterface -{ -public: - int font() const override - { - const auto now = espchrono::millis_clock::now(); - if (!m_nextUpdate || now >= *m_nextUpdate) - { - constexpr const int fonts[] = { 2, 4 }; - m_font = fonts[cpputils::randomNumber(std::size(fonts)-1, espcpputils::esp_random_device{})]; - m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; - } - - return m_font; - } - -private: - mutable std::optional m_nextUpdate; - mutable int m_font; -}; - -class RandomIcon : public virtual MenuItemIconInterface -{ -public: - const MenuItemIcon *icon() const override - { - const auto now = espchrono::millis_clock::now(); - if (!m_nextUpdate || now >= *m_nextUpdate) - { - if (m_icon) - m_icon = nullptr; - else - m_icon = &bobbyicons::lock; - m_nextUpdate = now + std::chrono::milliseconds{cpputils::randomNumber(100, 1000, espcpputils::esp_random_device{})}; - } - - return m_icon; - } - -private: - mutable std::optional m_nextUpdate; - mutable const Icon<24, 24> *m_icon; -}; - -bool toggle; -struct ToggleAccessor : public virtual RefAccessor -{ -public: - bool &getRef() const override { return toggle; } -}; - -constexpr char TEXT_DUMMYITEM[] = "Dummy item"; -constexpr char TEXT_DYNAMICCOLOR[] = "Dynamic color"; -constexpr char TEXT_DYNAMICFONT[] = "Dynamic font"; -constexpr char TEXT_DYNAMICICON[] = "Dynamic icon"; -constexpr char TEXT_STATICICON[] = "Static icon"; -constexpr char TEXT_DEBUGTOGGLE[] = "Toggle"; - class DynamicDebugMenu : public BobbyMenuDisplay, public RandomText, - public BackActionInterface> + public espgui::BackActionInterface> { public: - DynamicDebugMenu() - { - // dummy items to allow for scrolling - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - - // the interesting bits - constructMenuItem>(); - constructMenuItem, RandomColor, DummyAction>>(); - constructMenuItem, RandomFont, DummyAction>>(); - constructMenuItem, RandomIcon, DummyAction>>(); - constructMenuItem, StaticMenuItemIcon<&bobbyicons::lock>, DummyAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, ToggleAccessor>>(); - constructMenuItem>(); - - // more scrolling - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - constructMenuItem, DummyAction>>(); - - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + DynamicDebugMenu(); }; -} // namespace diff --git a/main/displays/menus/enablemenu.cpp b/main/displays/menus/enablemenu.cpp index ce51f6a..ffd9a53 100644 --- a/main/displays/menus/enablemenu.cpp +++ b/main/displays/menus/enablemenu.cpp @@ -1,19 +1,20 @@ #include "enablemenu.h" -// local includes -#include "accessors/settingsaccessors.h" +// 3rdparty lib includes #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" -#include "displays/menus/controllerhardwaresettingsmenu.h" #include "icons/back.h" +// local includes +#include "displays/menus/controllerhardwaresettingsmenu.h" +#include "accessors/settingsaccessors.h" +#include "bobbycheckbox.h" + EnableMenu::EnableMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, FrontLeftEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, FrontRightEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, BackLeftEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, BackRightEnabledAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/espnowmenu.cpp b/main/displays/menus/espnowmenu.cpp index c9f1aee..6e4755e 100644 --- a/main/displays/menus/espnowmenu.cpp +++ b/main/displays/menus/espnowmenu.cpp @@ -1,15 +1,17 @@ #include "espnowmenu.h" #ifdef FEATURE_ESPNOW +// 3rdparty lib includes #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" #include "icons/back.h" + +// local includes #include "icons/settings.h" #include "icons/time.h" #include "displays/menus/espnowsettingsmenu.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" using namespace espgui; @@ -18,8 +20,8 @@ namespace espnowmenu { EspNowMenu::EspNowMenu() { constructMenuItem, espnowmenu::SendBobbycarTimesyncMessageAction, StaticMenuItemIcon<&bobbyicons::time>>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, espnowmenu::ReceiveTimeStampAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, espnowmenu::ReceiveTsFromOtherBobbycarsAccessor>>(); + constructMenuItem, BobbyCheckbox, espnowmenu::ReceiveTimeStampAccessor>>(); + constructMenuItem, BobbyCheckbox, espnowmenu::ReceiveTsFromOtherBobbycarsAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::settings>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/espnowsettingsmenu.cpp b/main/displays/menus/espnowsettingsmenu.cpp index e642012..4b6a9a3 100644 --- a/main/displays/menus/espnowsettingsmenu.cpp +++ b/main/displays/menus/espnowsettingsmenu.cpp @@ -1,14 +1,16 @@ #include "espnowsettingsmenu.h" #ifdef FEATURE_ESPNOW -#include "accessors/settingsaccessors.h" +// 3rdparty lib includes #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" #include "icons/back.h" + +// local includes +#include "accessors/settingsaccessors.h" #include "icons/time.h" #include "espnowmenu.h" +#include "bobbycheckbox.h" using namespace espgui; @@ -16,9 +18,9 @@ namespace espnowsettingsmenu { } // namespace EspNowSettingsMenu::EspNowSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, ESPNowSyncTimeEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, ESPNowSyncTimeWithOthersEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, ESPNowSyncBlinkEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, ESPNowSyncTimeEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, ESPNowSyncTimeWithOthersEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, ESPNowSyncBlinkEnabledAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/feedbackdebugmenu.h b/main/displays/menus/feedbackdebugmenu.h index 3fd6ee4..0f2200f 100644 --- a/main/displays/menus/feedbackdebugmenu.h +++ b/main/displays/menus/feedbackdebugmenu.h @@ -8,23 +8,20 @@ #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" #include "icons/back.h" -#include "texts.h" #include "debugtexthelpers.h" #include "debugcolorhelpers.h" #include "displays/menus/debugmenu.h" -using namespace espgui; - -namespace { template class ColorInterface> class FeedbackDebugMenu : public BobbyMenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::StaticText, + public espgui::BackActionInterface> { public: FeedbackDebugMenu() { + using namespace espgui; //constructMenuItem, DummyAction>>(); constructMenuItem, DummyAction>>(); //constructMenuItem, DummyAction>>(); @@ -34,7 +31,8 @@ public: } }; +constexpr char TEXT_FRONTFEEDBACK[] = "Front feedback"; using FrontFeedbackDebugMenu = FeedbackDebugMenu; -using BackFeedbackDebugMenu = FeedbackDebugMenu; -} // namespace +constexpr char TEXT_BACKFEEDBACK[] = "Back feedback"; +using BackFeedbackDebugMenu = FeedbackDebugMenu; diff --git a/main/displays/menus/greenpassmenu.cpp b/main/displays/menus/greenpassmenu.cpp index 821def5..8cf3b5c 100644 --- a/main/displays/menus/greenpassmenu.cpp +++ b/main/displays/menus/greenpassmenu.cpp @@ -6,18 +6,17 @@ // 3rdparty lib includes #include +#include "actions/switchscreenaction.h" +#include "actions/dummyaction.h" +#include "icons/back.h" // local includes -#include "actions/switchscreenaction.h" #include "actions/qraction.h" -#include "actions/dummyaction.h" -#include "actions/toggleboolaction.h" #include "displays/menus/mainmenu.h" #include "displays/qrdisplay.h" #include "displays/qrimportdisplay.h" -#include "icons/back.h" -#include "checkboxicon.h" #include "qrimport.h" +#include "bobbycheckbox.h" using namespace espgui; @@ -84,7 +83,7 @@ GreenPassMenu::GreenPassMenu() constructMenuItem>>(nvs_key); } } - constructMenuItem, ToggleBoolAction, CheckboxIcon, DeleteModeAccessor>>(); + constructMenuItem, BobbyCheckbox, DeleteModeAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp index 118eaf2..d4c9026 100644 --- a/main/displays/menus/handbremssettingsmenu.cpp +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -3,9 +3,7 @@ // 3rd party libs #include #include -#include #include -#include #include #include @@ -15,6 +13,7 @@ #include "changevaluedisplay_handbremsmode.h" #include "displays/menus/defaultmodesettingsmenu.h" #include "texts.h" +#include "bobbycheckbox.h" namespace { using HandBremsTriggerTimeoutChangeValueDisplay = espgui::makeComponent< @@ -44,9 +43,9 @@ public: HandbremsSettingsMenu::HandbremsSettingsMenu() { using namespace espgui; - constructMenuItem, ToggleBoolAction, CheckboxIcon, HandbremsEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, HandbremsAutomaticAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, HandbremsVisualizeAccessor>>(); + constructMenuItem, BobbyCheckbox, HandbremsEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, HandbremsAutomaticAccessor>>(); + constructMenuItem, BobbyCheckbox, HandbremsVisualizeAccessor>>(); constructMenuItem>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/displays/menus/invertmenu.cpp b/main/displays/menus/invertmenu.cpp index b49aea8..dc66527 100644 --- a/main/displays/menus/invertmenu.cpp +++ b/main/displays/menus/invertmenu.cpp @@ -1,20 +1,21 @@ #include "invertmenu.h" +// 3rdparty lib includes +#include "actions/switchscreenaction.h" +#include "icons/back.h" + // local includes #include "accessors/settingsaccessors.h" -#include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" #include "displays/menus/controllerhardwaresettingsmenu.h" -#include "icons/back.h" +#include "bobbycheckbox.h" InvertMenu::InvertMenu() { using namespace espgui; - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); + constructMenuItem, BobbyCheckbox, FrontLeftInvertedAccessor>>(); + constructMenuItem, BobbyCheckbox, FrontRightInvertedAccessor>>(); + constructMenuItem, BobbyCheckbox, BackLeftInvertedAccessor>>(); + constructMenuItem, BobbyCheckbox, BackRightInvertedAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 4fa59ab..bd99ae5 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -5,9 +5,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -22,6 +20,7 @@ #include "ledstrip.h" #include "ledstripselectanimationmenu.h" #include "ledstripselectblinkmenu.h" +#include "bobbycheckbox.h" // clang-format off @@ -115,13 +114,13 @@ LedstripMenu::LedstripMenu() { using namespace espgui; constructMenuItem, espgui::SwitchScreenAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedAnimationAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBrakeLightsAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableBeepWhenBlinkAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableFullBlinkAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableBeepWhenBlinkAccessor>>(); + constructMenuItem, BobbyCheckbox, EnableFullBlinkAccessor>>(); - if (!simplified) { constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOAccessor>>(); } - constructMenuItem, ToggleBoolAction, CheckboxIcon, EnableLedstripStVOFrontlight>>(); + if (!simplified) { constructMenuItem, BobbyCheckbox, EnableLedstripStVOAccessor>>(); } + constructMenuItem, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem, AllCustomLedsOffAction>>(); if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } if (!simplified) { constructMenuItem, espgui::SwitchScreenAction>>(); } diff --git a/main/displays/menus/ledstripselectblinkmenu.cpp b/main/displays/menus/ledstripselectblinkmenu.cpp index 6e44234..fbf7ab6 100644 --- a/main/displays/menus/ledstripselectblinkmenu.cpp +++ b/main/displays/menus/ledstripselectblinkmenu.cpp @@ -1,16 +1,18 @@ #include "ledstripselectblinkmenu.h" #ifdef FEATURE_LEDSTRIP -// Local includes -#include "accessors/settingsaccessors.h" + +// 3rdparty lib includes #include "actions/dummyaction.h" -#include "actions/ledstripblinkactions.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" -#include "displays/menus/ledstripmenu.h" #include "icons/back.h" +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/ledstripblinkactions.h" +#include "displays/menus/ledstripmenu.h" +#include "bobbycheckbox.h" + using namespace espgui; std::string currentSelectedBlinkAnimationText::text() const { @@ -42,7 +44,7 @@ LedstripSelectBlinkMenu::LedstripSelectBlinkMenu() constructMenuItem, LedstripAnimationBlinkLeftAction>>(); constructMenuItem, LedstripAnimationBlinkRightAction>>(); constructMenuItem, LedstripAnimationBlinkBothAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, LedstripEnableBlinkAnimationAccessor>>(); + constructMenuItem, BobbyCheckbox, LedstripEnableBlinkAnimationAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/lockscreensettingsmenu.cpp b/main/displays/menus/lockscreensettingsmenu.cpp index f4e6080..854e9d2 100644 --- a/main/displays/menus/lockscreensettingsmenu.cpp +++ b/main/displays/menus/lockscreensettingsmenu.cpp @@ -2,10 +2,8 @@ // 3rdparty lib includes #include -#include #include #include -#include #include #include @@ -14,6 +12,7 @@ #include "globals.h" #include "accessors/settingsaccessors.h" #include "displays/menus/boardcomputerhardwaresettingsmenu.h" +#include "bobbycheckbox.h" namespace { using LockscreenPinDigit0ChangeScreen = espgui::makeComponent< @@ -53,8 +52,8 @@ using namespace espgui; LockscreenSettingsMenu::LockscreenSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, LockscreenAllowPresetSwitchAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, LockscreenKeepLockedAccessor>>(); + constructMenuItem, BobbyCheckbox, LockscreenAllowPresetSwitchAccessor>>(); + constructMenuItem, BobbyCheckbox, LockscreenKeepLockedAccessor>>(); constructMenuItem>, SwitchScreenAction>>(); constructMenuItem>, SwitchScreenAction>>(); constructMenuItem>, SwitchScreenAction>>(); diff --git a/main/displays/menus/mosfetsmenu.cpp b/main/displays/menus/mosfetsmenu.cpp index 2c2073d..870c4fb 100644 --- a/main/displays/menus/mosfetsmenu.cpp +++ b/main/displays/menus/mosfetsmenu.cpp @@ -1,20 +1,21 @@ #include "mosfetsmenu.h" #ifdef FEATURE_MOSFETS - +// 3rdparty lib includes #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" -#include "displays/menus/mainmenu.h" #include "icons/back.h" +// local includes +#include "displays/menus/mainmenu.h" +#include "bobbycheckbox.h" + using namespace espgui; MosfetsMenu::MosfetsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, Mosfet0Accessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, Mosfet1Accessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, Mosfet2Accessor>>(); + constructMenuItem, BobbyCheckbox, Mosfet0Accessor>>(); + constructMenuItem, BobbyCheckbox, Mosfet1Accessor>>(); + constructMenuItem, BobbyCheckbox, Mosfet2Accessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/motorfeedbackdebugmenu.h b/main/displays/menus/motorfeedbackdebugmenu.h index bd4a3f8..98f8b7a 100644 --- a/main/displays/menus/motorfeedbackdebugmenu.h +++ b/main/displays/menus/motorfeedbackdebugmenu.h @@ -37,11 +37,18 @@ public: constructMenuItem, DummyAction>>(); constructMenuItem, DummyAction>>(); constructMenuItem, DummyAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } }; +constexpr char TEXT_FRONTLEFTFEEDBACK[] = "Front left feedback"; using FrontLeftMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; + +constexpr char TEXT_FRONTRIGHTFEEDBACK[] = "Front right feedback"; using FrontRightMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; + +constexpr char TEXT_BACKLEFTFEEDBACK[] = "Back left feedback"; using BackLeftMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; + +constexpr char TEXT_BACKRIGHTFEEDBACK[] = "Back right feedback"; using BackRightMotorFeedbackDebugMenu = MotorFeedbackDebugMenu; diff --git a/main/displays/menus/motorstatedebugmenu.h b/main/displays/menus/motorstatedebugmenu.h index c231bc0..11c1960 100644 --- a/main/displays/menus/motorstatedebugmenu.h +++ b/main/displays/menus/motorstatedebugmenu.h @@ -10,7 +10,6 @@ #include "displays/bobbymenudisplay.h" #include "debugmenu.h" #include "utils.h" -#include "texts.h" #include "debugtexthelpers.h" template @@ -38,7 +37,14 @@ public: } }; +constexpr char TEXT_FRONTLEFTCOMMAND[] = "Front left command"; using FrontLeftMotorStateDebugMenu = MotorStateDebugMenu; + +constexpr char TEXT_FRONTRIGHTCOMMAND[] = "Front right command"; using FrontRightMotorStateDebugMenu = MotorStateDebugMenu; + +constexpr char TEXT_BACKLEFTCOMMAND[] = "Back left command"; using BackLeftMotorStateDebugMenu = MotorStateDebugMenu; + +constexpr char TEXT_BACKRIGHTCOMMAND[] = "Back right command"; using BackRightMotorStateDebugMenu = MotorStateDebugMenu; diff --git a/main/displays/menus/settingsmenu.cpp b/main/displays/menus/settingsmenu.cpp index 893b8f2..0fe5d60 100644 --- a/main/displays/menus/settingsmenu.cpp +++ b/main/displays/menus/settingsmenu.cpp @@ -4,9 +4,7 @@ #include // 3rdparty lib includes -#include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" -#include "checkboxicon.h" #include "icons/back.h" // local includes @@ -43,6 +41,7 @@ #include "displays/menus/crashmenu.h" #include "displays/menus/aboutmenu.h" #include "displays/menus/mainmenu.h" +#include "bobbycheckbox.h" namespace { #ifdef FEATURE_LEDBACKLIGHT @@ -61,7 +60,7 @@ using namespace espgui; SettingsMenu::SettingsMenu() { #ifdef FEATURE_LEDBACKLIGHT - constructMenuItem, ToggleBoolAction, CheckboxIcon, BacklightAccessor>>(); + constructMenuItem, BobbyCheckbox, BacklightAccessor>>(); #endif if (!simplified) constructMenuItem, SwitchScreenAction>>(); @@ -90,11 +89,11 @@ SettingsMenu::SettingsMenu() constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::hardware>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::hardware>>>(); #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) - constructMenuItem, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>>(); + constructMenuItem, BobbyCheckbox, AutoConnectBmsAccessor>>(); #endif constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::buzzer>>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLedAccessor>>(); + constructMenuItem, BobbyCheckbox, FrontLedAccessor>>(); + constructMenuItem, BobbyCheckbox, BackLedAccessor>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::demos>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::info>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/displays/menus/timesettingsmenu.cpp b/main/displays/menus/timesettingsmenu.cpp index 5f22529..0ab0a04 100644 --- a/main/displays/menus/timesettingsmenu.cpp +++ b/main/displays/menus/timesettingsmenu.cpp @@ -8,10 +8,8 @@ #include "changevaluedisplay.h" #include "changevaluedisplay_daylightsavingmode.h" #include "changevaluedisplay_sntp_sync_mode_t.h" -#include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" #include "actions/dummyaction.h" -#include "checkboxicon.h" #include "icons/back.h" #include "espstrutils.h" @@ -20,6 +18,7 @@ #include "utils.h" #include "accessors/settingsaccessors.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" namespace { class CurrentUtcDateTimeText : public virtual espgui::TextInterface @@ -97,7 +96,7 @@ TimeSettingsMenu::TimeSettingsMenu() constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); #ifdef FEATURE_NTP - constructMenuItem, ToggleBoolAction, CheckboxIcon, TimeServerEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, TimeServerEnabledAccessor>>(); constructMenuItem, DummyAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/udpcloudsettingsmenu.cpp b/main/displays/menus/udpcloudsettingsmenu.cpp index c579663..3e72142 100644 --- a/main/displays/menus/udpcloudsettingsmenu.cpp +++ b/main/displays/menus/udpcloudsettingsmenu.cpp @@ -5,15 +5,14 @@ #include "menuitem.h" #include "changevaluedisplay.h" #include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" #include "actions/dummyaction.h" -#include "checkboxicon.h" #include "icons/back.h" // local includes #include "displays/bobbychangevaluedisplay.h" #include "accessors/settingsaccessors.h" #include "displays/menus/settingsmenu.h" +#include "bobbycheckbox.h" #ifdef FEATURE_UDPCLOUD namespace { @@ -30,8 +29,8 @@ using namespace espgui; UdpCloudSettingsMenu::UdpCloudSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, UdpCloudEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, UdpUseStdStringAccessor>>(); + constructMenuItem, BobbyCheckbox, UdpCloudEnabledAccessor>>(); + constructMenuItem, BobbyCheckbox, UdpUseStdStringAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } diff --git a/main/displays/menus/wifiapsettingsmenu.cpp b/main/displays/menus/wifiapsettingsmenu.cpp index 1d7c1b0..3dffe9c 100644 --- a/main/displays/menus/wifiapsettingsmenu.cpp +++ b/main/displays/menus/wifiapsettingsmenu.cpp @@ -7,8 +7,6 @@ #include #include #include -#include -#include #include #include #include @@ -23,6 +21,7 @@ #include "networksettingsmenu.h" #include "accessors/wifiapconfigaccessors.h" #include "texthelpers/wifiaptexthelpers.h" +#include "bobbycheckbox.h" using namespace espgui; @@ -87,8 +86,8 @@ using ApAuthmodeChangeScreen = espgui::makeComponent< WifiApSettingsMenu::WifiApSettingsMenu() { - constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApEnabledAccessor>>(); - //constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiApDisableWhenOnlineAccessor>>(); + constructMenuItem, BobbyCheckbox, WifiApEnabledAccessor>>(); + //constructMenuItem, BobbyCheckbox, WifiApDisableWhenOnlineAccessor>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem>(); diff --git a/main/displays/menus/wifistaconfigentrymenu.cpp b/main/displays/menus/wifistaconfigentrymenu.cpp index 2c821c2..ae0d271 100644 --- a/main/displays/menus/wifistaconfigentrymenu.cpp +++ b/main/displays/menus/wifistaconfigentrymenu.cpp @@ -6,14 +6,13 @@ #include #include #include -#include -#include // local includes #include "texthelpers/wifistaconfigtexthelpers.h" #include "accessors/wifistaconfigaccessors.h" #include "wifistaconfigsmenu.h" #include "newsettings.h" +#include "bobbycheckbox.h" using namespace espgui; @@ -40,11 +39,11 @@ WifiStaConfigEntryMenu::WifiStaConfigEntryMenu(int index) : { constructMenuItem>(index); constructMenuItem>(index); - constructMenuItem, ToggleBoolAction, CheckboxIcon>>(index); + constructMenuItem, BobbyCheckbox>>(index); constructMenuItem>(index); constructMenuItem>(index); constructMenuItem>(index); - constructMenuItem, ToggleBoolAction, CheckboxIcon>>(index); + constructMenuItem, BobbyCheckbox>>(index); constructMenuItem>(index); constructMenuItem>(index); constructMenuItem>(index); diff --git a/main/displays/menus/wifistasettingsmenu.cpp b/main/displays/menus/wifistasettingsmenu.cpp index 6b21328..462c3f8 100644 --- a/main/displays/menus/wifistasettingsmenu.cpp +++ b/main/displays/menus/wifistasettingsmenu.cpp @@ -4,31 +4,45 @@ #include #include #include -#include -#include #include #include +#include +#include // local includes +#include "displays/bobbychangevaluedisplay.h" #include "wifistascanmenu.h" #include "wifistaconfigsmenu.h" #include "accessors/wifistaconfigaccessors.h" #include "networksettingsmenu.h" #include "texthelpers/wifistatexthelpers.h" +#include "bobbycheckbox.h" using namespace espgui; namespace { constexpr char TEXT_ENABLED[] = "Enabled"; constexpr char TEXT_CONFIGURATIONS[] = "Configurations"; +constexpr char TEXT_MIN_RSSI[] = "AP Min RSSI"; +constexpr char TEXT_MIN_RSSI_FORMATTED[] = "&sMin RSSI: &f&2"; constexpr char TEXT_BACK[] = "Back"; + +using StaMinRssiChangeScreen = espgui::makeComponent< + BobbyChangeValueDisplay, + espgui::StaticText, + WifiStaMinRssiAccessor, + espgui::ConfirmActionInterface>, + espgui::BackActionInterface> +>; } // namespace WifiStaSettingsMenu::WifiStaSettingsMenu() { + constructMenuItem, BobbyCheckbox, WifiStaEnabledAccessor>>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); @@ -41,8 +55,7 @@ WifiStaSettingsMenu::WifiStaSettingsMenu() constructMenuItem>(); constructMenuItem>(); constructMenuItem>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, WifiStaEnabledAccessor>>(); - constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); } diff --git a/main/texts.cpp b/main/texts.cpp index 4617728..f65a9c0 100644 --- a/main/texts.cpp +++ b/main/texts.cpp @@ -64,24 +64,6 @@ char TEXT_UDPUSESTRING[] = "Udp use std::string"; //char TEXT_BACK[] = "Back"; #endif -//DebugMenu -char TEXT_LOADSETTINGS[] = "Load settings"; -char TEXT_SAVESETTINGS[] = "Save settings"; -char TEXT_ERASENVS[] = "Erase NVS"; -char TEXT_FRONTCOMMAND[] = "Front command"; -char TEXT_BACKCOMMAND[] = "Back command"; -char TEXT_FRONTLEFTCOMMAND[] = "Front left command"; -char TEXT_FRONTRIGHTCOMMAND[] = "Front right command"; -char TEXT_BACKLEFTCOMMAND[] = "Back left command"; -char TEXT_BACKRIGHTCOMMAND[] = "Back right command"; -char TEXT_FRONTFEEDBACK[] = "Front feedback"; -char TEXT_BACKFEEDBACK[] = "Back feedback"; -char TEXT_FRONTLEFTFEEDBACK[] = "Front left feedback"; -char TEXT_FRONTRIGHTFEEDBACK[] = "Front right feedback"; -char TEXT_BACKLEFTFEEDBACK[] = "Back left feedback"; -char TEXT_BACKRIGHTFEEDBACK[] = "Back right feedback"; -//char TEXT_BACK[] = "Back"; - //MainMenu char TEXT_MAINMENU[] = "Main menu"; char TEXT_STATUS[] = "Status"; @@ -200,11 +182,6 @@ char TEXT_FIELDWEAKMAX[] = "fldWkMax"; char TEXT_PHASEADVMAX[] = "phsAdvMax"; //char TEXT_BACK[] = "Back"; -//DebugMenu -//char TEXT_DEBUG[] = "Debug"; -char TEXT_DYNAMICMENU[] = "Dynamic menu"; -//char TEXT_BACK[] = "Back"; - //DefaultModeSettingsMenu //char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; char TEXT_MODELMODE[] = "Model mode"; @@ -237,10 +214,6 @@ char TEXT_HANDBREMSE_TRIGGERTIMEOUT[] = "Handbrems Timeout"; char TEXT_HANDBREMSE[] = "Handbremse"; //char TEXT_BACK[] = "Back"; -//DynamicDebugMenu -//char TEXT_DYNAMICMENU[] = "Dynamic menu"; -//char TEXT_BACK[] = "Back"; - //EnableMenu //char TEXT_SETENABLED[] = "Set enabled"; char TEXT_ENABLEFRONTLEFT[] = "Enable front left"; diff --git a/main/texts.h b/main/texts.h index b24807d..f760912 100644 --- a/main/texts.h +++ b/main/texts.h @@ -1,3 +1,5 @@ +#pragma once + namespace bobbytexts { //AboutMenu extern char TEXT_ABOUT[]; @@ -63,24 +65,6 @@ extern char TEXT_UDPUSESTRING[]; //extern char TEXT_BACK[]; #endif -//DebugMenu -extern char TEXT_LOADSETTINGS[]; -extern char TEXT_SAVESETTINGS[]; -extern char TEXT_ERASENVS[]; -extern char TEXT_FRONTCOMMAND[]; -extern char TEXT_BACKCOMMAND[]; -extern char TEXT_FRONTLEFTCOMMAND[]; -extern char TEXT_FRONTRIGHTCOMMAND[]; -extern char TEXT_BACKLEFTCOMMAND[]; -extern char TEXT_BACKRIGHTCOMMAND[]; -extern char TEXT_FRONTFEEDBACK[]; -extern char TEXT_BACKFEEDBACK[]; -extern char TEXT_FRONTLEFTFEEDBACK[]; -extern char TEXT_FRONTRIGHTFEEDBACK[]; -extern char TEXT_BACKLEFTFEEDBACK[]; -extern char TEXT_BACKRIGHTFEEDBACK[]; -//extern char TEXT_BACK[]; - //MainMenu extern char TEXT_MAINMENU[]; extern char TEXT_STATUS[]; @@ -199,11 +183,6 @@ extern char TEXT_FIELDWEAKMAX[]; extern char TEXT_PHASEADVMAX[]; //extern char TEXT_BACK[]; -//DebugMenu -//extern char TEXT_DEBUG[]; -extern char TEXT_DYNAMICMENU[]; -//extern char TEXT_BACK[]; - //DefaultModeSettingsMenu //extern char TEXT_DEFAULTMODESETTINGS[]; extern char TEXT_MODELMODE[]; @@ -236,10 +215,6 @@ extern char TEXT_HANDBREMSE_TRIGGERTIMEOUT[]; extern char TEXT_HANDBREMSE[]; //extern char TEXT_BACK[]; -//DynamicDebugMenu -//extern char TEXT_DYNAMICMENU[]; -//extern char TEXT_BACK[]; - //EnableMenu //extern char TEXT_SETENABLED[]; extern char TEXT_ENABLEFRONTLEFT[]; @@ -505,6 +480,6 @@ extern char TEXT_ESPNOW_SETTINGS[]; extern char TEXT_ESPNOW_SYNCTIME[]; extern char TEXT_ESPNOW_SYNCWITHOTHERS[]; extern char TEXT_ESPNOW_SYNCBLINK[]; -} // namespace +} // namespace bobbytexts using namespace bobbytexts;