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