From a1818a8504e301649db53f355f19faefe7874fb0 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sun, 10 Nov 2024 14:57:14 +0100 Subject: [PATCH] wip: refactor pt.7, 198 errors yay --- crates/tek_core/src/focus.rs | 2 +- crates/tek_tui/src/lib.rs | 18 ++++++---- crates/tek_tui/src/tui_arranger.rs | 12 +++---- crates/tek_tui/src/tui_arranger_cmd.rs | 47 ++++++++++--------------- crates/tek_tui/src/tui_sequencer_cmd.rs | 8 ++--- crates/tek_tui/src/tui_transport_cmd.rs | 6 ++-- 6 files changed, 45 insertions(+), 48 deletions(-) diff --git a/crates/tek_core/src/focus.rs b/crates/tek_core/src/focus.rs index 897a3392..95da3d64 100644 --- a/crates/tek_core/src/focus.rs +++ b/crates/tek_core/src/focus.rs @@ -86,7 +86,7 @@ pub trait FocusGrid { } } -#[derive(Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq)] pub enum FocusCommand { Next, Prev, diff --git a/crates/tek_tui/src/lib.rs b/crates/tek_tui/src/lib.rs index ca77c32f..6f7e3b63 100644 --- a/crates/tek_tui/src/lib.rs +++ b/crates/tek_tui/src/lib.rs @@ -18,18 +18,24 @@ submod! { tui_arranger_foc tui_arranger_hor tui_arranger_ver - tui_sequencer - tui_sequencer_cmd - tui_transport - tui_transport_cmd tui_mixer tui_mixer_cmd - tui_sampler - tui_sampler_cmd + tui_phrase + tui_phrase_cmd tui_plugin tui_plugin_cmd tui_plugin_lv2 tui_plugin_lv2_gui tui_plugin_vst2 tui_plugin_vst3 + tui_pool + tui_pool_cmd + tui_sampler + tui_sampler_cmd + tui_sequencer + tui_sequencer_bar + tui_sequencer_cmd + tui_sequencer_foc + tui_transport + tui_transport_cmd } diff --git a/crates/tek_tui/src/tui_arranger.rs b/crates/tek_tui/src/tui_arranger.rs index 520eaa64..c01bfff3 100644 --- a/crates/tek_tui/src/tui_arranger.rs +++ b/crates/tek_tui/src/tui_arranger.rs @@ -27,12 +27,12 @@ pub struct ArrangerApp { /// Width and height of app at last render pub size: Measure, /// Menu bar - pub menu: MenuBar, + pub menu: MenuBar, /// Command history - pub history: Vec, + pub history: Vec, } -impl Audio for ArrangerApp { +impl Audio for ArrangerApp { fn process (&mut self, client: &Client, scope: &ProcessScope) -> Control { if let Some(ref transport) = self.transport { transport.write().unwrap().process(client, scope); @@ -63,7 +63,7 @@ impl Audio for ArrangerApp { } /// Layout for standalone arranger app. -impl Content for ArrangerApp { +impl Content for ArrangerApp { type Engine = Tui; fn content (&self) -> impl Widget { let focused = self.arrangement.focused; @@ -129,7 +129,7 @@ impl ArrangerApp { Arc::new(TransportTime::default()) }, menu: { - use ArrangerCommand::*; + use ArrangerAppCommand::*; MenuBar::new() .add({ use ArrangementCommand::*; @@ -139,7 +139,7 @@ impl ArrangerApp { .cmd("s", "Save project", Arrangement(Save)) }) .add({ - use TransportCommand::*; + use TransportAppCommand::*; Menu::new("Transport") .cmd("p", "Play", Transport(Play)) .cmd("s", "Play from start", Transport(PlayFromStart)) diff --git a/crates/tek_tui/src/tui_arranger_cmd.rs b/crates/tek_tui/src/tui_arranger_cmd.rs index 502ef851..bc9b1910 100644 --- a/crates/tek_tui/src/tui_arranger_cmd.rs +++ b/crates/tek_tui/src/tui_arranger_cmd.rs @@ -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 for Arranger { +impl Handle for ArrangerApp { fn handle (&mut self, i: &TuiInput) -> Perhaps { 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 for Arranger { return Ok(Some(true)) } } - ArrangerCommand::execute_with_state(self, i) + ArrangerAppCommand::execute_with_state(self, i) } } -impl InputToCommand> for ArrangerCommand { - fn input_to_command (state: &Arranger, input: &TuiInput) -> Option { +impl InputToCommand> for ArrangerAppCommand { + fn input_to_command (state: &ArrangerApp, input: &TuiInput) -> Option { 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> 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> 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> for ArrangementCommand { } } -//impl Arranger { +//impl ArrangerApp { ///// Helper for event passthru to focused component //fn handle_focused (&mut self, from: &TuiInput) -> Perhaps { //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> for ArrangementCommand { //} //} -#[derive(Clone)] -pub enum ArrangerCommand { - Focus(FocusCommand), - Transport(TransportCommand), - Phrases(PhrasePoolCommand), - Editor(PhraseEditorCommand), - Arrangement(ArrangementCommand), - EditPhrase(Option>>), -} #[derive(Clone)] pub enum ArrangementCommand { New, @@ -196,8 +187,8 @@ pub enum ArrangementCommand { Edit(Option>>), } -impl Command> for ArrangerCommand { - fn execute (self, state: &mut Arranger) -> Perhaps { +impl Command> for ArrangerAppCommand { + fn execute (self, state: &mut ArrangerApp) -> Perhaps { let undo = match self { Self::Focus(cmd) => { delegate(cmd, Self::Focus, state) @@ -218,7 +209,7 @@ impl Command> for ArrangerCommand { }, Self::EditPhrase(phrase) => { state.editor.phrase = phrase.clone(); - state.focus(ArrangerFocus::PhraseEditor); + state.focus(ArrangerAppFocus::PhraseEditor); state.focus_enter(); Ok(None) } diff --git a/crates/tek_tui/src/tui_sequencer_cmd.rs b/crates/tek_tui/src/tui_sequencer_cmd.rs index b7718fb3..f775e096 100644 --- a/crates/tek_tui/src/tui_sequencer_cmd.rs +++ b/crates/tek_tui/src/tui_sequencer_cmd.rs @@ -48,9 +48,9 @@ impl Command> for SequencerAppCommand { } } -impl InputToCommand> for SequencerCommand { +impl InputToCommand> for SequencerAppCommand { fn input_to_command (state: &SequencerApp, input: &TuiInput) -> Option { - use SequencerCommand::*; + use SequencerAppCommand::*; use FocusCommand::*; match input.event() { key!(KeyCode::Tab) => Some(Focus(Next)), @@ -61,10 +61,10 @@ impl InputToCommand> for SequencerCommand { key!(KeyCode::Down) => Some(Focus(Down)), key!(KeyCode::Left) => Some(Focus(Left)), key!(KeyCode::Right) => Some(Focus(Right)), - key!(KeyCode::Char(' ')) => Some(Transport(TransportCommand::PlayToggle)), + key!(KeyCode::Char(' ')) => Some(Transport(TransportAppCommand::PlayToggle)), _ => match state.focused() { SequencerFocus::Transport => if let Some(t) = state.transport.as_ref() { - TransportCommand::input_to_command(&*t.read().unwrap(), input).map(Transport) + TransportAppCommand::input_to_command(&*t.read().unwrap(), input).map(Transport) } else { None }, diff --git a/crates/tek_tui/src/tui_transport_cmd.rs b/crates/tek_tui/src/tui_transport_cmd.rs index 49b448c4..997a5a81 100644 --- a/crates/tek_tui/src/tui_transport_cmd.rs +++ b/crates/tek_tui/src/tui_transport_cmd.rs @@ -1,15 +1,15 @@ use crate::*; #[derive(Copy, Clone, PartialEq)] -pub enum TransportViewCommand { +pub enum TransportAppCommand { Focus(FocusCommand), Transport(TransportCommand), } impl Handle for TransportView { fn handle (&mut self, from: &TuiInput) -> Perhaps { - TransportViewCommand::execute_with_state(self, from) + TransportAppCommand::execute_with_state(self, from) } } -impl InputToCommand> for TransportViewCommand { +impl InputToCommand> for TransportAppCommand { fn input_to_command (_: &TransportView, input: &TuiInput) -> Option { match input.event() { key!(KeyCode::Char(' ')) => Some(Self::FocusPrev),