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
25namespace deluge::gui::menu_item {
26template <typename T = int32_t>
27class Value : public MenuItem {
28public:
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
49protected:
50 virtual void writeCurrentValue() {}
51
52 // 7SEG ONLY
53 virtual void drawValue() = 0;
54
55private:
56 T value_;
57};
58
59template <typename T>
60void Value<T>::beginSession(MenuItem* navigatedBackwardFrom) {
61 if (display->haveOLED()) {
63 }
64 else {
66 }
67}
68
69template <typename T>
70void 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
83template <typename T>
86 if (display->haveOLED()) {
87 renderUIsForOled();
88 }
89 else {
90 drawValue();
91 }
92}
93
94} // namespace deluge::gui::menu_item
virtual void readCurrentValue()
Like readValueAgain, but does not redraw.
Definition menu_item.h:117
Definition value.h:27
void beginSession(MenuItem *navigatedBackwardFrom) override
Begin an editing session with this menu item.
Definition value.h:60
void selectEncoderAction(int32_t offset) override
Handle select encoder movement.
Definition value.h:70
void readValueAgain() override
Re-read the value from the system and redraw the display to match.
Definition value.h:84
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