wip: refactor pt.7, 198 errors yay

This commit is contained in:
🪞👃🪞 2024-11-10 14:57:14 +01:00
parent 869d92110d
commit a1818a8504
6 changed files with 45 additions and 48 deletions

View file

@ -1,7 +1,7 @@
use crate::*;
#[derive(Clone)]
pub enum ArrangerCommand {
pub enum ArrangerAppCommand {
Focus(FocusCommand),
Transport(TransportCommand),
Phrases(PhrasePoolCommand),
@ -11,10 +11,10 @@ pub enum ArrangerCommand {
}
/// Handle top-level events in standalone arranger.
impl Handle<Tui> for Arranger<Tui> {
impl Handle<Tui> for ArrangerApp<Tui> {
fn handle (&mut self, i: &TuiInput) -> Perhaps<bool> {
if let Some(entered) = self.entered() {
use ArrangerFocus::*;
use ArrangerAppFocus::*;
if let Some(true) = match entered {
Transport => self.transport.as_mut().map(|t|t.handle(i)).transpose()?.flatten(),
Arrangement => self.arrangement.handle(i)?,
@ -24,14 +24,14 @@ impl Handle<Tui> for Arranger<Tui> {
return Ok(Some(true))
}
}
ArrangerCommand::execute_with_state(self, i)
ArrangerAppCommand::execute_with_state(self, i)
}
}
impl InputToCommand<Tui, Arranger<Tui>> for ArrangerCommand {
fn input_to_command (state: &Arranger<Tui>, input: &TuiInput) -> Option<Self> {
impl InputToCommand<Tui, ArrangerApp<Tui>> for ArrangerAppCommand {
fn input_to_command (state: &ArrangerApp<Tui>, input: &TuiInput) -> Option<Self> {
use FocusCommand::*;
use ArrangerCommand::*;
use ArrangerAppCommand::*;
match input.event() {
key!(KeyCode::Tab) => Some(Focus(Next)),
key!(Shift-KeyCode::Tab) => Some(Focus(Prev)),
@ -45,11 +45,11 @@ impl InputToCommand<Tui, Arranger<Tui>> for ArrangerCommand {
key!(KeyCode::Esc) => Some(Focus(Exit)),
key!(KeyCode::Char(' ')) => Some(Transport(TransportCommand::PlayToggle)),
_ => match state.focused() {
ArrangerFocus::Transport => state.transport.as_ref()
ArrangerAppFocus::Transport => state.transport.as_ref()
.map(|t|TransportCommand::input_to_command(&*t.read().unwrap(), input)
.map(Transport))
.flatten(),
ArrangerFocus::PhrasePool => {
ArrangerAppFocus::PhrasePool => {
let phrases = state.phrases.read().unwrap();
match input.event() {
key!(KeyCode::Char('e')) => Some(EditPhrase(Some(phrases.phrase().clone()))),
@ -57,10 +57,10 @@ impl InputToCommand<Tui, Arranger<Tui>> for ArrangerCommand {
.map(Phrases)
}
},
ArrangerFocus::PhraseEditor =>
ArrangerAppFocus::PhraseEditor =>
PhraseEditorCommand::input_to_command(&state.editor, input)
.map(Editor),
ArrangerFocus::Arrangement => match input.event() {
ArrangerAppFocus::Arrangement => match input.event() {
key!(KeyCode::Char('e')) => Some(EditPhrase(state.arrangement.phrase())),
_ => ArrangementCommand::input_to_command(&state.arrangement, &input)
.map(Arrangement)
@ -108,14 +108,14 @@ impl InputToCommand<Tui, Arrangement<Tui>> for ArrangementCommand {
}
}
//impl Arranger<Tui> {
//impl ArrangerApp<Tui> {
///// Helper for event passthru to focused component
//fn handle_focused (&mut self, from: &TuiInput) -> Perhaps<bool> {
//match self.focused() {
//ArrangerFocus::Transport => self.transport.handle(from),
//ArrangerFocus::PhrasePool => self.handle_pool(from),
//ArrangerFocus::PhraseEditor => self.editor.handle(from),
//ArrangerFocus::Arrangement => self.handle_arrangement(from)
//ArrangerAppFocus::Transport => self.transport.handle(from),
//ArrangerAppFocus::PhrasePool => self.handle_pool(from),
//ArrangerAppFocus::PhraseEditor => self.editor.handle(from),
//ArrangerAppFocus::Arrangement => self.handle_arrangement(from)
//.and_then(|result|{self.show_phrase();Ok(result)}),
//}
//}
@ -160,15 +160,6 @@ impl InputToCommand<Tui, Arrangement<Tui>> for ArrangementCommand {
//}
//}
#[derive(Clone)]
pub enum ArrangerCommand {
Focus(FocusCommand),
Transport(TransportCommand),
Phrases(PhrasePoolCommand),
Editor(PhraseEditorCommand),
Arrangement(ArrangementCommand),
EditPhrase(Option<Arc<RwLock<Phrase>>>),
}
#[derive(Clone)]
pub enum ArrangementCommand {
New,
@ -196,8 +187,8 @@ pub enum ArrangementCommand {
Edit(Option<Arc<RwLock<Phrase>>>),
}
impl<E: Engine> Command<Arranger<E>> for ArrangerCommand {
fn execute (self, state: &mut Arranger<E>) -> Perhaps<Self> {
impl<E: Engine> Command<ArrangerApp<E>> for ArrangerAppCommand {
fn execute (self, state: &mut ArrangerApp<E>) -> Perhaps<Self> {
let undo = match self {
Self::Focus(cmd) => {
delegate(cmd, Self::Focus, state)
@ -218,7 +209,7 @@ impl<E: Engine> Command<Arranger<E>> for ArrangerCommand {
},
Self::EditPhrase(phrase) => {
state.editor.phrase = phrase.clone();
state.focus(ArrangerFocus::PhraseEditor);
state.focus(ArrangerAppFocus::PhraseEditor);
state.focus_enter();
Ok(None)
}