diff --git a/src/changevaluedisplay_bluetoothmode.h b/src/changevaluedisplay_bluetoothmode.h index f1941c3..b6220f7 100644 --- a/src/changevaluedisplay_bluetoothmode.h +++ b/src/changevaluedisplay_bluetoothmode.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_bool.h b/src/changevaluedisplay_bool.h index 977fb49..cdcc6f0 100644 --- a/src/changevaluedisplay_bool.h +++ b/src/changevaluedisplay_bool.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "actioninterface.h" #include "utils.h" #include "actions/setvalueaction.h" diff --git a/src/changevaluedisplay_controlmode.h b/src/changevaluedisplay_controlmode.h index 973a8b3..67462d5 100644 --- a/src/changevaluedisplay_controlmode.h +++ b/src/changevaluedisplay_controlmode.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_controltype.h b/src/changevaluedisplay_controltype.h index f9c8613..57c18f2 100644 --- a/src/changevaluedisplay_controltype.h +++ b/src/changevaluedisplay_controltype.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_larsmmode_mode.h b/src/changevaluedisplay_larsmmode_mode.h index cb8d19c..9148497 100644 --- a/src/changevaluedisplay_larsmmode_mode.h +++ b/src/changevaluedisplay_larsmmode_mode.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_unifiedmodelmode.h b/src/changevaluedisplay_unifiedmodelmode.h index c6e8751..9403b41 100644 --- a/src/changevaluedisplay_unifiedmodelmode.h +++ b/src/changevaluedisplay_unifiedmodelmode.h @@ -2,7 +2,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_wifi_mode_t.h b/src/changevaluedisplay_wifi_mode_t.h index 74616fb..6d669c6 100644 --- a/src/changevaluedisplay_wifi_mode_t.h +++ b/src/changevaluedisplay_wifi_mode_t.h @@ -4,7 +4,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/changevaluedisplay_wifi_power_t.h b/src/changevaluedisplay_wifi_power_t.h index c135675..0b4c96a 100644 --- a/src/changevaluedisplay_wifi_power_t.h +++ b/src/changevaluedisplay_wifi_power_t.h @@ -4,7 +4,6 @@ #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" #include "utils.h" #include "actions/setvalueaction.h" #include "actions/backproxyaction.h" diff --git a/src/displays/menus/aboutmenu.h b/src/displays/menus/aboutmenu.h index a88a17b..99c0015 100644 --- a/src/displays/menus/aboutmenu.h +++ b/src/displays/menus/aboutmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" @@ -9,9 +10,10 @@ #include "esptexthelpers.h" #include "texts.h" +// forward declares namespace { class SettingsMenu; -} +} // namespace namespace { constexpr char TEXT_VERSION[] = "Version: 1.0"; @@ -21,29 +23,33 @@ class AboutMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + AboutMenu() + { + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/accesspointwifisettingsmenu.h b/src/displays/menus/accesspointwifisettingsmenu.h index 26853ac..1370289 100644 --- a/src/displays/menus/accesspointwifisettingsmenu.h +++ b/src/displays/menus/accesspointwifisettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "menuitem.h" #include "actions/dummyaction.h" #include "actions/wifisoftapaction.h" @@ -13,29 +14,34 @@ #include "wifitexthelpers.h" #include "texts.h" +// forward declares namespace { class WifiSettingsMenu; -} +} // namespace namespace { class AccessPointWifiSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, WifiSoftApAction>, - makeComponent, WifiSoftApDisconnectAction>, - makeComponent, WifiSoftApDisconnectWifioffAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, WifiSoftApEnableIpV6Action>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + AccessPointWifiSettingsMenu() + { + constructItem, WifiSoftApAction>>(); + constructItem, WifiSoftApDisconnectAction>>(); + constructItem, WifiSoftApDisconnectWifioffAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, WifiSoftApEnableIpV6Action>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/bluetoothsettingsmenu.h b/src/displays/menus/bluetoothsettingsmenu.h index d8d80ba..9da0852 100644 --- a/src/displays/menus/bluetoothsettingsmenu.h +++ b/src/displays/menus/bluetoothsettingsmenu.h @@ -1,8 +1,9 @@ #pragma once +// local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "menuitem.h" #include "actions/dummyaction.h" #ifdef FEATURE_BLUETOOTH @@ -18,9 +19,10 @@ #include "icons/back.h" #include "texts.h" +// forward declares namespace { class SettingsMenu; -} +} // namespace namespace { #ifdef FEATURE_BLUETOOTH @@ -38,20 +40,24 @@ class BluetoothSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, - makeComponent, -// makeComponent, // crashes - makeComponent, - makeComponent, - makeComponent, BluetoothBeginAction>, - makeComponent, BluetoothBeginMasterAction>, - makeComponent, BluetoothFlushAction>, - makeComponent, BluetoothEndAction>, - makeComponent, BluetoothDisconnectAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + BluetoothSettingsMenu() + { + constructItem>(); + constructItem>(); +// constructItem>(); // crashes + constructItem>(); + constructItem>(); + constructItem, BluetoothBeginAction>>(); + constructItem, BluetoothBeginMasterAction>>(); + constructItem, BluetoothFlushAction>>(); + constructItem, BluetoothEndAction>>(); + constructItem, BluetoothDisconnectAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; #endif -} +} // namespace diff --git a/src/displays/menus/bmsmenu.h b/src/displays/menus/bmsmenu.h index 1a15a02..237854d 100644 --- a/src/displays/menus/bmsmenu.h +++ b/src/displays/menus/bmsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #ifdef FEATURE_BLUETOOTH @@ -18,9 +19,10 @@ #include "icons/back.h" #include "texts.h" +//forward declares namespace { class MainMenu; -} +} // namespace namespace { #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) @@ -28,16 +30,20 @@ class BmsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, BluetoothConnectBmsAction>, - makeComponent, BluetoothDisconnectAction>, - makeComponent, - makeComponent, BmsTurnOnChargeAction>, - makeComponent, BmsTurnOffChargeAction>, - makeComponent, BmsTurnOnDischargeAction>, - makeComponent, BmsTurnOffDischargeAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + BmsMenu() + { + constructItem, BluetoothConnectBmsAction>>(); + constructItem, BluetoothDisconnectAction>>(); + constructItem>(); + constructItem, BmsTurnOnChargeAction>>(); + constructItem, BmsTurnOffChargeAction>>(); + constructItem, BmsTurnOnDischargeAction>>(); + constructItem, BmsTurnOffDischargeAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; #endif -} +} // namespace diff --git a/src/displays/menus/boardcomputerhardwaresettingsmenu.h b/src/displays/menus/boardcomputerhardwaresettingsmenu.h index 26b7d41..b47791d 100644 --- a/src/displays/menus/boardcomputerhardwaresettingsmenu.h +++ b/src/displays/menus/boardcomputerhardwaresettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "actions/dummyaction.h" @@ -12,13 +13,14 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class BoardcomputerHardwareSettingsMenu; class CalibrateDisplay; class GametrakCalibrateDisplay; class TimersMenu; class SettingsMenu; -} +} // namespace namespace { struct GasText : public virtual TextInterface { @@ -138,35 +140,39 @@ class BoardcomputerHardwareSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, + public ContainerMenuDefinition +{ +public: + BoardcomputerHardwareSettingsMenu() + { + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); #if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) - makeComponent, SwitchScreenAction>, + constructItem, SwitchScreenAction>>(); #endif #ifdef FEATURE_GAMETRAK - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, + constructItem, DummyAction>, + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); #endif - makeComponent, DummyAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + constructItem, DummyAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, SwapScreenBytesAccessor>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/buzzermenu.h b/src/displays/menus/buzzermenu.h index 898d24d..b3e6bee 100644 --- a/src/displays/menus/buzzermenu.h +++ b/src/displays/menus/buzzermenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -13,10 +14,11 @@ #include "globals.h" #include "settingsaccessors.h" +// forward declares namespace { class BuzzerMenu; class SettingsMenu; -} +} // namespace namespace { struct FrontFreqAccessor : public RefAccessor { uint8_t &getRef() const override { return controllers.front.command.buzzer.freq; } }; @@ -88,17 +90,21 @@ class BuzzerMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + BuzzerMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, ReverseBeepAccessor>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/commanddebugmenu.h b/src/displays/menus/commanddebugmenu.h index 6e8a6b1..fc57541 100644 --- a/src/displays/menus/commanddebugmenu.h +++ b/src/displays/menus/commanddebugmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -10,9 +11,10 @@ #include "texts.h" #include "debugtexthelpers.h" +// forward declares namespace { class DebugMenu; -} +} // namespace namespace { template @@ -20,15 +22,20 @@ class CommandDebugMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + CommandDebugMenu() + { + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; class FrontCommandDebugMenu : public CommandDebugMenu {}; class BackCommandDebugMenu : public CommandDebugMenu {}; -} + +} // namespace diff --git a/src/displays/menus/controllerhardwaresettingsmenu.h b/src/displays/menus/controllerhardwaresettingsmenu.h index 5a09488..5f1d5c8 100644 --- a/src/displays/menus/controllerhardwaresettingsmenu.h +++ b/src/displays/menus/controllerhardwaresettingsmenu.h @@ -2,8 +2,9 @@ #include +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "actions/toggleboolaction.h" @@ -14,13 +15,14 @@ #include "globals.h" #include "settingsaccessors.h" +// forward declares namespace { class ControllerHardwareSettingsMenu; class BoardcomputerHardwareSettingsMenu; class EnableMenu; class InvertMenu; class SettingsMenu; -} +} // namespace namespace { using WheelDiameterMmChangeScreen = makeComponent< @@ -50,14 +52,18 @@ class ControllerHardwareSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + ControllerHardwareSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, SwapFrontBackAccessor>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/debugmenu.h b/src/displays/menus/debugmenu.h index b869294..62f3848 100644 --- a/src/displays/menus/debugmenu.h +++ b/src/displays/menus/debugmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/loadsettingsaction.h" @@ -16,6 +17,7 @@ #include "texts.h" #include "debugcolorhelpers.h" +// forward declares namespace { class MainMenu; class FrontCommandDebugMenu; @@ -31,36 +33,40 @@ class FrontRightMotorFeedbackDebugMenu; class BackLeftMotorFeedbackDebugMenu; class BackRightMotorFeedbackDebugMenu; class DynamicDebugMenu; -} +} // namespace namespace { class DebugMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, LoadSettingsAction>, - makeComponent, SaveSettingsAction>, - makeComponent, EraseNvsAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction, FrontFeedbackColor>, - makeComponent, SwitchScreenAction, BackFeedbackColor>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction, FrontFeedbackColor>, - makeComponent, SwitchScreenAction, FrontFeedbackColor>, - makeComponent, SwitchScreenAction, BackFeedbackColor>, - makeComponent, SwitchScreenAction, BackFeedbackColor>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + DebugMenu() + { + constructItem, LoadSettingsAction>>(); + constructItem, SaveSettingsAction>>(); + constructItem, EraseNvsAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructItem, SwitchScreenAction, BackFeedbackColor>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructItem, SwitchScreenAction, FrontFeedbackColor>>(); + constructItem, SwitchScreenAction, BackFeedbackColor>>(); + constructItem, SwitchScreenAction, BackFeedbackColor>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/defaultmodesettingsmenu.h b/src/displays/menus/defaultmodesettingsmenu.h index aba50a7..398550c 100644 --- a/src/displays/menus/defaultmodesettingsmenu.h +++ b/src/displays/menus/defaultmodesettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -12,10 +13,11 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class DefaultModeSettingsMenu; class ModesSettingsMenu; -} +} // namespace namespace { using DefaultModeModelModeChangeDisplay = makeComponent< @@ -86,20 +88,24 @@ class DefaultModeSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + DefaultModeSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareGasAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeSquareBremsAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableSmoothingAccessor>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/demosmenu.h b/src/displays/menus/demosmenu.h index c2d5975..5120d60 100644 --- a/src/displays/menus/demosmenu.h +++ b/src/displays/menus/demosmenu.h @@ -1,32 +1,38 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" #include "icons/back.h" #include "texts.h" +// forward declares namespace { class StarfieldDisplay; class PingPongDisplay; class SpiroDisplay; class GameOfLifeDisplay; class MainMenu; -} +} // namespace namespace { class DemosMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + DemosMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/dynamicdebugmenu.h b/src/displays/menus/dynamicdebugmenu.h index 265bb74..d769c30 100644 --- a/src/displays/menus/dynamicdebugmenu.h +++ b/src/displays/menus/dynamicdebugmenu.h @@ -1,10 +1,12 @@ #pragma once +// Arduino includes #include #include +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" @@ -16,9 +18,10 @@ #include "texts.h" #include "types.h" +// forward declares namespace { class DebugMenu; -} +} // namespace namespace { class RandomText : public virtual TextInterface @@ -123,33 +126,37 @@ class DynamicDebugMenu : public MenuDisplay, public RandomText, public BackActionInterface>, - public StaticMenuDefinition< + public ContainerMenuDefinition +{ +public: + DynamicDebugMenu() + { // dummy items to allow for scrolling - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); // the interesting bits - makeComponent, - makeComponent, RandomColor, DummyAction>, - makeComponent, RandomFont, DummyAction>, - makeComponent, RandomIcon, DummyAction>, - makeComponent, StaticMenuItemIcon<&icons::lock>, DummyAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, ToggleAccessor>, - makeComponent, + constructItem>(); + constructItem, RandomColor, DummyAction>>(); + constructItem, RandomFont, DummyAction>>(); + constructItem, RandomIcon, DummyAction>>(); + constructItem, StaticMenuItemIcon<&icons::lock>, DummyAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, ToggleAccessor>>(); + constructItem>(); // more scrolling - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/enablemenu.h b/src/displays/menus/enablemenu.h index 583ee3e..d677330 100644 --- a/src/displays/menus/enablemenu.h +++ b/src/displays/menus/enablemenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -11,21 +12,26 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class ControllerHardwareSettingsMenu; -} +} // namespace namespace { class EnableMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + EnableMenu() + { + constructItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/feedbackdebugmenu.h b/src/displays/menus/feedbackdebugmenu.h index 0e40c27..aca6f06 100644 --- a/src/displays/menus/feedbackdebugmenu.h +++ b/src/displays/menus/feedbackdebugmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -11,9 +12,10 @@ #include "debugtexthelpers.h" #include "debugcolorhelpers.h" +// forward declares namespace { class DebugMenu; -} +} // namespace namespace { template class ColorInterface> @@ -21,15 +23,21 @@ class FeedbackDebugMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, ColorInterface, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + FeedbackDebugMenu() + { + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, ColorInterface, DummyAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; class FrontFeedbackDebugMenu : public FeedbackDebugMenu {}; -class BackFeedbackDebugMenu : public FeedbackDebugMenu {}; } +class BackFeedbackDebugMenu : public FeedbackDebugMenu {}; + +} // namespace diff --git a/src/displays/menus/gametrakmodesettingsmenu.h b/src/displays/menus/gametrakmodesettingsmenu.h index 698cac0..10e674d 100644 --- a/src/displays/menus/gametrakmodesettingsmenu.h +++ b/src/displays/menus/gametrakmodesettingsmenu.h @@ -1,26 +1,32 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/switchscreenaction.h" #include "icons/back.h" #include "texts.h" +// forward declares namespace { class ModesSettingsMenu; -} +} // namespace namespace { #ifdef FEATURE_GAMETRAK -class GametrakModeSettingsMenu : +class ContainerModeSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + ContainerModeSettingsMenu() + { + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; #endif -} +} // namespace diff --git a/src/displays/menus/genericwifisettingsmenu.h b/src/displays/menus/genericwifisettingsmenu.h index 9fe390f..ce2103b 100644 --- a/src/displays/menus/genericwifisettingsmenu.h +++ b/src/displays/menus/genericwifisettingsmenu.h @@ -1,9 +1,11 @@ #pragma once +// Arduino includes #include +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "changevaluedisplay.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -15,10 +17,11 @@ #include "wifiaccessors.h" #include "texts.h" +// forward declares namespace { class GenericWifiSettingsMenu; class WifiSettingsMenu; -} +} // namespace namespace { using WifiModeChangeScreen = makeComponent< @@ -41,13 +44,17 @@ class GenericWifiSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, - makeComponent, - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, WifiSleepAccessor>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + GenericWifiSettingsMenu() + { + constructItem>(); + constructItem>(); + constructItem, SwitchScreenAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, WifiSleepAccessor>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/graphsmenu.h b/src/displays/menus/graphsmenu.h index f77c427..d436f6a 100644 --- a/src/displays/menus/graphsmenu.h +++ b/src/displays/menus/graphsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "icons/back.h" @@ -10,10 +11,11 @@ #include "displays/splitgraphdisplay.h" #include "statistics.h" +// forward declares namespace { class MainMenu; class GraphsMenu; -} +} // namespace namespace { using GasGraphDisplay = makeComponent< @@ -149,26 +151,30 @@ class GraphsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, + public ContainerMenuDefinition +{ +public: + GraphsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); #ifdef FEATURE_BMS - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); #endif - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/invertmenu.h b/src/displays/menus/invertmenu.h index 4031426..cc2b933 100644 --- a/src/displays/menus/invertmenu.h +++ b/src/displays/menus/invertmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -11,21 +12,26 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class ControllerHardwareSettingsMenu; -} +} // namespace namespace { class InvertMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + InvertMenu() + { + constructItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/larsmmodesettingsmenu.h b/src/displays/menus/larsmmodesettingsmenu.h index 1b80bd7..55f6a94 100644 --- a/src/displays/menus/larsmmodesettingsmenu.h +++ b/src/displays/menus/larsmmodesettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -10,10 +11,11 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class LarsmModeSettingsMenu; class ModesSettingsMenu; -} +} // namespace namespace { using LarsmModeModelModeChangeDisplay = makeComponent< @@ -42,11 +44,15 @@ class LarsmModeSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + LarsmModeSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/limitssettingsmenu.h b/src/displays/menus/limitssettingsmenu.h index 695b628..660780f 100644 --- a/src/displays/menus/limitssettingsmenu.h +++ b/src/displays/menus/limitssettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -10,10 +11,11 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class LimitsSettingsMenu; class SettingsMenu; -} +} // namespace namespace { using IMotMaxChangeScreen = makeComponent< @@ -63,14 +65,18 @@ class LimitsSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + LimitsSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/modessettingsmenu.h b/src/displays/menus/modessettingsmenu.h index 63b372b..450d6dd 100644 --- a/src/displays/menus/modessettingsmenu.h +++ b/src/displays/menus/modessettingsmenu.h @@ -1,33 +1,39 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "menuitem.h" #include "actions/switchscreenaction.h" #include "icons/back.h" #include "texts.h" +// forward declares namespace { class DefaultModeSettingsMenu; class TempomatModeSettingsMenu; class LarsmModeSettingsMenu; class GametrakModeSettingsMenu; class SettingsMenu; -} +} // namespace namespace { class ModesSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, + public ContainerMenuDefinition +{ +public: + ModesSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); #ifdef FEATURE_GAMETRAK - makeComponent, SwitchScreenAction>, + constructItem, SwitchScreenAction>>(); #endif - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/mosfetsmenu.h b/src/displays/menus/mosfetsmenu.h index a574ecd..b309982 100644 --- a/src/displays/menus/mosfetsmenu.h +++ b/src/displays/menus/mosfetsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/toggleboolaction.h" @@ -11,9 +12,10 @@ #include "texts.h" #include "types.h" +// forward declares namespace { class MainMenu; -} +} // namespace namespace { #ifdef FEATURE_MOSFETS @@ -33,12 +35,16 @@ class MosfetsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, ToggleBoolAction, CheckboxIcon, Mosfet0Accessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, Mosfet1Accessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, Mosfet2Accessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + MosfetsMenu() + { + constructItem, ToggleBoolAction, CheckboxIcon, Mosfet0Accessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, Mosfet1Accessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, Mosfet2Accessor>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; #endif -} +} // namespace diff --git a/src/displays/menus/motorfeedbackdebugmenu.h b/src/displays/menus/motorfeedbackdebugmenu.h index cf01dd2..0aa94d1 100644 --- a/src/displays/menus/motorfeedbackdebugmenu.h +++ b/src/displays/menus/motorfeedbackdebugmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -11,9 +12,10 @@ #include "debugtexthelpers.h" #include "debugcolorhelpers.h" +// forward declares namespace { class DebugMenu; -} +} // namespace namespace { template class ColorInterface> @@ -21,21 +23,26 @@ class MotorFeedbackDebugMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + MotorFeedbackDebugMenu() + { + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, DummyAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; class FrontLeftMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; class FrontRightMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; class BackLeftMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; class BackRightMotorFeedbackDebugMenu : public MotorFeedbackDebugMenu {}; -} + +} // namespace diff --git a/src/displays/menus/motorstatedebugmenu.h b/src/displays/menus/motorstatedebugmenu.h index ce29146..1dc6496 100644 --- a/src/displays/menus/motorstatedebugmenu.h +++ b/src/displays/menus/motorstatedebugmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -10,9 +11,10 @@ #include "texts.h" #include "debugtexthelpers.h" +// forward declares namespace { class DebugMenu; -} +} // namespace namespace { template @@ -20,22 +22,27 @@ class MotorStateDebugMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; + public ContainerMenuDefinition +{ +public: + MotorStateDebugMenu() + { + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; class FrontLeftMotorStateDebugMenu : public MotorStateDebugMenu {}; class FrontRightMotorStateDebugMenu : public MotorStateDebugMenu {}; class BackLeftMotorStateDebugMenu : public MotorStateDebugMenu {}; class BackRightMotorStateDebugMenu : public MotorStateDebugMenu {}; -} + +} // namespace diff --git a/src/displays/menus/presetsmenu.h b/src/displays/menus/presetsmenu.h index aff3b55..619971f 100644 --- a/src/displays/menus/presetsmenu.h +++ b/src/displays/menus/presetsmenu.h @@ -1,8 +1,9 @@ #pragma once +// local includes #include "actioninterface.h" #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/multiaction.h" #include "actions/switchscreenaction.h" @@ -12,9 +13,10 @@ #include "presets.h" #include "globals.h" +// forward declares namespace { class MainMenu; -} +} // namespace namespace { class ApplyPresetAction : public virtual ActionInterface @@ -76,19 +78,23 @@ class PresetsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, MultiAction, SwitchScreenAction>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + PresetsMenu() + { + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, MultiAction, SwitchScreenAction>>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/profilesmenu.h b/src/displays/menus/profilesmenu.h index 4727234..0dcf065 100644 --- a/src/displays/menus/profilesmenu.h +++ b/src/displays/menus/profilesmenu.h @@ -1,27 +1,33 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "actions/switchprofileaction.h" #include "actions/switchscreenaction.h" #include "icons/back.h" #include "texts.h" +// forward declares namespace { class MainMenu; -} +} // namespace namespace { class ProfilesMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchProfileAction<0>>, - makeComponent, SwitchProfileAction<1>>, - makeComponent, SwitchProfileAction<2>>, - makeComponent, SwitchProfileAction<3>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + ProfilesMenu() + { + constructItem, SwitchProfileAction<0>>>(); + constructItem, SwitchProfileAction<1>>>(); + constructItem, SwitchProfileAction<2>>>(); + constructItem, SwitchProfileAction<3>>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/selectmodemenu.h b/src/displays/menus/selectmodemenu.h index 13f544f..ec496b6 100644 --- a/src/displays/menus/selectmodemenu.h +++ b/src/displays/menus/selectmodemenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/multiaction.h" #include "actions/switchscreenaction.h" @@ -14,9 +15,10 @@ #include "modes/larsmmode.h" #include "modes/gametrakmode.h" +// forward declares namespace { class MainMenu; -} +} // namespace namespace { template @@ -36,19 +38,22 @@ class SelectModeMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, MultiAction>>, - makeComponent, MultiAction>>, - makeComponent, MultiAction>>, -#ifdef FEATURE_GAMETRAK - makeComponent, MultiAction>>, -#endif - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > + public ContainerMenuDefinition { using Base = MenuDisplay; public: + SelectModeMenu() + { + constructItem, MultiAction>>>(); + constructItem, MultiAction>>>(); + constructItem, MultiAction>>>(); +#ifdef FEATURE_GAMETRAK + constructItem, MultiAction>>>(); +#endif + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } + void start() override; }; @@ -68,4 +73,4 @@ void SelectModeMenu::start() setSelectedIndex(3); } } -} +} // namespace diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index abd69b3..9651cca 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -1,9 +1,11 @@ #pragma once +// Arduino includes #include +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/toggleboolaction.h" #include "actions/switchscreenaction.h" @@ -18,7 +20,9 @@ #include "icons/back.h" #include "texts.h" #include "globals.h" +#include "settingsaccessors.h" +// forward declares namespace { class LimitsSettingsMenu; class WifiSettingsMenu; @@ -39,23 +43,27 @@ class SettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>, + public ContainerMenuDefinition +{ +public: + SettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>>(); #ifdef FEATURE_BLUETOOTH - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>, + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::bluetooth>>>(); #endif - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>, + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::hardware>>>(); #if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) - makeComponent, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>, + constructItem, ToggleBoolAction, CheckboxIcon, AutoConnectBmsAccessor>>(); #endif - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>, - makeComponent, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, BackLedAccessor>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::buzzer>>>(); + constructItem, ToggleBoolAction, CheckboxIcon, FrontLedAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, BackLedAccessor>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::info>>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/stationwifisettingsmenu.h b/src/displays/menus/stationwifisettingsmenu.h index 920d2ee..4869b51 100644 --- a/src/displays/menus/stationwifisettingsmenu.h +++ b/src/displays/menus/stationwifisettingsmenu.h @@ -1,9 +1,11 @@ #pragma once +// Arduino includes #include +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "menuitem.h" #include "actions/dummyaction.h" @@ -18,38 +20,43 @@ #include "wifiaccessors.h" #include "texts.h" +// forward declares namespace { class WifiSettingsMenu; -} +} // namespace namespace { class StationWifiSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, WifiReconnectAction>, - makeComponent, WifiDisconnectAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, WifiAutoConnectAccessor>, - makeComponent, ToggleBoolAction, CheckboxIcon, WifiAutoReconnectAccessor>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, WifiEnableIpV6Action>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, DisabledColor, DummyAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + StationWifiSettingsMenu() + { + constructItem, WifiReconnectAction>>(); + constructItem, WifiDisconnectAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, WifiAutoConnectAccessor>>(); + constructItem, ToggleBoolAction, CheckboxIcon, WifiAutoReconnectAccessor>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, WifiEnableIpV6Action>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, DisabledColor, DummyAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/tempomatmodesettingsmenu.h b/src/displays/menus/tempomatmodesettingsmenu.h index 7664871..be6b1f4 100644 --- a/src/displays/menus/tempomatmodesettingsmenu.h +++ b/src/displays/menus/tempomatmodesettingsmenu.h @@ -1,7 +1,8 @@ #pragma once +// local includes #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "changevaluedisplay.h" #include "menuitem.h" @@ -10,10 +11,11 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class TempomatModeSettingsMenu; class ModesSettingsMenu; -} +} // namespace namespace { using TempomatModeModelModeChangeScreen = makeComponent< @@ -28,9 +30,13 @@ class TempomatModeSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + TempomatModeSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/timersmenu.h b/src/displays/menus/timersmenu.h index dce5f75..5413449 100644 --- a/src/displays/menus/timersmenu.h +++ b/src/displays/menus/timersmenu.h @@ -1,17 +1,19 @@ #pragma once +// local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "icons/back.h" #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class BoardcomputerHardwareSettingsMenu; -} +} // namespace namespace { class TimersMenu; @@ -60,13 +62,17 @@ class TimersMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + TimersMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/displays/menus/wifiscanmenu.h b/src/displays/menus/wifiscanmenu.h index 7ca7666..78a264d 100644 --- a/src/displays/menus/wifiscanmenu.h +++ b/src/displays/menus/wifiscanmenu.h @@ -1,10 +1,13 @@ #pragma once +// system includes #include +// Arduino includes #include #include +// local includes #include "menudisplay.h" #include "utils.h" #include "actions/multiaction.h" @@ -14,9 +17,10 @@ #include "texts.h" #include "types.h" +// forward declares namespace { class WifiSettingsMenu; -} +} // namespace namespace { class WifiScanMenu : public MenuDisplay, public BackActionInterface> @@ -34,18 +38,24 @@ public: MenuItem& getMenuItem(std::size_t index) override { + if (index < vec.size()) + return vec[index]; + if (index == vec.size()) return m_backItem; - return vec[index]; + throw "aua"; } const MenuItem& getMenuItem(std::size_t index) const override { + if (index < vec.size()) + return vec[index]; + if (index == vec.size()) return m_backItem; - return vec[index]; + throw "aua"; } void runForEveryMenuItem(std::function &&callback) override @@ -132,4 +142,4 @@ void WifiScanMenu::stop() { WiFi.scanDelete(); } -} +} // namespace diff --git a/src/displays/menus/wifisettingsmenu.h b/src/displays/menus/wifisettingsmenu.h index 3ad3ccd..972492f 100644 --- a/src/displays/menus/wifisettingsmenu.h +++ b/src/displays/menus/wifisettingsmenu.h @@ -1,8 +1,9 @@ #pragma once +// local includes #include "changevaluedisplay.h" #include "menudisplay.h" -#include "staticmenudefinition.h" +#include "containermenudefinition.h" #include "utils.h" #include "actions/switchscreenaction.h" #include "actions/toggleboolaction.h" @@ -12,13 +13,14 @@ #include "texts.h" #include "settingsaccessors.h" +// forward declares namespace { class GenericWifiSettingsMenu; class StationWifiSettingsMenu; class WifiScanMenu; class AccessPointWifiSettingsMenu; class SettingsMenu; -} +} // namespace namespace { class WifiSettingsMenu; @@ -35,14 +37,18 @@ class WifiSettingsMenu : public MenuDisplay, public StaticText, public BackActionInterface>, - public StaticMenuDefinition< - makeComponent, SwitchScreenAction>, - makeComponent, ToggleBoolAction, CheckboxIcon, AutoEnableApAccessor>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::scan>>, - makeComponent, SwitchScreenAction>, - makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>> - > -{}; -} + public ContainerMenuDefinition +{ +public: + WifiSettingsMenu() + { + constructItem, SwitchScreenAction>>(); + constructItem, ToggleBoolAction, CheckboxIcon, AutoEnableApAccessor>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::scan>>>(); + constructItem, SwitchScreenAction>>(); + constructItem, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>>(); + } +}; +} // namespace diff --git a/src/staticmenudefinition.h b/src/staticmenudefinition.h deleted file mode 100644 index 587901b..0000000 --- a/src/staticmenudefinition.h +++ /dev/null @@ -1,85 +0,0 @@ -#pragma once - -// local includes -#include "menudefinitioninterface.h" - -namespace { -template -class StaticMenuDefinition; - -template -class StaticMenuDefinition : public virtual MenuDefinitionInterface -{ -public: - std::size_t size() const override { return 1; } - - MenuItem& getMenuItem(std::size_t index) override - { - if (index == 0) - return item; - - throw "aua"; - } - - const MenuItem& getMenuItem(std::size_t index) const override - { - if (index == 0) - return item; - - throw "aua"; - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(item); - } - - void runForEveryMenuItem(std::function &&callback) const override - { - callback(item); - } - -private: - T item; -}; - -template -class StaticMenuDefinition : public virtual StaticMenuDefinition -{ - using Base = StaticMenuDefinition; - -public: - std::size_t size() const override { return 1 + sizeof...(Tmore); } - - MenuItem& getMenuItem(std::size_t index) override - { - if (index == 0) - return item; - - return Base::getMenuItem(index - 1); - } - - const MenuItem& getMenuItem(std::size_t index) const override - { - if (index == 0) - return item; - - return Base::getMenuItem(index - 1); - } - - void runForEveryMenuItem(std::function &&callback) override - { - callback(item); - Base::runForEveryMenuItem(std::move(callback)); - } - - void runForEveryMenuItem(std::function &&callback) const override - { - callback(item); - Base::runForEveryMenuItem(std::move(callback)); - } - -private: - T item; -}; -} // namespace