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
6
namespace
deluge::gui::menu_item {
7
8
class
Toggle
:
public
Value
<bool> {
9
public
:
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() {
27
readCurrentValue
();
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() {
49
readCurrentValue
();
50
return
this->getValue();
51
}
52
53
// get's toggle status for rendering dot on 7SEG
54
uint8_t
shouldDrawDotOnName
()
override
{
55
readCurrentValue
();
56
return
this->getValue() ? 3 : 255;
57
}
58
59
private
:
60
const
char
* getNameFor(
bool
on);
61
};
62
65
class
ToggleBool :
public
Toggle
{
66
public
:
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
77
class
ToggleBoolDyn :
public
Toggle
{
78
public
:
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
91
class
InvertedToggleBool :
public
Toggle
{
92
public
:
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
104
class
InvertedToggleBoolDyn :
public
Toggle
{
105
public
:
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
MenuItem::title
deluge::l10n::String title
Can get overridden by getTitle(). Actual max num chars for OLED display is 14.
Definition
menu_item.h:211
MenuItem::readCurrentValue
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition
menu_item.h:120
deluge::gui::menu_item::InvertedToggleBoolDyn::readCurrentValue
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition
toggle.h:112
deluge::gui::menu_item::InvertedToggleBool::readCurrentValue
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition
toggle.h:98
deluge::gui::menu_item::ToggleBoolDyn::readCurrentValue
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition
toggle.h:85
deluge::gui::menu_item::ToggleBool::readCurrentValue
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition
toggle.h:71
deluge::gui::menu_item::Toggle
Definition
toggle.h:8
deluge::gui::menu_item::Toggle::shouldEnterSubmenu
bool shouldEnterSubmenu() override
Check if selecting this menu item (with select encoder) should enter a submenu.
Definition
toggle.h:20
deluge::gui::menu_item::Toggle::shouldDrawDotOnName
uint8_t shouldDrawDotOnName() override
Get the "draw dot state".
Definition
toggle.h:54
deluge::gui::menu_item::Toggle::selectEncoderAction
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition
toggle.cpp:14
deluge::gui::menu_item::Toggle::drawPixelsForOled
void drawPixelsForOled()
Paints the pixels below the standard title block.
Definition
toggle.cpp:35
deluge::gui::menu_item::Toggle::selectButtonPress
MenuItem * selectButtonPress() override
Handle a select button press.
Definition
toggle.h:34
deluge::gui::menu_item::Toggle::beginSession
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition
toggle.cpp:9
deluge::gui::menu_item::Value
Definition
value.h:27