Deluge Firmware 1.3.0
Build date: 2025.04.16
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
18 // don't enter menu on select button press
19 bool shouldEnterSubmenu() override { return false; }
20
21 // renders toggle item type in submenus after the item name
22 void renderSubmenuItemTypeForOled(int32_t yPixel) override;
23
24 // toggles boolean ON / OFF
25 void toggleValue() {
27 setValue(!getValue());
28 writeCurrentValue();
29 };
30
31 // handles toggling a "toggle" menu from sub-menu level
32 // or handles going back up a level after making a selection from within toggle menu
33 MenuItem* selectButtonPress() override {
34 // this is true if you open a toggle menu using grid shortcut
35 if (soundEditor.getCurrentMenuItem() == this) {
36 return nullptr; // go up a level
37 }
38 // you're toggling toggle menu from submenu level
39 else {
40 toggleValue();
41 displayToggleValue();
42 return NO_NAVIGATION;
43 }
44 }
45
46 // get's toggle status for rendering checkbox on OLED
47 bool getToggleValue() {
49 return this->getValue();
50 }
51
52 // get's toggle status for rendering dot on 7SEG
53 uint8_t shouldDrawDotOnName() override {
55 return this->getValue() ? 3 : 255;
56 }
57
58private:
59 const char* getNameFor(bool on);
60};
61
64class ToggleBool : public Toggle {
65public:
66 using Toggle::Toggle;
67
68 ToggleBool(l10n::String newName, l10n::String title, bool& newToggle) : Toggle(newName, title), t(newToggle) {}
69
70 void readCurrentValue() override { this->setValue(t); }
71 void writeCurrentValue() override { t = this->getValue(); }
72
73 bool& t;
74};
75
76class ToggleBoolDyn : public Toggle {
77public:
78 using Toggle::Toggle;
79
80 ToggleBoolDyn(l10n::String newName, l10n::String title, bool* (*getTogglePtr)()) : Toggle(newName, title) {
81 getTPtr = getTogglePtr;
82 }
83
84 void readCurrentValue() override { this->setValue(*(getTPtr())); }
85 void writeCurrentValue() override { *(getTPtr()) = this->getValue(); }
86
87 bool* (*getTPtr)();
88};
89
90class InvertedToggleBool : public Toggle {
91public:
92 using Toggle::Toggle;
93
94 InvertedToggleBool(l10n::String newName, l10n::String title, bool& newToggle)
95 : Toggle(newName, title), t(newToggle) {}
96
97 void readCurrentValue() override { this->setValue(!t); }
98 void writeCurrentValue() override { t = !this->getValue(); }
99
100 bool& t;
101};
102
103class InvertedToggleBoolDyn : public Toggle {
104public:
105 using Toggle::Toggle;
106
107 InvertedToggleBoolDyn(l10n::String newName, l10n::String title, bool* (*getTogglePtr)()) : Toggle(newName, title) {
108 getTPtr = getTogglePtr;
109 }
110
111 void readCurrentValue() override { this->setValue(!*(getTPtr())); }
112 void writeCurrentValue() override { *(getTPtr()) = !this->getValue(); }
113
114 bool* (*getTPtr)();
115};
116
117} // 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:208
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition menu_item.h:117
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:111
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:97
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:84
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition toggle.h:70
Definition toggle.h:8
bool shouldEnterSubmenu() override
Check if selecting this menu item (with select encoder) should enter a submenu.
Definition toggle.h:19
uint8_t shouldDrawDotOnName() override
Get the "draw dot state".
Definition toggle.h:53
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:33
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition toggle.cpp:9
Definition value.h:27