diff --git a/main/displays/menus/ledstripmenu.cpp b/main/displays/menus/ledstripmenu.cpp index 9389193..84c8c1c 100644 --- a/main/displays/menus/ledstripmenu.cpp +++ b/main/displays/menus/ledstripmenu.cpp @@ -149,7 +149,7 @@ LedstripMenu::LedstripMenu() constructMenuItem, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem, BobbyCheckbox, EnableLedAnimationAccessor>>(); - constructMenuItem, espgui::SwitchScreenAction>>>(); + constructMenuItem, espgui::SwitchScreenActionvoid {})>>>>(); // this needs to be fixed constructMenuItem, BobbyCheckbox, EnableBrakeLightsAccessor>>(); diff --git a/main/displays/menus/typesafeenumchangemenu.h b/main/displays/menus/typesafeenumchangemenu.h index f2796aa..566c9d9 100644 --- a/main/displays/menus/typesafeenumchangemenu.h +++ b/main/displays/menus/typesafeenumchangemenu.h @@ -10,59 +10,80 @@ #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" #include "displays/bobbymenudisplay.h" +#include "bobbyerrorhandler.h" namespace typesafeenumchangemenu { constexpr char TEXT_BACK[] = "Back"; } // namespace typesafeenumchangemenu -template config> -class TypesafeEnumCurrentValueMenuItemText : - public espgui::TextInterface +template +class TypesafeEnumCurrentValueMenuItem : + public espgui::MenuItem { +public: + TypesafeEnumCurrentValueMenuItem(ConfigWrapper &config) : m_config{config} {} std::string text() const override { - return toString(config.value); + return toString(m_config.value); } + void triggered() override {} + + int color() const override + { + return TFT_DARKGREY; + } +private: + const ConfigWrapper &m_config; }; -template config> +template class TypesafeEnumSetterMenuItem : public espgui::MenuItem { +public: + TypesafeEnumSetterMenuItem(TEnum value, ConfigWrapper &config) : m_value{value}, m_config{config} {} + std::string text() const override { - return toString(config.value); + return toString(m_value); } void triggered() override { - + if (auto result = configs.write_config(m_config, m_value); !result) + BobbyErrorHandler{}.errorOccured(std::move(result).error()); } +private: + const TEnum m_value; + const ConfigWrapper &m_config; }; -template config> +template class TypeSafeChangeMenu : public BobbyMenuDisplay { - TypeSafeChangeMenu() +public: + TypeSafeChangeMenu(ConfigWrapper &config, TIterator iterator) : m_config{config} { using namespace espgui; using namespace typesafeenumchangemenu; - constructMenuItem, DisabledColor, DummyAction>>(); + constructMenuItem>(m_config); constructMenuItem>(); - iterate([&](TEnum enum_value, const auto &string_value){ // this line needs to be fixed, help required - constructMenuItem>(enum_value); + iterator([&](TEnum enum_value, const auto &string_value){ + constructMenuItem>(enum_value, m_config); }); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } -\ + std::string text() const override { - return fmt::format("Select {}", config.nvsName()); + return fmt::format("Select {}", m_config.nvsName()); } -\ + void back() override { espgui::switchScreen(); } +private: + const ConfigWrapper &m_config; };