WIP: Custom typesafe enum menu
This commit is contained in:
@ -105,7 +105,6 @@ set(headers
|
|||||||
displays/menus/invertmenu.h
|
displays/menus/invertmenu.h
|
||||||
displays/menus/larsmmodesettingsmenu.h
|
displays/menus/larsmmodesettingsmenu.h
|
||||||
displays/menus/ledstripmenu.h
|
displays/menus/ledstripmenu.h
|
||||||
displays/menus/ledstripselectanimationmenu.h
|
|
||||||
displays/menus/ledstripselectblinkmenu.h
|
displays/menus/ledstripselectblinkmenu.h
|
||||||
displays/menus/ledstripselectotamode.h
|
displays/menus/ledstripselectotamode.h
|
||||||
displays/menus/limitssettingsmenu.h
|
displays/menus/limitssettingsmenu.h
|
||||||
@ -132,6 +131,7 @@ set(headers
|
|||||||
displays/menus/tempomatmodesettingsmenu.h
|
displays/menus/tempomatmodesettingsmenu.h
|
||||||
displays/menus/timersmenu.h
|
displays/menus/timersmenu.h
|
||||||
displays/menus/timesettingsmenu.h
|
displays/menus/timesettingsmenu.h
|
||||||
|
displays/menus/typesafeenumchangemenu.h
|
||||||
displays/menus/udpcloudsettingsmenu.h
|
displays/menus/udpcloudsettingsmenu.h
|
||||||
displays/menus/wifiapclientsmenu.h
|
displays/menus/wifiapclientsmenu.h
|
||||||
displays/menus/wifiapsettingsmenu.h
|
displays/menus/wifiapsettingsmenu.h
|
||||||
@ -336,7 +336,6 @@ set(sources
|
|||||||
displays/menus/invertmenu.cpp
|
displays/menus/invertmenu.cpp
|
||||||
displays/menus/larsmmodesettingsmenu.cpp
|
displays/menus/larsmmodesettingsmenu.cpp
|
||||||
displays/menus/ledstripmenu.cpp
|
displays/menus/ledstripmenu.cpp
|
||||||
displays/menus/ledstripselectanimationmenu.cpp
|
|
||||||
displays/menus/ledstripselectblinkmenu.cpp
|
displays/menus/ledstripselectblinkmenu.cpp
|
||||||
displays/menus/ledstripselectotamode.cpp
|
displays/menus/ledstripselectotamode.cpp
|
||||||
displays/menus/limitssettingsmenu.cpp
|
displays/menus/limitssettingsmenu.cpp
|
||||||
@ -363,6 +362,7 @@ set(sources
|
|||||||
displays/menus/tempomatmodesettingsmenu.cpp
|
displays/menus/tempomatmodesettingsmenu.cpp
|
||||||
displays/menus/timersmenu.cpp
|
displays/menus/timersmenu.cpp
|
||||||
displays/menus/timesettingsmenu.cpp
|
displays/menus/timesettingsmenu.cpp
|
||||||
|
displays/menus/typesafeenumchangemenu.cpp
|
||||||
displays/menus/udpcloudsettingsmenu.cpp
|
displays/menus/udpcloudsettingsmenu.cpp
|
||||||
displays/menus/wifiapclientsmenu.cpp
|
displays/menus/wifiapclientsmenu.cpp
|
||||||
displays/menus/wifiapsettingsmenu.cpp
|
displays/menus/wifiapsettingsmenu.cpp
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
#include "ledstripanimationactions.h"
|
||||||
|
#ifdef FEATURE_LEDSTRIP
|
||||||
|
void LedStripSetAnimationAction::triggered()
|
||||||
|
{
|
||||||
|
if (auto result = configs.write_config(configs.ledstrip.animationType, m_animation); !result)
|
||||||
|
BobbyErrorHandler{}.errorOccured(std::move(result).error());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -11,16 +11,23 @@
|
|||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
#ifdef FEATURE_LEDSTRIP
|
||||||
template<LedstripAnimation type>
|
template<LedstripAnimation type>
|
||||||
|
class LedStripSetAnimationActionStatic : public virtual espgui::ActionInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void triggered() override
|
||||||
|
{
|
||||||
|
if (auto result = configs.write_config(configs.ledstrip.animationType, type); !result)
|
||||||
|
BobbyErrorHandler{}.errorOccured(std::move(result).error());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class LedStripSetAnimationAction : public virtual espgui::ActionInterface
|
class LedStripSetAnimationAction : public virtual espgui::ActionInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
LedStripSetAnimationAction(LedstripAnimation animation) : m_animation{animation} {};
|
||||||
void triggered() override;
|
void triggered() override;
|
||||||
|
private:
|
||||||
|
const LedstripAnimation m_animation;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<LedstripAnimation type>
|
|
||||||
void LedStripSetAnimationAction<type>::triggered()
|
|
||||||
{
|
|
||||||
if (auto result = configs.write_config(configs.ledstrip.animationType, type); !result)
|
|
||||||
BobbyErrorHandler{}.errorOccured(std::move(result).error());
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "displays/menus/mainmenu.h"
|
#include "displays/menus/mainmenu.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "ledstrip.h"
|
#include "ledstrip.h"
|
||||||
#include "ledstripselectanimationmenu.h"
|
#include "displays/menus/typesafeenumchangemenu.h"
|
||||||
#include "ledstripselectblinkmenu.h"
|
#include "ledstripselectblinkmenu.h"
|
||||||
#include "bobbycheckbox.h"
|
#include "bobbycheckbox.h"
|
||||||
|
|
||||||
@ -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<LedstripSelectAnimationMenu>>>();
|
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_SELECTANIMATION>, espgui::SwitchScreenAction<TypeSafeChangeMenu<LedstripAnimation, LedstripMenu, configs.ledstrip.animationType>>>>();
|
||||||
|
|
||||||
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>();
|
constructMenuItem<makeComponent<MenuItem, espgui::StaticText<TEXT_BRAKELIGHTS>, BobbyCheckbox, EnableBrakeLightsAccessor>>();
|
||||||
|
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
#include "ledstripselectanimationmenu.h"
|
|
||||||
|
|
||||||
// Local includes
|
|
||||||
#include "actions/dummyaction.h"
|
|
||||||
#include "actions/ledstripanimationactions.h"
|
|
||||||
#include "actions/switchscreenaction.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>, SwitchScreenAction<LedstripMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string LedstripSelectAnimationMenu::text() const
|
|
||||||
{
|
|
||||||
return TEXT_SELECTANIMATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LedstripSelectAnimationMenu::back()
|
|
||||||
{
|
|
||||||
espgui::switchScreen<LedstripMenu>();
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
// Local includes
|
|
||||||
#include "displays/bobbymenudisplay.h"
|
|
||||||
|
|
||||||
#ifdef FEATURE_LEDSTRIP
|
|
||||||
class LedstripSelectAnimationMenu : public BobbyMenuDisplay
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LedstripSelectAnimationMenu();
|
|
||||||
|
|
||||||
std::string text() const override;
|
|
||||||
|
|
||||||
void back() override;
|
|
||||||
};
|
|
||||||
#endif
|
|
1
main/displays/menus/typesafeenumchangemenu.cpp
Normal file
1
main/displays/menus/typesafeenumchangemenu.cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "typesafeenumchangemenu.h"
|
68
main/displays/menus/typesafeenumchangemenu.h
Normal file
68
main/displays/menus/typesafeenumchangemenu.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <configwrapper.h>
|
||||||
|
#include <fmt/core.h>
|
||||||
|
#include <icons/back.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "globals.h"
|
||||||
|
#include "actions/dummyaction.h"
|
||||||
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "displays/bobbymenudisplay.h"
|
||||||
|
|
||||||
|
namespace typesafeenumchangemenu {
|
||||||
|
constexpr char TEXT_BACK[] = "Back";
|
||||||
|
} // namespace typesafeenumchangemenu
|
||||||
|
|
||||||
|
template<typename TEnum, espconfig::ConfigWrapper<TEnum> config>
|
||||||
|
class TypesafeEnumCurrentValueMenuItemText :
|
||||||
|
public espgui::TextInterface
|
||||||
|
{
|
||||||
|
std::string text() const override
|
||||||
|
{
|
||||||
|
return toString(config.value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename TEnum, espconfig::ConfigWrapper<TEnum> config>
|
||||||
|
class TypesafeEnumSetterMenuItem :
|
||||||
|
public espgui::MenuItem
|
||||||
|
{
|
||||||
|
std::string text() const override
|
||||||
|
{
|
||||||
|
return toString(config.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void triggered() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename TEnum, typename TMenu, espconfig::ConfigWrapper<TEnum> config>
|
||||||
|
class TypeSafeChangeMenu :
|
||||||
|
public BobbyMenuDisplay
|
||||||
|
{
|
||||||
|
TypeSafeChangeMenu()
|
||||||
|
{
|
||||||
|
using namespace espgui;
|
||||||
|
using namespace typesafeenumchangemenu;
|
||||||
|
constructMenuItem<makeComponent<MenuItem, TypesafeEnumCurrentValueMenuItemText<TEnum, config>, DisabledColor, DummyAction>>();
|
||||||
|
constructMenuItem<makeComponent<MenuItem, EmptyText, DummyAction>>();
|
||||||
|
iterate([&](TEnum enum_value, const auto &string_value){ // this line needs to be fixed, help required
|
||||||
|
constructMenuItem<TypesafeEnumSetterMenuItem<TEnum, config>>(enum_value);
|
||||||
|
});
|
||||||
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<TMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
|
}
|
||||||
|
\
|
||||||
|
std::string text() const override
|
||||||
|
{
|
||||||
|
return fmt::format("Select {}", config.nvsName());
|
||||||
|
}
|
||||||
|
\
|
||||||
|
void back() override
|
||||||
|
{
|
||||||
|
espgui::switchScreen<TMenu>();
|
||||||
|
}
|
||||||
|
};
|
Reference in New Issue
Block a user