Deluge Firmware
1.3.0
Build date: 2026.01.09
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
#include <hid/buttons.h>
26
27
namespace
deluge::gui::menu_item {
28
template
<
typename
T =
int
32_t>
29
class
Value
:
public
MenuItem {
30
public
:
31
using
MenuItem::MenuItem;
32
void
beginSession
(MenuItem* navigatedBackwardFrom)
override
;
33
void
selectEncoderAction
(int32_t offset)
override
;
34
void
readValueAgain
()
override
;
35
bool
selectEncoderActionEditsInstrument
() final {
return
true
; }
36
37
void
setValue(T value) { value_ = value; }
38
39
template
<util::enumeration E>
40
void
setValue(E value) {
41
value_ = util::to_underlying(value);
42
}
43
44
T getValue() {
return
value_; }
45
46
template
<util::enumeration E>
47
E getValue() {
48
return
static_cast<
E
>
(value_);
49
}
50
51
protected
:
52
virtual
void
writeCurrentValue() {}
53
54
// 7SEG ONLY
55
virtual
void
drawValue() = 0;
56
57
private
:
58
T value_;
59
};
60
61
template
<
typename
T>
62
void
Value<T>::beginSession
(MenuItem* navigatedBackwardFrom) {
63
if
(display->haveOLED()) {
64
readCurrentValue
();
65
}
66
else
{
67
readValueAgain
();
68
}
69
}
70
71
template
<
typename
T>
72
void
Value<T>::selectEncoderAction
(int32_t offset) {
73
if
(Buttons::isButtonPressed(hid::button::SELECT_ENC)) {
74
Buttons::selectButtonPressUsedUp =
true
;
75
}
76
77
writeCurrentValue();
78
79
// For MenuItems referring to an AutoParam (so UnpatchedParam and PatchedParam), ideally we wouldn't want to render
80
// the display here, because that'll happen soon anyway due to a setting of TIMER_DISPLAY_AUTOMATION.
81
if
(display->haveOLED()) {
82
renderUIsForOled();
83
}
84
else
{
85
drawValue();
// Probably not necessary either...
86
}
87
}
88
89
template
<
typename
T>
90
void
Value<T>::readValueAgain
() {
91
readCurrentValue
();
92
if
(display->haveOLED()) {
93
renderUIsForOled();
94
}
95
else
{
96
drawValue();
97
}
98
}
99
100
}
// namespace deluge::gui::menu_item
MenuItem::readCurrentValue
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition
menu_item.h:131
deluge::gui::menu_item::Value
Definition
value.h:29
deluge::gui::menu_item::Value::beginSession
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition
value.h:62
deluge::gui::menu_item::Value::selectEncoderAction
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition
value.h:72
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:90
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:35