Deluge Firmware 1.3.0
Build date: 2025.06.05
Loading...
Searching...
No Matches
toggle.h
1#pragma once
2
3#include "gui/ui/sound_editor.h"
4#include "value.h"
5
6namespace deluge::gui::menu_item {
7
8class Toggle : public Value<bool> {
9public:
10 using Value::Value;
11 void beginSession(MenuItem* navigatedBackwardFrom) override;
12 void selectEncoderAction(int32_t offset) override;
13
14 virtual void drawValue();
15 void drawPixelsForOled();
16 void displayToggleValue();
17 void renderInHorizontalMenu(int32_t startX, int32_t width, int32_t startY, int32_t height) override;
18
19 // don't enter menu on select button press
20 bool shouldEnterSubmenu() override { return false; }
21
22 // renders toggle item type in submenus after the item name
23 void renderSubmenuItemTypeForOled(int32_t yPixel) override;
24
25 // toggles boolean ON / OFF
26 void toggleValue() {
28 setValue(!getValue());
29 writeCurrentValue();
30 };
31
32 // handles toggling a "toggle" menu from sub-menu level
33 // or handles going back up a level after making a selection from within toggle menu
34 MenuItem* selectButtonPress() override {
35 // this is true if you open a toggle menu using grid shortcut
36 if (soundEditor.getCurrentMenuItem() == this) {
37 return nullptr; // go up a level
38 }
39 // you're toggling toggle menu from submenu level
40 else {
41 toggleValue();
42 displayToggleValue();
43 return NO_NAVIGATION;
44 }
45 }
46
47 // get's toggle status for rendering checkbox on OLED
48 bool getToggleValue() {
50 return this->getValue();
51 }
52
53 // get's toggle status for rendering dot on 7SEG
54 uint8_t shouldDrawDotOnName() override {
56 return this->getValue() ? 3 : 255;
57 }
58
59private:
60 const char* getNameFor(bool on);
61};
62
65class ToggleBool : public Toggle {
66public:
67 using Toggle::Toggle;
68
69 ToggleBool(l10n::String newName, l10n::String title, bool& newToggle) : Toggle(newName, title), t(newToggle) {}
70
71 void readCurrentValue() override { this->setValue(t); }
72 void writeCurrentValue() override { t = this->getValue(); }
73
74 bool& t;
75};
76
77class ToggleBoolDyn : public Toggle {
78public:
79 using Toggle::Toggle;
80
81 ToggleBoolDyn(l10n::String newName, l10n::String title, bool* (*getTogglePtr)()) : Toggle(newName, title) {
82 getTPtr = getTogglePtr;
83 }
84
85 void readCurrentValue() override { this->setValue(*(getTPtr())); }
86 void writeCurrentValue() override { *(getTPtr()) = this->getValue(); }
87
88 bool* (*getTPtr)();
89};
90
91class InvertedToggleBool : public Toggle {
92public:
93 using Toggle::Toggle;
94
95 InvertedToggleBool(l10n::String newName, l10n::String title, bool& newToggle)
96 : Toggle(newName, title), t(newToggle) {}
97
98 void readCurrentValue() override { this->setValue(!t); }
99 void writeCurrentValue() override { t = !this->getValue(); }
100
101 bool& t;
102};
103
104class InvertedToggleBoolDyn : public Toggle {
105public:
106 using Toggle::Toggle;
107
108 InvertedToggleBoolDyn(l10n::String newName, l10n::String title, bool* (*getTogglePtr)()) : Toggle(newName, title) {
109 getTPtr = getTogglePtr;
110 }
111
112 void readCurrentValue() override { this->setValue(!*(getTPtr())); }
113 void writeCurrentValue() override { *(getTPtr()) = !this->getValue(); }
114
115 bool* (*getTPtr)();
116};
117
118} // namespace deluge::gui::menu_item
deluge::l10n::String title
Can get overridden by getTitle(). Actual max num chars for OLED display is 14.
Definition menu_item.h:211
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition menu_item.h:120
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:112
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:98
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:85
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:71
Definition toggle.h:8
bool shouldEnterSubmenu() override
Check if selecting this menu item (with select encoder) should enter a submenu.
Definition toggle.h:20
uint8_t shouldDrawDotOnName() override
Get the "draw dot state".
Definition toggle.h:54
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition toggle.cpp:14
void drawPixelsForOled()
Paints the pixels below the standard title block.
Definition toggle.cpp:35
MenuItem * selectButtonPress() override
Handle a select button press.
Definition toggle.h:34
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition toggle.cpp:9
Definition value.h:27