From 9bd898ab337278496c2efa8363990cc40d46c64a Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 17 Dec 2024 18:51:27 +0100 Subject: [PATCH] stub sampler import command --- crates/tek/src/core/command.rs | 2 +- crates/tek/src/tui/app_groovebox.rs | 7 ++++++- crates/tek/src/tui/app_sampler.rs | 1 + crates/tek/src/tui/app_sequencer.rs | 4 ++-- crates/tek/src/tui/file_browser.rs | 12 ++++++------ crates/tek/src/tui/phrase_list.rs | 14 ++++++-------- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/crates/tek/src/core/command.rs b/crates/tek/src/core/command.rs index 92afc4d1..1f59e548 100644 --- a/crates/tek/src/core/command.rs +++ b/crates/tek/src/core/command.rs @@ -14,7 +14,7 @@ use crate::*; ($Command:ty: <$Engine:ty>|$state:ident:$State:ty,$input:ident|$handler:expr) => { impl InputToCommand<$Engine, $State> for $Command { fn input_to_command ($state: &$State, $input: &<$Engine as Engine>::Input) -> Option { - $handler + Some($handler) } } } diff --git a/crates/tek/src/tui/app_groovebox.rs b/crates/tek/src/tui/app_groovebox.rs index 21dd5376..808eab63 100644 --- a/crates/tek/src/tui/app_groovebox.rs +++ b/crates/tek/src/tui/app_groovebox.rs @@ -1,5 +1,6 @@ use crate::*; use super::*; +use KeyCode::Char; impl TryFrom<&Arc>> for GrooveboxTui { type Error = Box; @@ -28,5 +29,9 @@ pub enum GrooveboxCommand { render!(|self:GrooveboxTui|Bsp::s(Tui::fixed_y(self.split, &self.sequencer), &self.sampler)); audio!(|self:GrooveboxTui,_client,_process|Control::Continue); handle!(|self:GrooveboxTui,input|GrooveboxCommand::execute_with_state(self, input)); +input_to_command!(GrooveboxCommand: |state:GrooveboxTui,input|match input.event() { + // load sample + key_pat!(Char('l')) => GrooveboxCommand::Sampler(SamplerCommand::Import), + _ => GrooveboxCommand::Sequencer(SequencerCommand::input_to_command(&state.sequencer, input)?), +}); command!(|self:GrooveboxCommand,state:GrooveboxTui|todo!()); -input_to_command!(GrooveboxCommand: |state:GrooveboxTui,input|todo!()); diff --git a/crates/tek/src/tui/app_sampler.rs b/crates/tek/src/tui/app_sampler.rs index d4ace6a1..e65b7bf1 100644 --- a/crates/tek/src/tui/app_sampler.rs +++ b/crates/tek/src/tui/app_sampler.rs @@ -9,6 +9,7 @@ use symphonia::core::audio::SampleBuffer; use symphonia::default::get_codecs; pub enum SamplerCommand { + Import } impl TryFrom<&Arc>> for SamplerTui { diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index 631f56c5..95aa078d 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -55,7 +55,7 @@ pub enum SequencerCommand { } handle!(|self:SequencerTui,input|SequencerCommand::execute_with_state(self, input)); -input_to_command!(SequencerCommand: |state:SequencerTui,input|Some(match input.event() { +input_to_command!(SequencerCommand: |state:SequencerTui,input|match input.event() { // Transport: Play/pause key_pat!(Char(' ')) => Clock(if state.clock().is_stopped() { Play(None) } else { Pause(None) }), @@ -95,7 +95,7 @@ input_to_command!(SequencerCommand: |state:SequencerTui,input|Some(match in } else { return None } -})); +}); command!(|self: SequencerCommand, state: SequencerTui|match self { Self::Phrases(cmd) => { let mut default = |cmd: PhrasesCommand|cmd.execute(&mut state.phrases).map(|x|x.map(Phrases)); diff --git a/crates/tek/src/tui/file_browser.rs b/crates/tek/src/tui/file_browser.rs index cb42feec..7b33bf0a 100644 --- a/crates/tek/src/tui/file_browser.rs +++ b/crates/tek/src/tui/file_browser.rs @@ -139,7 +139,7 @@ command!(|self: FileBrowserCommand, state: PhraseListModel|{ input_to_command!(FileBrowserCommand:|state:PhraseListModel,from|{ if let Some(PhraseListMode::Import(_index, browser)) = state.phrases_mode() { - Some(match from.event() { + match from.event() { key_pat!(Up) => Select( browser.index.overflowing_sub(1).0.min(browser.len().saturating_sub(1)) ), @@ -153,9 +153,9 @@ input_to_command!(FileBrowserCommand:|state:PhraseListModel,from|{ key_pat!(Backspace) => { todo!() }, key_pat!(Esc) => Self::Cancel, _ => return None - }) + } } else if let Some(PhraseListMode::Export(_index, browser)) = state.phrases_mode() { - Some(match from.event() { + match from.event() { key_pat!(Up) => Select(browser.index.overflowing_sub(1).0.min(browser.len())), key_pat!(Down) => Select(browser.index.saturating_add(1) % browser.len()), key_pat!(Right) => Chdir(browser.cwd.clone()), @@ -165,7 +165,7 @@ input_to_command!(FileBrowserCommand:|state:PhraseListModel,from|{ key_pat!(Backspace) => { todo!() }, key_pat!(Esc) => Self::Cancel, _ => return None - }) + } } else { unreachable!() } @@ -173,7 +173,7 @@ input_to_command!(FileBrowserCommand:|state:PhraseListModel,from|{ input_to_command!(PhraseLengthCommand:|state:PhraseListModel,from|{ if let Some(PhraseListMode::Length(_, length, _)) = state.phrases_mode() { - Some(match from.event() { + match from.event() { key_pat!(Up) => Self::Inc, key_pat!(Down) => Self::Dec, key_pat!(Right) => Self::Next, @@ -181,7 +181,7 @@ input_to_command!(PhraseLengthCommand:|state:PhraseListModel,from|{ key_pat!(Enter) => Self::Set(*length), key_pat!(Esc) => Self::Cancel, _ => return None - }) + } } else { unreachable!() } diff --git a/crates/tek/src/tui/phrase_list.rs b/crates/tek/src/tui/phrase_list.rs index 8ee899fd..c515e202 100644 --- a/crates/tek/src/tui/phrase_list.rs +++ b/crates/tek/src/tui/phrase_list.rs @@ -99,14 +99,12 @@ command!(|self:PhrasesCommand, state:PhraseListModel|{ } }); -input_to_command!(PhrasesCommand:|state:PhraseListModel,input|{ - Some(match state.phrases_mode() { - Some(PhraseListMode::Rename(..)) => Self::Rename(Rename::input_to_command(state, input)?), - Some(PhraseListMode::Length(..)) => Self::Length(Length::input_to_command(state, input)?), - Some(PhraseListMode::Import(..)) => Self::Import(Browse::input_to_command(state, input)?), - Some(PhraseListMode::Export(..)) => Self::Export(Browse::input_to_command(state, input)?), - _ => to_phrases_command(state, input)? - }) +input_to_command!(PhrasesCommand:|state:PhraseListModel,input|match state.phrases_mode() { + Some(PhraseListMode::Rename(..)) => Self::Rename(Rename::input_to_command(state, input)?), + Some(PhraseListMode::Length(..)) => Self::Length(Length::input_to_command(state, input)?), + Some(PhraseListMode::Import(..)) => Self::Import(Browse::input_to_command(state, input)?), + Some(PhraseListMode::Export(..)) => Self::Export(Browse::input_to_command(state, input)?), + _ => to_phrases_command(state, input)? }); fn to_phrases_command (state: &PhraseListModel, input: &TuiInput) -> Option {