Again more refactorings

This commit is contained in:
2021-11-02 14:18:28 +01:00
parent 316f74ada8
commit 55fe233ee7
25 changed files with 474 additions and 458 deletions

View File

@ -0,0 +1,30 @@
#include "cloudtexthelpers.h"
// 3rdparty lib includes
#include <fmt/core.h>
// local includes
#include "cloud.h"
#ifdef FEATURE_CLOUD
std::string CloudCreatedText::text() const
{
return fmt::format("created: {}", cloudClient ? "true" : "false");
}
std::string CloudStartedText::text() const
{
std::string text = "started: ";
if (cloudClient)
text += cloudStarted ? "true" : "false";
return text;
}
std::string CloudConnectedText::text() const
{
std::string text = "connected: ";
if (cloudClient)
text += cloudClient.is_connected() ? "true" : "false";
return text;
}
#endif

View File

@ -1,37 +1,24 @@
#pragma once
// 3rdparty lib includes
#include <fmt/core.h>
// local includes
#include "textinterface.h"
#include "cloud.h"
namespace {
#ifdef FEATURE_CLOUD
struct CloudCreatedText : public virtual TextInterface { public: std::string text() const override {
return fmt::format("created: {}", cloudClient ? "true" : "false"); }};
struct CloudStartedText : public virtual TextInterface {
struct CloudCreatedText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
std::string text = "started: ";
if (cloudClient)
text += cloudStarted ? "true" : "false";
return text;
}
std::string text() const override;
};
struct CloudConnectedText : public virtual TextInterface {
struct CloudStartedText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
std::string text = "connected: ";
if (cloudClient)
text += cloudClient.is_connected() ? "true" : "false";
return text;
}
std::string text() const override;
};
struct CloudConnectedText : public virtual espgui::TextInterface
{
public:
std::string text() const override;
};
#endif
}

View File

@ -15,10 +15,6 @@
#include "texts.h"
#include "widgets/label.h"
namespace {
class MainMenu;
}
namespace {
#ifdef FEATURE_GARAGE
class GarageDisplay : public Display, public BackActionInterface<SwitchScreenAction<MainMenu>>

View File

@ -16,10 +16,6 @@
#include "ledstrip.h"
#endif
namespace {
class MainMenu;
}
namespace {
class Lockscreen : public Display, public DummyBack
{

View File

@ -18,11 +18,6 @@
#include "icons/back.h"
#include "texts.h"
//forward declares
namespace {
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -0,0 +1,72 @@
#include "cloudsettingsmenu.h"
// 3rdparty lib includes
#include <fmt/core.h>
#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 "cloudtexthelpers.h"
#include "accessors/settingsaccessors.h"
#include "cloud.h"
#include "displays/menus/settingsmenu.h"
namespace {
using CloudTransmitTimeoutChangeScreen = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CLOUDTRANSMITTIMEOUT>,
CloudTransmitTimeoutAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<CloudSettingsMenu>>,
espgui::SwitchScreenAction<CloudSettingsMenu>
>;
struct CloudBufferLengthText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
return fmt::format("buffer: {}", cloudBuffer.size());
}
};
using CloudCollectRateChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CLOUDCOLLECTRATE>,
CloudCollectRateAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<CloudSettingsMenu>>,
espgui::SwitchScreenAction<CloudSettingsMenu>
>;
using CloudSendRateChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_CLOUDSENDRATE>,
CloudSendRateAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<CloudSettingsMenu>>,
espgui::SwitchScreenAction<CloudSettingsMenu>
>;
} // namespace
using namespace espgui;
CloudSettingsMenu::CloudSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDENABLED>, ToggleBoolAction, CheckboxIcon, CloudEnabledAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDTRANSMITTIMEOUT>, SwitchScreenAction<CloudTransmitTimeoutChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, CloudCreatedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudStartedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudConnectedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudBufferLengthText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDCOLLECTRATE>, SwitchScreenAction<CloudCollectRateChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDSENDRATE>, SwitchScreenAction<CloudSendRateChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
void CloudSettingsMenu::back()
{
switchScreen<SettingsMenu>();
}

View File

@ -1,76 +1,19 @@
#pragma once
// 3rdparty lib includes
#include <fmt/core.h>
#include "menudisplay.h"
// local includes
#include "menudisplay.h"
#include "menuitem.h"
#include "changevaluedisplay.h"
#include "actions/switchscreenaction.h"
#include "actions/toggleboolaction.h"
#include "checkboxicon.h"
#include "cloudtexthelpers.h"
#include "accessors/settingsaccessors.h"
#include "icons/back.h"
#include "texts.h"
#include "accessors/settingsaccessors.h"
#include "cloud.h"
namespace {
using CloudTransmitTimeoutChangeScreen = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_CLOUDTRANSMITTIMEOUT>,
CloudTransmitTimeoutAccessor,
BackActionInterface<SwitchScreenAction<CloudSettingsMenu>>,
SwitchScreenAction<CloudSettingsMenu>
>;
struct CloudBufferLengthText : public virtual TextInterface {
public:
std::string text() const override
{
return fmt::format("buffer: {}", cloudBuffer.size());
}
};
using CloudCollectRateChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_CLOUDCOLLECTRATE>,
CloudCollectRateAccessor,
BackActionInterface<SwitchScreenAction<CloudSettingsMenu>>,
SwitchScreenAction<CloudSettingsMenu>
>;
using CloudSendRateChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_CLOUDSENDRATE>,
CloudSendRateAccessor,
BackActionInterface<SwitchScreenAction<CloudSettingsMenu>>,
SwitchScreenAction<CloudSettingsMenu>
>;
} // namespace
namespace {
#ifdef FEATURE_CLOUD
class CloudSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_CLOUDSETTINGS>,
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_CLOUDSETTINGS>
{
public:
CloudSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDENABLED>, ToggleBoolAction, CheckboxIcon, CloudEnabledAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDTRANSMITTIMEOUT>, SwitchScreenAction<CloudTransmitTimeoutChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, CloudCreatedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudStartedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudConnectedText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CloudBufferLengthText, DisabledColor, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDCOLLECTRATE>, SwitchScreenAction<CloudCollectRateChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_CLOUDSENDRATE>, SwitchScreenAction<CloudSendRateChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
CloudSettingsMenu();
void back() override;
};
#endif
} // namespace

View File

@ -18,26 +18,6 @@
using namespace espgui;
// forward declares
namespace {
class MainMenu;
class FrontCommandDebugMenu;
class BackCommandDebugMenu;
class FrontLeftMotorStateDebugMenu;
class FrontRightMotorStateDebugMenu;
class BackLeftMotorStateDebugMenu;
class BackRightMotorStateDebugMenu;
class FrontFeedbackDebugMenu;
class BackFeedbackDebugMenu;
class FrontLeftMotorFeedbackDebugMenu;
class FrontRightMotorFeedbackDebugMenu;
class BackLeftMotorFeedbackDebugMenu;
class BackRightMotorFeedbackDebugMenu;
class DynamicDebugMenu;
} // namespace
using namespace espgui;
namespace {
class DebugMenu :
public MenuDisplay,

View File

@ -0,0 +1,144 @@
#include "defaultmodesettingsmenu.h"
// 3rdparty lib includes
#include "changevaluedisplay.h"
#include "menuitem.h"
#include "actions/toggleboolaction.h"
#include "actions/switchscreenaction.h"
#include "actions/dummyaction.h"
#include "checkboxicon.h"
#include "icons/back.h"
// local includes
#include "utils.h"
#include "changevaluedisplay_unifiedmodelmode.h"
#include "accessors/settingsaccessors.h"
#include "displays/menus/modessettingsmenu.h"
namespace {
using DefaultModeModelModeChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_MODELMODE>,
DefaultModeModelModeAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridModelModeChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_HYBRIDMODE>,
DefaultModeHybridModelModeAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeSmoothingChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SMOOTHINGVAL>,
DefaultModeSmoothingAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeFwSmoothingLowerLimitChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_FWSMOOTHING_LIMIT>,
DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeFrontPercentageChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_FRONTPERCENTAGE>,
DefaultModeFrontPercentageAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBackPercentageChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_BACKPERCENTAGE>,
DefaultModeBackPercentageAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeAddSchwelleChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDSCHWELLE>,
DefaultModeAddSchwelleAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeGas1WertChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDGASVAL>,
DefaultModeGas1WertAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeGas2WertChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SUBGASVAL>,
DefaultModeGas2WertAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBrems1WertChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_ADDBRAKEVAL>,
DefaultModeBrems1WertAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBrems2WertChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_SUBBRAKEVAL>,
DefaultModeBrems2WertAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridActivationLimitChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_HYBRIDACTIVATIONLIMIT>,
DefaultModeHybridActivationLimitAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridDeactivationLimitChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_HYBRIDDEACTIVATIONLIMIT>,
DefaultModeHybridDeactivationLimitAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<DefaultModeSettingsMenu>>,
espgui::SwitchScreenAction<DefaultModeSettingsMenu>
>;
} // namespace
using namespace espgui;
DefaultModeSettingsMenu::DefaultModeSettingsMenu()
{
auto diff = std::abs(settings.hybrid.activationLimit - settings.hybrid.deactivationLimit);
if (diff < 20) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LIMITS_TO_NEAR>, StaticFont<2>, StaticColor<TFT_RED>, DummyAction>>(); }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<DefaultModeModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HYBRIDMODE>, SwitchScreenAction<DefaultModeHybridModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGUP>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGDOWN>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGUP>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGDOWN>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HYBRIDENABLE>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FWSMOOTHING_LIMIT, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor>, SwitchScreenAction<DefaultModeFwSmoothingLowerLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMOOTHINGVAL, DefaultModeSmoothingAccessor>, SwitchScreenAction<DefaultModeSmoothingChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FRONTPERCENTAGE, DefaultModeFrontPercentageAccessor>, SwitchScreenAction<DefaultModeFrontPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BACKPERCENTAGE, DefaultModeBackPercentageAccessor>, SwitchScreenAction<DefaultModeBackPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDSCHWELLE, DefaultModeAddSchwelleAccessor>, SwitchScreenAction<DefaultModeAddSchwelleChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBGASVAL, DefaultModeGas2WertAccessor>, SwitchScreenAction<DefaultModeGas2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBBRAKEVAL, DefaultModeBrems2WertAccessor>, SwitchScreenAction<DefaultModeBrems2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDGASVAL, DefaultModeGas1WertAccessor>, SwitchScreenAction<DefaultModeGas1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDBRAKEVAL, DefaultModeBrems1WertAccessor>, SwitchScreenAction<DefaultModeBrems1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HYBRIDACTIVATIONLIMIT, DefaultModeHybridActivationLimitAccessor>, SwitchScreenAction<DefaultModeHybridActivationLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HYBRIDDEACTIVATIONLIMIT, DefaultModeHybridDeactivationLimitAccessor>, SwitchScreenAction<DefaultModeHybridDeactivationLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
void DefaultModeSettingsMenu::back()
{
switchScreen<ModesSettingsMenu>();
}

View File

@ -1,153 +1,17 @@
#pragma once
#include <TFT_eSPI.h>
// 3rdparty lib includes
#include "menudisplay.h"
// local includes
#include "menudisplay.h"
#include "utils.h"
#include "changevaluedisplay.h"
#include "changevaluedisplay_unifiedmodelmode.h"
#include "menuitem.h"
#include "actions/toggleboolaction.h"
#include "actions/switchscreenaction.h"
#include "actions/dummyaction.h"
#include "checkboxicon.h"
#include "icons/back.h"
#include "texts.h"
#include "accessors/settingsaccessors.h"
// forward declares
namespace {
class DefaultModeSettingsMenu;
class ModesSettingsMenu;
} // namespace
using namespace espgui;
namespace {
using DefaultModeModelModeChangeDisplay = makeComponent<
ChangeValueDisplay<UnifiedModelMode>,
StaticText<TEXT_MODELMODE>,
DefaultModeModelModeAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridModelModeChangeDisplay = makeComponent<
ChangeValueDisplay<UnifiedModelMode>,
StaticText<TEXT_HYBRIDMODE>,
DefaultModeHybridModelModeAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeSmoothingChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_SMOOTHINGVAL>,
DefaultModeSmoothingAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeFwSmoothingLowerLimitChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_FWSMOOTHING_LIMIT>,
DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeFrontPercentageChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_FRONTPERCENTAGE>,
DefaultModeFrontPercentageAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBackPercentageChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_BACKPERCENTAGE>,
DefaultModeBackPercentageAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeAddSchwelleChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_ADDSCHWELLE>,
DefaultModeAddSchwelleAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeGas1WertChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_ADDGASVAL>,
DefaultModeGas1WertAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeGas2WertChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_SUBGASVAL>,
DefaultModeGas2WertAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBrems1WertChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_ADDBRAKEVAL>,
DefaultModeBrems1WertAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeBrems2WertChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_SUBBRAKEVAL>,
DefaultModeBrems2WertAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridActivationLimitChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_HYBRIDACTIVATIONLIMIT>,
DefaultModeHybridActivationLimitAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using DefaultModeHybridDeactivationLimitChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_HYBRIDDEACTIVATIONLIMIT>,
DefaultModeHybridDeactivationLimitAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
class DefaultModeSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_DEFAULTMODESETTIGNS>,
public BackActionInterface<SwitchScreenAction<ModesSettingsMenu>>
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_DEFAULTMODESETTIGNS>
{
public:
DefaultModeSettingsMenu()
{
auto diff = std::abs(settings.hybrid.activationLimit - settings.hybrid.deactivationLimit);
if (diff < 20) { constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LIMITS_TO_NEAR>, StaticFont<2>, StaticColor<TFT_RED>, DummyAction>>(); }
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<DefaultModeModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HYBRIDMODE>, SwitchScreenAction<DefaultModeHybridModelModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREGAS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SQUAREBREMS>, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGUP>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLESMOOTHINGDOWN>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGUP>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingUpAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ENABLEFWSMOOTHINGDOWN>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingDownAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_HYBRIDENABLE>, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FWSMOOTHING_LIMIT, DefaultModeEnableFieldWeakSmoothingLowerLimitAccessor>, SwitchScreenAction<DefaultModeFwSmoothingLowerLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SMOOTHINGVAL, DefaultModeSmoothingAccessor>, SwitchScreenAction<DefaultModeSmoothingChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_FRONTPERCENTAGE, DefaultModeFrontPercentageAccessor>, SwitchScreenAction<DefaultModeFrontPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_BACKPERCENTAGE, DefaultModeBackPercentageAccessor>, SwitchScreenAction<DefaultModeBackPercentageChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDSCHWELLE, DefaultModeAddSchwelleAccessor>, SwitchScreenAction<DefaultModeAddSchwelleChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBGASVAL, DefaultModeGas2WertAccessor>, SwitchScreenAction<DefaultModeGas2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_SUBBRAKEVAL, DefaultModeBrems2WertAccessor>, SwitchScreenAction<DefaultModeBrems2WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDGASVAL, DefaultModeGas1WertAccessor>, SwitchScreenAction<DefaultModeGas1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_ADDBRAKEVAL, DefaultModeBrems1WertAccessor>, SwitchScreenAction<DefaultModeBrems1WertChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HYBRIDACTIVATIONLIMIT, DefaultModeHybridActivationLimitAccessor>, SwitchScreenAction<DefaultModeHybridActivationLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_HYBRIDDEACTIVATIONLIMIT, DefaultModeHybridDeactivationLimitAccessor>, SwitchScreenAction<DefaultModeHybridDeactivationLimitChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
DefaultModeSettingsMenu();
void back() override;
};
} // namespace

View File

@ -8,15 +8,6 @@
#include "icons/back.h"
#include "texts.h"
// forward declares
namespace {
class StarfieldDisplay;
class PingPongDisplay;
class SpiroDisplay;
class GameOfLifeDisplay;
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -8,11 +8,6 @@
#include "icons/back.h"
#include "texts.h"
// forward declares
namespace {
class ModesSettingsMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -10,12 +10,6 @@
#include "displays/splitgraphdisplay.h"
#include "statistics.h"
// forward declares
namespace {
class MainMenu;
class GraphsMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -12,12 +12,6 @@
#include "texts.h"
#include "accessors/settingsaccessors.h"
// forward declares
namespace {
class LarsmModeSettingsMenu;
class ModesSettingsMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -0,0 +1,31 @@
#include "modessettingsmenu.h"
// 3rdparty lib includes
#include "menuitem.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
// local includes
#include "displays/menus/defaultmodesettingsmenu.h"
#include "displays/menus/tempomatmodesettingsmenu.h"
#include "displays/menus/larsmmodesettingsmenu.h"
#include "displays/menus/gametrakmodesettingsmenu.h"
#include "displays/menus/settingsmenu.h"
using namespace espgui;
ModesSettingsMenu::ModesSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULTMODESETTIGNS>, SwitchScreenAction<DefaultModeSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_TEMPOMATMODESETTINGS>, SwitchScreenAction<TempomatModeSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSMMODESETTINGS>, SwitchScreenAction<LarsmModeSettingsMenu>>>();
#ifdef FEATURE_GAMETRAK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAKMODESETTINGS>, SwitchScreenAction<GametrakModeSettingsMenu>>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
void ModesSettingsMenu::back()
{
switchScreen<SettingsMenu>();
}

View File

@ -2,29 +2,16 @@
// local includes
#include "menudisplay.h"
#include "menuitem.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
// local includes
#include "texts.h"
using namespace espgui;
namespace {
class ModesSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_MODESSETTINGS>,
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_MODESSETTINGS>
{
public:
ModesSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DEFAULTMODESETTIGNS>, SwitchScreenAction<DefaultModeSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_TEMPOMATMODESETTINGS>, SwitchScreenAction<TempomatModeSettingsMenu>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_LARSMMODESETTINGS>, SwitchScreenAction<LarsmModeSettingsMenu>>>();
#ifdef FEATURE_GAMETRAK
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_GAMETRAKMODESETTINGS>, SwitchScreenAction<GametrakModeSettingsMenu>>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
ModesSettingsMenu();
void back() override;
};
} // namespace

View File

@ -11,11 +11,6 @@
#include "texts.h"
#include "types.h"
// forward declares
namespace {
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -12,11 +12,6 @@
#include "presets.h"
#include "globals.h"
// forward declares
namespace {
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -7,11 +7,6 @@
#include "icons/back.h"
#include "texts.h"
// forward declares
namespace {
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -15,11 +15,6 @@
#include "modes/remotecontrolmode.h"
#include "modes/gametrakmode.h"
// forward declares
namespace {
class MainMenu;
} // namespace
using namespace espgui;
namespace {

View File

@ -0,0 +1,48 @@
#include "tempomatmodesettingsmenu.h"
// 3rdparty lib includes
#include "changevaluedisplay.h"
#include "menuitem.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
// local includes
#include "utils.h"
#include "changevaluedisplay_unifiedmodelmode.h"
#include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h"
#include "actions/tempomatmodeapplycurrentpeedaction.h"
#include "displays/menus/modessettingsmenu.h"
namespace {
using TempomatModeCruiseMotTgtChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int16_t>,
espgui::StaticText<TEXT_NCRUISEMOTTGT>,
TempomatModeCruiseMotTgtAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>>,
espgui::SwitchScreenAction<TempomatModeSettingsMenu>
>;
using TempomatModeModelModeChangeScreen = espgui::makeComponent<
espgui::ChangeValueDisplay<UnifiedModelMode>,
espgui::StaticText<TEXT_MODELMODE>,
TempomatModeModelModeAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TempomatModeSettingsMenu>>,
espgui::SwitchScreenAction<TempomatModeSettingsMenu>
>;
} // namespace
using namespace espgui;
TempomatModeSettingsMenu::TempomatModeSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLY, AvgSpeedAccessor>, TempomatModeApplyCurrentSpeedAction>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, TempomatModeCruiseMotTgtAccessor>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
void TempomatModeSettingsMenu::back()
{
switchScreen<ModesSettingsMenu>();
}

View File

@ -1,55 +1,17 @@
#pragma once
// local includes
// 3rdparty lib includes
#include "menudisplay.h"
#include "utils.h"
#include "changevaluedisplay.h"
#include "changevaluedisplay_unifiedmodelmode.h"
#include "menuitem.h"
#include "actions/switchscreenaction.h"
#include "icons/back.h"
// local includes
#include "texts.h"
#include "accessors/settingsaccessors.h"
#include "accessors/globalaccessors.h"
#include "actions/tempomatmodeapplycurrentpeedaction.h"
// forward declares
namespace {
class TempomatModeSettingsMenu;
class ModesSettingsMenu;
} // namespace
using namespace espgui;
namespace {
using DefaultModeCruiseMotTgtChangeDisplay = makeComponent<
ChangeValueDisplay<int16_t>,
StaticText<TEXT_NCRUISEMOTTGT>,
TempomatModeCruiseMotTgtAccessor,
BackActionInterface<SwitchScreenAction<DefaultModeSettingsMenu>>,
SwitchScreenAction<DefaultModeSettingsMenu>
>;
using TempomatModeModelModeChangeScreen = makeComponent<
ChangeValueDisplay<UnifiedModelMode>,
StaticText<TEXT_MODELMODE>,
TempomatModeModelModeAccessor,
BackActionInterface<SwitchScreenAction<TempomatModeSettingsMenu>>,
SwitchScreenAction<TempomatModeSettingsMenu>
>;
class TempomatModeSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_TEMPOMATMODESETTINGS>,
public BackActionInterface<SwitchScreenAction<ModesSettingsMenu>>
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_TEMPOMATMODESETTINGS>
{
public:
TempomatModeSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_APPLY, AvgSpeedAccessor>, TempomatModeApplyCurrentSpeedAction>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_NCRUISEMOTTGT, TempomatModeCruiseMotTgtAccessor>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_MODELMODE>, SwitchScreenAction<TempomatModeModelModeChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<ModesSettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
TempomatModeSettingsMenu();
void back() override;
};
} // namespace

View File

@ -0,0 +1,103 @@
#include "timesettingsmenu.h"
// 3rdparty lib includes
#include <espchrono.h>
#include <fmt/core.h>
#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"
// local includes
#include "utils.h"
#include "accessors/settingsaccessors.h"
#include "displays/menus/settingsmenu.h"
class CurrentUtcDateTimeText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
return fmt::format("utc: {}", espchrono::toString(espchrono::toDateTime(espchrono::utc_clock::now())));
}
};
class CurrentLocalDateTimeText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
return fmt::format("local: {}", espchrono::toString(espchrono::toDateTime(espchrono::local_clock::now())));
}
};
using TimezoneOffsetChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int32_t>,
espgui::StaticText<TEXT_OFFSET>,
TimezoneOffsetAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TimeSettingsMenu>>,
espgui::SwitchScreenAction<TimeSettingsMenu>
>;
using DaylightSavingModeChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<espchrono::DayLightSavingMode>,
espgui::StaticText<TEXT_DAYLIGHTSAVINGMODE>,
DaylightSavingModeAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TimeSettingsMenu>>,
espgui::SwitchScreenAction<TimeSettingsMenu>
>;
#ifdef FEATURE_NTP
using TimeSyncModeChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<sntp_sync_mode_t>,
espgui::StaticText<TEXT_NTPMODE>,
TimeSyncModeAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TimeSettingsMenu>>,
espgui::SwitchScreenAction<TimeSettingsMenu>
>;
using TimeSyncIntervalChangeDisplay = espgui::makeComponent<
espgui::ChangeValueDisplay<int32_t>,
espgui::StaticText<TEXT_NTPINTERVAL>,
TimeSyncIntervalAccessor,
espgui::BackActionInterface<espgui::SwitchScreenAction<TimeSettingsMenu>>,
espgui::SwitchScreenAction<TimeSettingsMenu>
>;
class NtpSyncStatusText : public virtual espgui::TextInterface
{
public:
std::string text() const override
{
return fmt::format("Status: {}", espcpputils::toString(sntp_get_sync_status()));
}
};
#endif
using namespace espgui;
TimeSettingsMenu::TimeSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, CurrentUtcDateTimeText, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CurrentLocalDateTimeText, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OFFSET>, SwitchScreenAction<TimezoneOffsetChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DAYLIGHTSAVINGMODE>, SwitchScreenAction<DaylightSavingModeChangeDisplay>>>();
#ifdef FEATURE_NTP
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPENABLED>, ToggleBoolAction, CheckboxIcon, TimeServerEnabledAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPSERVER>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPMODE>, SwitchScreenAction<TimeSyncModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPINTERVAL>, SwitchScreenAction<TimeSyncIntervalChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, NtpSyncStatusText, DummyAction>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
void TimeSettingsMenu::back()
{
switchScreen<SettingsMenu>();
}

View File

@ -1,89 +1,17 @@
#pragma once
// 3rdparty lib includes
#include <espchrono.h>
#include <fmt/core.h>
#include "menudisplay.h"
// local includes
#include "changevaluedisplay.h"
#include "changevaluedisplay_daylightsavingmode.h"
#include "changevaluedisplay_sntp_sync_mode_t.h"
#include "menudisplay.h"
#include "utils.h"
#include "actions/toggleboolaction.h"
#include "actions/switchscreenaction.h"
#include "checkboxicon.h"
#include "icons/back.h"
#include "texts.h"
#include "accessors/settingsaccessors.h"
#include "espstrutils.h"
using namespace espgui;
namespace {
class CurrentUtcDateTimeText : public virtual TextInterface { public:
std::string text() const override { return fmt::format("utc: {}", espchrono::toString(espchrono::toDateTime(espchrono::utc_clock::now()))); }};
class CurrentLocalDateTimeText : public virtual TextInterface { public:
std::string text() const override { return fmt::format("local: {}", espchrono::toString(espchrono::toDateTime(espchrono::local_clock::now()))); }};
using TimezoneOffsetChangeDisplay = makeComponent<
ChangeValueDisplay<int32_t>,
StaticText<TEXT_OFFSET>,
TimezoneOffsetAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
using DaylightSavingModeChangeDisplay = makeComponent<
ChangeValueDisplay<espchrono::DayLightSavingMode>,
StaticText<TEXT_DAYLIGHTSAVINGMODE>,
DaylightSavingModeAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
#ifdef FEATURE_NTP
using TimeSyncModeChangeDisplay = makeComponent<
ChangeValueDisplay<sntp_sync_mode_t>,
StaticText<TEXT_NTPMODE>,
TimeSyncModeAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
using TimeSyncIntervalChangeDisplay = makeComponent<
ChangeValueDisplay<int32_t>,
StaticText<TEXT_NTPINTERVAL>,
TimeSyncIntervalAccessor,
BackActionInterface<SwitchScreenAction<TimeSettingsMenu>>,
SwitchScreenAction<TimeSettingsMenu>
>;
class NtpSyncStatusText : public virtual TextInterface { public:
std::string text() const override { return fmt::format("Status: {}", espcpputils::toString(sntp_get_sync_status())); }};
#endif
class TimeSettingsMenu :
public MenuDisplay,
public StaticText<TEXT_TIME>,
public BackActionInterface<SwitchScreenAction<SettingsMenu>>
public espgui::MenuDisplay,
public espgui::StaticText<TEXT_TIME>
{
public:
TimeSettingsMenu()
{
constructMenuItem<makeComponent<MenuItem, CurrentUtcDateTimeText, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, CurrentLocalDateTimeText, StaticFont<2>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_OFFSET>, SwitchScreenAction<TimezoneOffsetChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_DAYLIGHTSAVINGMODE>, SwitchScreenAction<DaylightSavingModeChangeDisplay>>>();
#ifdef FEATURE_NTP
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPENABLED>, ToggleBoolAction, CheckboxIcon, TimeServerEnabledAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPSERVER>, DummyAction>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPMODE>, SwitchScreenAction<TimeSyncModeChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_NTPINTERVAL>, SwitchScreenAction<TimeSyncIntervalChangeDisplay>>>();
constructMenuItem<makeComponent<MenuItem, NtpSyncStatusText, DummyAction>>();
#endif
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<SettingsMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
}
TimeSettingsMenu();
void back() override;
};
} // namespace

View File

@ -9,10 +9,6 @@
#include "globals.h"
#include "texts.h"
namespace {
class MainMenu;
}
namespace {
class PoweroffDisplay : public Display, public DummyConfirm, public DummyBack
{