diff --git a/src/display.h b/src/display.h index 556a3e2..c6dd14d 100644 --- a/src/display.h +++ b/src/display.h @@ -9,7 +9,35 @@ class ChangeValueDisplayInterface; } namespace { -class Display { +class ConfirmInterface { +public: + virtual void confirm() {} +}; + +class BackInterface { +public: + virtual void back() {} +}; + +template +class ConfirmActionInterface : public virtual ConfirmInterface +{ + T m_action; + +public: + void confirm() override { m_action.triggered(); } +}; + +template +class BackActionInterface : public virtual BackInterface +{ + T m_action; + +public: + void back() override { m_action.triggered(); } +}; + +class Display : public virtual ConfirmInterface, public virtual BackInterface { public: virtual ~Display() = default; @@ -20,8 +48,6 @@ public: virtual void stop() {} virtual void rotate(int offset) {} - virtual void confirm() {} - virtual void back() {} virtual TextInterface *asTextInterface() { return nullptr; } virtual const TextInterface *asTextInterface() const { return nullptr; } diff --git a/src/displays/menus/bmsmenu.h b/src/displays/menus/bmsmenu.h index f5cdcbb..f0bbd63 100644 --- a/src/displays/menus/bmsmenu.h +++ b/src/displays/menus/bmsmenu.h @@ -24,6 +24,7 @@ namespace { class BmsMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, BluetoothConnectBmsAction>, makeComponent, BluetoothDisconnectAction>, diff --git a/src/displays/menus/debugmenu.h b/src/displays/menus/debugmenu.h index de8a1d7..8f9232c 100644 --- a/src/displays/menus/debugmenu.h +++ b/src/displays/menus/debugmenu.h @@ -36,6 +36,7 @@ namespace { class DebugMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, LoadSettingsAction>, makeComponent, SaveSettingsAction>, diff --git a/src/displays/menus/demosmenu.h b/src/displays/menus/demosmenu.h index 0b2b3b8..c2d5975 100644 --- a/src/displays/menus/demosmenu.h +++ b/src/displays/menus/demosmenu.h @@ -20,6 +20,7 @@ namespace { class DemosMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, diff --git a/src/displays/menus/graphsmenu.h b/src/displays/menus/graphsmenu.h index 1716f03..539f3a1 100644 --- a/src/displays/menus/graphsmenu.h +++ b/src/displays/menus/graphsmenu.h @@ -48,6 +48,7 @@ using MotorCurrentsGraphDisplay = makeComponent, StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction>, diff --git a/src/displays/menus/mainmenu.h b/src/displays/menus/mainmenu.h index ad8608a..5cd5ea0 100644 --- a/src/displays/menus/mainmenu.h +++ b/src/displays/menus/mainmenu.h @@ -34,6 +34,7 @@ namespace { class MainMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::back>>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::modes>>, diff --git a/src/displays/menus/presetsmenu.h b/src/displays/menus/presetsmenu.h index 35db7e4..93d4b2c 100644 --- a/src/displays/menus/presetsmenu.h +++ b/src/displays/menus/presetsmenu.h @@ -32,6 +32,7 @@ class ApplyBoardcomputerHardwarePresetAction : public virtual ActionInterface {p class PresetsMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, ApplyPresetAction<&presets::defaultSettings>>, makeComponent, ApplyLimitsPresetAction<&presets::defaultLimits>>, diff --git a/src/displays/menus/selectmodemenu.h b/src/displays/menus/selectmodemenu.h index 0c40731..81a5f48 100644 --- a/src/displays/menus/selectmodemenu.h +++ b/src/displays/menus/selectmodemenu.h @@ -31,6 +31,7 @@ using SetLarsmModeAction = SetterAction, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, MultiAction>>, makeComponent, MultiAction>>, diff --git a/src/displays/menus/settingsmenu.h b/src/displays/menus/settingsmenu.h index 12c8e2f..d367802 100644 --- a/src/displays/menus/settingsmenu.h +++ b/src/displays/menus/settingsmenu.h @@ -37,6 +37,7 @@ struct BackLedAccessor : public RefAccessor { bool &getRef() const overrid class SettingsMenu : public MenuDisplay, public StaticText, + public BackActionInterface>, public StaticMenuDefinition< makeComponent, SwitchScreenAction>, makeComponent, SwitchScreenAction, StaticMenuItemIcon<&icons::wifi>>,