tangled
alpha
login
or
join now
ericwood.org
/
macropad-sequencer
1
fork
atom
A step sequencer for Adafruit's RP2040-based macropad
1
fork
atom
overview
issues
pulls
pipelines
add limits to numeric menus
ericwood.org
2 months ago
f8602a2b
1a44045f
+23
-3
3 changed files
expand all
collapse all
unified
split
src
menus
mod.rs
sequencer.rs
step.rs
+15
-3
src/menus/mod.rs
···
96
96
97
97
pub struct NumericMenuItem<'a, T> {
98
98
title: &'a str,
99
99
+
min: u32,
100
100
+
max: u32,
99
101
pub value: u32,
100
102
buffer: itoa::Buffer,
101
103
callback: &'a dyn Fn(&mut T, u32),
102
104
}
103
105
104
106
impl<'a, T> NumericMenuItem<'a, T> {
105
105
-
pub fn new(title: &'a str, value: u32, on_change: &'a dyn Fn(&mut T, u32)) -> Self {
107
107
+
pub fn new(
108
108
+
title: &'a str,
109
109
+
value: u32,
110
110
+
min: u32,
111
111
+
max: u32,
112
112
+
on_change: &'a dyn Fn(&mut T, u32),
113
113
+
) -> Self {
106
114
let buffer = itoa::Buffer::new();
107
115
108
116
Self {
109
117
title,
118
118
+
min,
119
119
+
max,
110
120
value,
111
121
buffer,
112
122
callback: on_change,
···
122
132
fn on_change(&mut self, value: &mut T, step: i32) {
123
133
let mut intermediate = self.value as i32;
124
134
intermediate += step;
125
125
-
if intermediate < 0 {
126
126
-
intermediate = 0;
135
135
+
if intermediate < self.min as i32 {
136
136
+
intermediate = self.min as i32;
137
137
+
} else if intermediate > self.max as i32 {
138
138
+
intermediate = self.max as i32;
127
139
}
128
140
129
141
self.value = intermediate as u32;
+4
src/menus/sequencer.rs
···
63
63
let bpm_menu = NumericMenuItem::<SequencerMenuValue>::new(
64
64
"BPM",
65
65
defaults.bpm,
66
66
+
1,
67
67
+
1000,
66
68
&|menu_value, value| {
67
69
menu_value.bpm = value;
68
70
},
···
86
88
let steps_menu = NumericMenuItem::<SequencerMenuValue>::new(
87
89
"STEPS",
88
90
defaults.steps,
91
91
+
1,
92
92
+
12,
89
93
&|menu_value, value| {
90
94
menu_value.steps = value;
91
95
},
+4
src/menus/step.rs
···
87
87
let octave_menu = NumericMenuItem::<StepMenuValue>::new(
88
88
"OCTAVE",
89
89
defaults.octave,
90
90
+
0,
91
91
+
9,
90
92
&|menu_value, value| {
91
93
menu_value.octave = value;
92
94
},
···
95
97
let velocity_menu = NumericMenuItem::<StepMenuValue>::new(
96
98
"VELOCITY",
97
99
defaults.velocity,
100
100
+
0,
101
101
+
128,
98
102
&|menu_value, value| {
99
103
menu_value.velocity = value;
100
104
},