Made some changes to the menus, still needs to be fixed

This commit is contained in:
CommanderRedYT
2022-02-06 17:52:56 +01:00
parent f10cb18dc4
commit 3322120464
2 changed files with 37 additions and 16 deletions

View File

@@ -149,7 +149,7 @@ LedstripMenu::LedstripMenu()
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_STVO_ENABLEFRONTLIGHT>, BobbyCheckbox, EnableLedstripStVOFrontlight>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_STVO_ENABLEFRONTLIGHT>, BobbyCheckbox, EnableLedstripStVOFrontlight>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDANIMATION>, BobbyCheckbox, EnableLedAnimationAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_LEDANIMATION>, BobbyCheckbox, EnableLedAnimationAccessor>>();
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_SELECTANIMATION>, espgui::SwitchScreenAction<TypeSafeChangeMenu<LedstripAnimation, LedstripMenu, configs.ledstrip.animationType>>>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_SELECTANIMATION>, espgui::SwitchScreenAction<TypeSafeChangeMenu<LedstripAnimation, LedstripMenu, decltype([&](LedstripAnimation enum_value, const auto &string_value)->void {})>>>>(); // this needs to be fixed
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>(); constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>();

View File

@@ -10,59 +10,80 @@
#include "actions/dummyaction.h" #include "actions/dummyaction.h"
#include "actions/switchscreenaction.h" #include "actions/switchscreenaction.h"
#include "displays/bobbymenudisplay.h" #include "displays/bobbymenudisplay.h"
#include "bobbyerrorhandler.h"
namespace typesafeenumchangemenu { namespace typesafeenumchangemenu {
constexpr char TEXT_BACK[] = "Back"; constexpr char TEXT_BACK[] = "Back";
} // namespace typesafeenumchangemenu } // namespace typesafeenumchangemenu
template<typename TEnum, espconfig::ConfigWrapper<TEnum> config> template<typename TEnum>
class TypesafeEnumCurrentValueMenuItemText : class TypesafeEnumCurrentValueMenuItem :
public espgui::TextInterface public espgui::MenuItem
{ {
public:
TypesafeEnumCurrentValueMenuItem(ConfigWrapper<TEnum> &config) : m_config{config} {}
std::string text() const override 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<TEnum> &m_config;
}; };
template<typename TEnum, espconfig::ConfigWrapper<TEnum> config> template<typename TEnum>
class TypesafeEnumSetterMenuItem : class TypesafeEnumSetterMenuItem :
public espgui::MenuItem public espgui::MenuItem
{ {
public:
TypesafeEnumSetterMenuItem(TEnum value, ConfigWrapper<TEnum> &config) : m_value{value}, m_config{config} {}
std::string text() const override std::string text() const override
{ {
return toString(config.value); return toString(m_value);
} }
void triggered() override 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<TEnum> &m_config;
}; };
template<typename TEnum, typename TMenu, espconfig::ConfigWrapper<TEnum> config> template<typename TEnum, typename TMenu, typename TIterator>
class TypeSafeChangeMenu : class TypeSafeChangeMenu :
public BobbyMenuDisplay public BobbyMenuDisplay
{ {
TypeSafeChangeMenu() public:
TypeSafeChangeMenu(ConfigWrapper<TEnum> &config, TIterator iterator) : m_config{config}
{ {
using namespace espgui; using namespace espgui;
using namespace typesafeenumchangemenu; using namespace typesafeenumchangemenu;
constructMenuItem<makeComponent<MenuItem, TypesafeEnumCurrentValueMenuItemText<TEnum, config>, DisabledColor, DummyAction>>(); constructMenuItem<TypesafeEnumCurrentValueMenuItem<TEnum>>(m_config);
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>(); constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
iterate([&](TEnum enum_value, const auto &string_value){ // this line needs to be fixed, help required iterator([&](TEnum enum_value, const auto &string_value){
constructMenuItem<TypesafeEnumSetterMenuItem<TEnum, config>>(enum_value); 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>, SwitchScreenAction<TMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
} }
\
std::string text() const override std::string text() const override
{ {
return fmt::format("Select {}", config.nvsName()); return fmt::format("Select {}", m_config.nvsName());
} }
\
void back() override void back() override
{ {
espgui::switchScreen<TMenu>(); espgui::switchScreen<TMenu>();
} }
private:
const ConfigWrapper<TEnum> &m_config;
}; };