mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 20:56:43 +01:00
refactor(transport): make widgets focusable
This commit is contained in:
parent
2106a7c044
commit
b8ac83b019
9 changed files with 204 additions and 132 deletions
|
|
@ -1,51 +1,55 @@
|
|||
use crate::*;
|
||||
|
||||
handle!{
|
||||
TransportToolbar |self, e| {
|
||||
handle_keymap(self, e, KEYMAP_TRANSPORT)
|
||||
handle!(TransportToolbar |self, e| {
|
||||
match e {
|
||||
AppEvent::Input(Event::Key(KeyEvent { code: KeyCode::Right, .. })) => {
|
||||
self.focus_next();
|
||||
Ok(true)
|
||||
},
|
||||
AppEvent::Input(Event::Key(KeyEvent { code: KeyCode::Left, .. })) => {
|
||||
self.focus_prev();
|
||||
Ok(true)
|
||||
},
|
||||
AppEvent::Input(Event::Key(KeyEvent { code: KeyCode::Char(' '), .. })) => {
|
||||
self.toggle_play();
|
||||
Ok(true)
|
||||
},
|
||||
_ => self.focused_mut().handle(e)
|
||||
}
|
||||
}
|
||||
|
||||
/// Key bindings for transport toolbar.
|
||||
pub const KEYMAP_TRANSPORT: &'static [KeyBinding<TransportToolbar>] = keymap!(TransportToolbar {
|
||||
[Left, NONE, "transport_prev", "select previous control", |transport: &mut TransportToolbar| Ok({
|
||||
transport.selected.prev();
|
||||
true
|
||||
})],
|
||||
[Right, NONE, "transport_next", "select next control", |transport: &mut TransportToolbar| Ok({
|
||||
transport.selected.next();
|
||||
true
|
||||
})],
|
||||
[Char('.'), NONE, "transport_increment", "increment value at cursor", |transport: &mut TransportToolbar| {
|
||||
match transport.selected {
|
||||
TransportFocus::BPM => {
|
||||
transport.timebase.bpm.fetch_add(1.0, Ordering::Relaxed);
|
||||
},
|
||||
TransportFocus::Quant => {
|
||||
transport.quant = next_note_length(transport.quant)
|
||||
},
|
||||
TransportFocus::Sync => {
|
||||
transport.sync = next_note_length(transport.sync)
|
||||
},
|
||||
};
|
||||
Ok(true)
|
||||
}],
|
||||
[Char(','), NONE, "transport_decrement", "decrement value at cursor", |transport: &mut TransportToolbar| {
|
||||
match transport.selected {
|
||||
TransportFocus::BPM => {
|
||||
transport.timebase.bpm.fetch_sub(1.0, Ordering::Relaxed);
|
||||
},
|
||||
TransportFocus::Quant => {
|
||||
transport.quant = prev_note_length(transport.quant);
|
||||
},
|
||||
TransportFocus::Sync => {
|
||||
transport.sync = prev_note_length(transport.sync);
|
||||
},
|
||||
};
|
||||
Ok(true)
|
||||
}],
|
||||
[Char(' '), NONE, "transport_play_toggle", "play or pause", |transport: &mut TransportToolbar| {
|
||||
transport.toggle_play()?;
|
||||
Ok(true)
|
||||
}],
|
||||
});
|
||||
|
||||
handle!(TransportPlayPauseButton |self, _e| Ok(false));
|
||||
|
||||
handle!(TransportBPM |self, _e| {
|
||||
//TransportFocus::BPM => {
|
||||
//transport.timebase.bpm.fetch_add(1.0, Ordering::Relaxed);
|
||||
//},
|
||||
//TransportFocus::BPM => {
|
||||
//transport.timebase.bpm.fetch_sub(1.0, Ordering::Relaxed);
|
||||
//},
|
||||
Ok(false)
|
||||
});
|
||||
|
||||
handle!(TransportQuantize |self, _e| {
|
||||
//TransportFocus::Quant => {
|
||||
//transport.quant.value = next_note_length(transport.quant)
|
||||
//},
|
||||
//TransportFocus::Quant => {
|
||||
//transport.quant.value = prev_note_length(transport.quant);
|
||||
//},
|
||||
Ok(false)
|
||||
});
|
||||
|
||||
handle!(TransportSync |self, _e| {
|
||||
//TransportFocus::Sync => {
|
||||
//transport.sync.value = next_note_length(transport.sync)
|
||||
//},
|
||||
//TransportFocus::Sync => {
|
||||
//transport.sync.value = prev_note_length(transport.sync);
|
||||
//},
|
||||
Ok(false)
|
||||
});
|
||||
|
||||
handle!(TransportClock |self, _e| {
|
||||
Ok(false)
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue