Deluge Firmware
1.3.0
Build date: 2025.04.16
Loading...
Searching...
No Matches
value.h
1
/*
2
* Copyright © 2017-2023 Synthstrom Audible Limited
3
*
4
* This file is part of The Synthstrom Audible Deluge Firmware.
5
*
6
* The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7
* terms of the GNU General Public License as published by the Free Software Foundation,
8
* either version 3 of the License, or (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
* See the GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License along with this program.
15
* If not, see <https://www.gnu.org/licenses/>.
16
*/
17
18
#pragma once
19
20
#include "gui/ui/ui.h"
21
#include "hid/display/display.h"
22
#include "menu_item.h"
23
#include "util/misc.h"
24
25
namespace
deluge::gui::menu_item {
26
template
<
typename
T =
int
32_t>
27
class
Value
:
public
MenuItem {
28
public
:
29
using
MenuItem::MenuItem;
30
void
beginSession
(MenuItem* navigatedBackwardFrom)
override
;
31
void
selectEncoderAction
(int32_t offset)
override
;
32
void
readValueAgain
()
override
;
33
bool
selectEncoderActionEditsInstrument
() final {
return
true
; }
34
35
void
setValue(T value) { value_ = value; }
36
37
template
<util::enumeration E>
38
void
setValue(E value) {
39
value_ = util::to_underlying(value);
40
}
41
42
T getValue() {
return
value_; }
43
44
template
<util::enumeration E>
45
E getValue() {
46
return
static_cast<
E
>
(value_);
47
}
48
49
protected
:
50
virtual
void
writeCurrentValue() {}
51
52
// 7SEG ONLY
53
virtual
void
drawValue() = 0;
54
55
private
:
56
T value_;
57
};
58
59
template
<
typename
T>
60
void
Value<T>::beginSession
(MenuItem* navigatedBackwardFrom) {
61
if
(display->haveOLED()) {
62
readCurrentValue
();
63
}
64
else
{
65
readValueAgain
();
66
}
67
}
68
69
template
<
typename
T>
70
void
Value<T>::selectEncoderAction
(int32_t offset) {
71
writeCurrentValue();
72
73
// For MenuItems referring to an AutoParam (so UnpatchedParam and PatchedParam), ideally we wouldn't want to render
74
// the display here, because that'll happen soon anyway due to a setting of TIMER_DISPLAY_AUTOMATION.
75
if
(display->haveOLED()) {
76
renderUIsForOled();
77
}
78
else
{
79
drawValue();
// Probably not necessary either...
80
}
81
}
82
83
template
<
typename
T>
84
void
Value<T>::readValueAgain
() {
85
readCurrentValue
();
86
if
(display->haveOLED()) {
87
renderUIsForOled();
88
}
89
else
{
90
drawValue();
91
}
92
}
93
94
}
// namespace deluge::gui::menu_item
MenuItem::readCurrentValue
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition
menu_item.h:117
deluge::gui::menu_item::Value
Definition
value.h:27
deluge::gui::menu_item::Value::beginSession
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition
value.h:60
deluge::gui::menu_item::Value::selectEncoderAction
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition
value.h:70
deluge::gui::menu_item::Value::readValueAgain
void readValueAgain() override
Re-read the value from the system and redraw the display to match.
Definition
value.h:84
deluge::gui::menu_item::Value::selectEncoderActionEditsInstrument
bool selectEncoderActionEditsInstrument() final
Used by the sound editor to mark the current instrument as edited when the select encoder is scrolled...
Definition
value.h:33