Deluge Firmware
1.3.0
Build date: 2025.06.05
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) {
36
D_PRINTLN(
"%d"
, value);
37
value_ = value;
38
}
39
40
template
<util::enumeration E>
41
void
setValue(E value) {
42
value_ = util::to_underlying(value);
43
}
44
45
T getValue() {
return
value_; }
46
47
template
<util::enumeration E>
48
E getValue() {
49
return
static_cast<
E
>
(value_);
50
}
51
52
protected
:
53
virtual
void
writeCurrentValue() {}
54
55
// 7SEG ONLY
56
virtual
void
drawValue() = 0;
57
58
private
:
59
T value_;
60
};
61
62
template
<
typename
T>
63
void
Value<T>::beginSession
(MenuItem* navigatedBackwardFrom) {
64
if
(display->haveOLED()) {
65
readCurrentValue
();
66
}
67
else
{
68
readValueAgain
();
69
}
70
}
71
72
template
<
typename
T>
73
void
Value<T>::selectEncoderAction
(int32_t offset) {
74
writeCurrentValue();
75
76
// For MenuItems referring to an AutoParam (so UnpatchedParam and PatchedParam), ideally we wouldn't want to render
77
// the display here, because that'll happen soon anyway due to a setting of TIMER_DISPLAY_AUTOMATION.
78
if
(display->haveOLED()) {
79
renderUIsForOled();
80
}
81
else
{
82
drawValue();
// Probably not necessary either...
83
}
84
}
85
86
template
<
typename
T>
87
void
Value<T>::readValueAgain
() {
88
readCurrentValue
();
89
if
(display->haveOLED()) {
90
renderUIsForOled();
91
}
92
else
{
93
drawValue();
94
}
95
}
96
97
}
// namespace deluge::gui::menu_item
MenuItem::readCurrentValue
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition
menu_item.h:120
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:63
deluge::gui::menu_item::Value::selectEncoderAction
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition
value.h:73
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:87
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