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