mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
wip: refactor pt.10, 165 errors
This commit is contained in:
parent
1405b82341
commit
355b34c738
9 changed files with 96 additions and 204 deletions
|
|
@ -3,27 +3,16 @@ use crate::*;
|
|||
#[derive(Clone)]
|
||||
pub enum ArrangerViewCommand {
|
||||
Focus(FocusCommand),
|
||||
Transport(TransportCommand),
|
||||
Arrangement(ArrangementEditorCommand),
|
||||
EditPhrase(Option<Arc<RwLock<Phrase>>>),
|
||||
Transport(TransportCommand),
|
||||
Phrases(PhrasePoolCommand),
|
||||
Editor(PhraseEditorCommand),
|
||||
EditPhrase(Option<Arc<RwLock<Phrase>>>),
|
||||
}
|
||||
|
||||
/// Handle top-level events in standalone arranger.
|
||||
impl Handle<Tui> for ArrangerView<Tui> {
|
||||
fn handle (&mut self, i: &TuiInput) -> Perhaps<bool> {
|
||||
if let Some(entered) = self.entered() {
|
||||
use ArrangerViewFocus::*;
|
||||
if let Some(true) = match entered {
|
||||
Transport => self.sequencer.transport.map(|t|t.handle(i)).transpose()?.flatten(),
|
||||
Arrangement => self.arrangement.handle(i)?,
|
||||
PhrasePool => self.sequencer.phrases.handle(i)?,
|
||||
PhraseEditor => self.sequencer.editor.handle(i)?,
|
||||
} {
|
||||
return Ok(Some(true))
|
||||
}
|
||||
}
|
||||
ArrangerViewCommand::execute_with_state(self, i)
|
||||
}
|
||||
}
|
||||
|
|
@ -70,87 +59,28 @@ impl InputToCommand<Tui, ArrangerView<Tui>> for ArrangerViewCommand {
|
|||
}
|
||||
}
|
||||
|
||||
//impl ArrangerView<Tui> {
|
||||
///// Helper for event passthru to focused component
|
||||
//fn handle_focused (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
//match self.focused() {
|
||||
//ArrangerViewFocus::Transport => self.transport.handle(from),
|
||||
//ArrangerViewFocus::PhrasePool => self.handle_pool(from),
|
||||
//ArrangerViewFocus::PhraseEditor => self.editor.handle(from),
|
||||
//ArrangerViewFocus::Arrangement => self.handle_arrangement(from)
|
||||
//.and_then(|result|{self.show_phrase();Ok(result)}),
|
||||
//}
|
||||
//}
|
||||
///// Helper for phrase event passthru when phrase pool is focused
|
||||
//fn handle_pool (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
//match from.event() {
|
||||
//key!(KeyCode::Char('<')) => {
|
||||
//self.phrases_split = self.phrases_split.saturating_sub(1).max(12);
|
||||
//},
|
||||
//key!(KeyCode::Char('>')) => {
|
||||
//self.phrases_split = self.phrases_split + 1;
|
||||
//},
|
||||
//_ => return self.phrases.handle(from)
|
||||
//}
|
||||
//Ok(Some(true))
|
||||
//}
|
||||
///// Helper for phrase event passthru when arrangement is focused
|
||||
//fn handle_arrangement (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
//let mut handle_phrase = ||{
|
||||
//let result = self.phrases.handle(from);
|
||||
//self.arrangement.phrase_put();
|
||||
//result
|
||||
//};
|
||||
//match from.event() {
|
||||
//key!(KeyCode::Char('a')) => return handle_phrase(),
|
||||
//key!(KeyCode::Char('i')) => return handle_phrase(),
|
||||
//key!(KeyCode::Char('d')) => return handle_phrase(),
|
||||
//key!(KeyCode::Char('<')) => if self.arrangement.selected == ArrangementFocus::Mix {
|
||||
//self.arrangement_split = self.arrangement_split.saturating_sub(1).max(12);
|
||||
//} else {
|
||||
//return self.arrangement.handle(from)
|
||||
//},
|
||||
//key!(KeyCode::Char('>')) => if self.arrangement.selected == ArrangementFocus::Mix {
|
||||
//self.arrangement_split = self.arrangement_split + 1;
|
||||
//} else {
|
||||
//return self.arrangement.handle(from)
|
||||
//},
|
||||
//_ => return self.arrangement.handle(from)
|
||||
//}
|
||||
//self.show_phrase();
|
||||
//Ok(Some(true))
|
||||
//}
|
||||
//}
|
||||
|
||||
impl<E: Engine> Command<ArrangerView<E>> for ArrangerViewCommand {
|
||||
fn execute (self, state: &mut ArrangerView<E>) -> Perhaps<Self> {
|
||||
fn execute (self, view: &mut ArrangerView<E>) -> Perhaps<Self> {
|
||||
let undo = match self {
|
||||
Self::Focus(cmd) => {
|
||||
delegate(cmd, Self::Focus, state)
|
||||
},
|
||||
Self::Phrases(cmd) => {
|
||||
delegate(cmd, Self::Phrases, &mut*state.sequencer.phrases.write().unwrap())
|
||||
},
|
||||
Self::Editor(cmd) => {
|
||||
delegate(cmd, Self::Editor, &mut state.sequencer.editor)
|
||||
},
|
||||
Self::Arrangement(cmd) => {
|
||||
delegate(cmd, Self::Arrangement, &mut state.arrangement)
|
||||
},
|
||||
Self::Transport(cmd) => if let Some(ref transport) = state.sequencer.transport {
|
||||
delegate(cmd, Self::Transport, &mut*transport.write().unwrap())
|
||||
} else {
|
||||
Ok(None)
|
||||
},
|
||||
Self::Focus(cmd) =>
|
||||
delegate(cmd, Self::Focus, view),
|
||||
Self::Phrases(cmd) =>
|
||||
delegate(cmd, Self::Phrases, &mut view.sequencer.phrases),
|
||||
Self::Editor(cmd) =>
|
||||
delegate(cmd, Self::Editor, &mut view.sequencer.editor),
|
||||
Self::Transport(cmd) =>
|
||||
delegate(cmd, Self::Transport, &mut view.sequencer.transport.state),
|
||||
Self::Arrangement(cmd) =>
|
||||
delegate(cmd, Self::Arrangement, &mut view.arrangement),
|
||||
Self::EditPhrase(phrase) => {
|
||||
state.sequencer.editor.phrase = phrase.clone();
|
||||
state.focus(ArrangerViewFocus::PhraseEditor);
|
||||
state.focus_enter();
|
||||
view.sequencer.editor.phrase = phrase.clone();
|
||||
view.focus(ArrangerViewFocus::PhraseEditor);
|
||||
view.focus_enter();
|
||||
Ok(None)
|
||||
}
|
||||
}?;
|
||||
state.sequencer.show_phrase();
|
||||
state.sequencer.update_status();
|
||||
view.sequencer.show_phrase();
|
||||
view.sequencer.update_status();
|
||||
return Ok(undo);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue