mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 12:46:42 +01:00
extract _cmd modules
This commit is contained in:
parent
e20f195c20
commit
60c129d868
7 changed files with 270 additions and 267 deletions
95
crates/tek_sequencer/src/arranger_cmd.rs
Normal file
95
crates/tek_sequencer/src/arranger_cmd.rs
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
use crate::*;
|
||||
/// Handle top-level events in standalone arranger.
|
||||
impl Handle<Tui> for Arranger<Tui> {
|
||||
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
if !match self.focused() {
|
||||
ArrangerFocus::Transport => self.transport.handle(from)?,
|
||||
ArrangerFocus::PhrasePool => self.phrases.handle(from)?,
|
||||
ArrangerFocus::PhraseEditor => self.editor.handle(from)?,
|
||||
ArrangerFocus::Arrangement => {
|
||||
let mut handle_phrase = ||{
|
||||
let result = self.phrases.handle(from);
|
||||
self.arrangement.phrase_put();
|
||||
result
|
||||
};
|
||||
match from.event() {
|
||||
key!(KeyCode::Char('a')) => handle_phrase()?,
|
||||
key!(KeyCode::Char('c')) => handle_phrase()?,
|
||||
key!(KeyCode::Char('i')) => handle_phrase()?,
|
||||
key!(KeyCode::Char('d')) => handle_phrase()?,
|
||||
_ => self.arrangement.handle(from)?
|
||||
}
|
||||
},
|
||||
}.unwrap_or(false) {
|
||||
match from.event() {
|
||||
// Tab navigation
|
||||
key!(KeyCode::Tab) => { self.focus_next(); },
|
||||
key!(Shift-KeyCode::Tab) => { self.focus_prev(); },
|
||||
key!(KeyCode::BackTab) => { self.focus_prev(); },
|
||||
key!(Shift-KeyCode::BackTab) => { self.focus_prev(); },
|
||||
// Directional navigation
|
||||
key!(KeyCode::Up) => { self.focus_up(); },
|
||||
key!(KeyCode::Down) => { self.focus_down(); },
|
||||
key!(KeyCode::Left) => { self.focus_left(); },
|
||||
key!(KeyCode::Right) => { self.focus_right(); },
|
||||
// Put selected phrase at position
|
||||
key!(KeyCode::Char('s')) => { self.arrangement.phrase_put(); },
|
||||
// Global play/pause binding
|
||||
key!(KeyCode::Char(' ')) => match self.transport {
|
||||
Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; },
|
||||
None => { return Ok(None) }
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
};
|
||||
Ok(Some(true))
|
||||
}
|
||||
}
|
||||
impl Handle<Tui> for Arrangement<Tui> {
|
||||
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
match from.event() {
|
||||
key!(KeyCode::Char('`')) => { self.mode.to_next(); },
|
||||
key!(KeyCode::Delete) => { self.delete(); },
|
||||
key!(KeyCode::Char('.')) => { self.increment(); },
|
||||
key!(KeyCode::Char(',')) => { self.decrement(); },
|
||||
// TODO: next/prev scene
|
||||
key!(KeyCode::Enter) => { self.activate(); },
|
||||
key!(Ctrl-KeyCode::Char('a')) => { self.scene_add(None, None)?; },
|
||||
key!(Ctrl-KeyCode::Char('t')) => { self.track_add(None, None)?; },
|
||||
key!(KeyCode::Char('n')) => { todo!("rename selected"); },
|
||||
key!(KeyCode::Char('l')) => if let Some(phrase) = self.phrase() {
|
||||
phrase.write().unwrap().toggle_loop()
|
||||
},
|
||||
key!(KeyCode::Up) => {
|
||||
match self.mode {
|
||||
ArrangementViewMode::Horizontal => self.track_prev(),
|
||||
_ => self.scene_prev(),
|
||||
};
|
||||
self.show_phrase();
|
||||
},
|
||||
key!(KeyCode::Down) => {
|
||||
match self.mode {
|
||||
ArrangementViewMode::Horizontal => self.track_next(),
|
||||
_ => self.scene_next(),
|
||||
};
|
||||
self.show_phrase();
|
||||
},
|
||||
key!(KeyCode::Left) => {
|
||||
match self.mode {
|
||||
ArrangementViewMode::Horizontal => self.scene_prev(),
|
||||
_ => self.track_prev(),
|
||||
};
|
||||
self.show_phrase();
|
||||
},
|
||||
key!(KeyCode::Right) => {
|
||||
match self.mode {
|
||||
ArrangementViewMode::Horizontal => self.scene_next(),
|
||||
_ => self.track_next(),
|
||||
};
|
||||
self.show_phrase();
|
||||
},
|
||||
_ => return Ok(None)
|
||||
}
|
||||
Ok(Some(true))
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue