Deluge Firmware
1.3.0
Build date: 2026.08.23
Toggle main menu visibility
Loading...
Searching...
No Matches
selected_note_row.h
1
/*
2
* Copyright (c) 2024 Sean Ditny
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
#include "definitions_cxx.hpp"
20
#include "gui/menu_item/selection.h"
21
#include "gui/ui/sound_editor.h"
22
#include "gui/views/instrument_clip_view.h"
23
#include "model/clip/instrument_clip.h"
24
#include "model/instrument/kit.h"
25
#include "model/model_stack.h"
26
#include "model/note/note_row.h"
27
#include "model/song/song.h"
28
29
namespace
deluge::gui::menu_item::note_row {
30
class
SelectedNoteRow
:
public
Integer
{
31
public
:
32
using
Integer::Integer;
33
34
bool
shouldEnterSubmenu
() {
35
if
(!isUIModeActive(UI_MODE_AUDITIONING)) {
36
display->displayPopup(
"Select Row"
);
37
return
false
;
38
}
39
return
true
;
40
}
41
42
// only allow select encoder action if you've selected a note row to edit
43
bool
selectEncoderActionIsPermitted()
override
{
return
shouldEnterSubmenu
(); }
44
45
ModelStackWithNoteRow
* getIndividualNoteRow(
ModelStackWithTimelineCounter
* modelStack) {
46
auto
* clip =
static_cast<
InstrumentClip
*
>
(modelStack->getTimelineCounter());
47
ModelStackWithNoteRow
* modelStackWithNoteRow =
48
clip->getNoteRowOnScreen(instrumentClipView.lastAuditionedYDisplay,
49
modelStack);
// don't create
50
51
bool
isKit = clip->output->type == OutputType::KIT;
52
53
if
(!isKit) {
54
if
(!modelStackWithNoteRow->getNoteRowAllowNull()) {
// if note row doesn't exist yet, create it
55
modelStackWithNoteRow =
56
instrumentClipView.createNoteRowForYDisplay(modelStack, instrumentClipView.lastAuditionedYDisplay);
57
}
58
}
59
60
return
modelStackWithNoteRow;
61
}
62
63
void
updateDisplay() {
64
if
(display->haveOLED()) {
65
renderUIsForOled();
66
}
67
else
{
68
drawValue();
69
}
70
}
71
};
72
}
// namespace deluge::gui::menu_item::note_row
InstrumentClip
Definition
instrument_clip.h:48
ModelStackWithNoteRow
Definition
model_stack.h:189
ModelStackWithTimelineCounter
Definition
model_stack.h:129
deluge::gui::menu_item::Integer
Definition
integer.h:24
deluge::gui::menu_item::note_row::SelectedNoteRow
Definition
selected_note_row.h:30
deluge::gui::menu_item::note_row::SelectedNoteRow::shouldEnterSubmenu
bool shouldEnterSubmenu()
Check if selecting this menu item (with select encoder) should enter a submenu.
Definition
selected_note_row.h:34