diff --git a/crates/tek_sequencer/src/arranger_cmd.rs b/crates/tek_sequencer/src/arranger_cmd.rs index 53400e02..2ee8fab0 100644 --- a/crates/tek_sequencer/src/arranger_cmd.rs +++ b/crates/tek_sequencer/src/arranger_cmd.rs @@ -1,13 +1,13 @@ use crate::*; -#[derive(Clone, PartialEq)] +#[derive(Clone)] pub enum ArrangerCommand { Focus(FocusCommand), Transport(TransportCommand), Phrases(PhrasePoolCommand), Editor(PhraseEditorCommand), Arrangement(ArrangementCommand), - EditPhrase, + EditPhrase(Option>>), } #[derive(Clone, PartialEq)] pub enum ArrangementCommand { @@ -56,13 +56,11 @@ impl Command> for ArrangerCommand { } else { Ok(None) }, - Self::EditPhrase => if let Some(phrase) = state.arrangement.phrase() { - state.editor.phrase = Some(phrase.clone()); + Self::EditPhrase(phrase) => { + state.editor.phrase = phrase.clone(); state.focus(ArrangerFocus::PhraseEditor); state.focus_enter(); Ok(None) - } else { - Ok(None) } }?; state.show_phrase(); diff --git a/crates/tek_sequencer/src/arranger_tui_cmd.rs b/crates/tek_sequencer/src/arranger_tui_cmd.rs index 4ec5e1bf..6ecc01b6 100644 --- a/crates/tek_sequencer/src/arranger_tui_cmd.rs +++ b/crates/tek_sequencer/src/arranger_tui_cmd.rs @@ -23,18 +23,6 @@ impl Handle for Arranger { } } -/// Handle events for arrangement. -impl Handle for Arrangement { - fn handle (&mut self, from: &TuiInput) -> Perhaps { - Ok(if let Some(command) = ArrangementCommand::input_to_command(self, from) { - let _undo = command.execute(self)?; - Some(true) - } else { - None - }) - } -} - impl InputToCommand> for ArrangerCommand { fn input_to_command (state: &Arranger, input: &TuiInput) -> Option { use FocusCommand::*; @@ -56,14 +44,19 @@ impl InputToCommand> for ArrangerCommand { .map(|t|TransportCommand::input_to_command(&*t.read().unwrap(), input) .map(Transport)) .flatten(), - ArrangerFocus::PhrasePool => - PhrasePoolCommand::input_to_command(&*state.phrases.read().unwrap(), input) - .map(Phrases), + ArrangerFocus::PhrasePool => { + let phrases = state.phrases.read().unwrap(); + match input.event() { + key!(KeyCode::Char('e')) => Some(EditPhrase(Some(phrases.phrase().clone()))), + _ => PhrasePoolCommand::input_to_command(&*phrases, input) + .map(Phrases) + } + }, ArrangerFocus::PhraseEditor => PhraseEditorCommand::input_to_command(&state.editor, input) .map(Editor), ArrangerFocus::Arrangement => match input.event() { - key!(KeyCode::Char('e')) => Some(EditPhrase), + key!(KeyCode::Char('e')) => Some(EditPhrase(state.arrangement.phrase())), _ => ArrangementCommand::input_to_command(&state.arrangement, &input) .map(Arrangement) } @@ -71,6 +64,19 @@ impl InputToCommand> for ArrangerCommand { } } } + +/// Handle events for arrangement. +impl Handle for Arrangement { + fn handle (&mut self, from: &TuiInput) -> Perhaps { + Ok(if let Some(command) = ArrangementCommand::input_to_command(self, from) { + let _undo = command.execute(self)?; + Some(true) + } else { + None + }) + } +} + impl InputToCommand> for ArrangementCommand { fn input_to_command (_: &Arrangement, input: &TuiInput) -> Option { use ArrangementCommand::*; @@ -101,6 +107,7 @@ impl InputToCommand> for ArrangementCommand { } } } + //impl Arranger { ///// Helper for event passthru to focused component //fn handle_focused (&mut self, from: &TuiInput) -> Perhaps {