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