diff --git a/crates/tek_tui/src/tui_command.rs b/crates/tek_tui/src/tui_command.rs index a97c3640..8e672a50 100644 --- a/crates/tek_tui/src/tui_command.rs +++ b/crates/tek_tui/src/tui_command.rs @@ -265,37 +265,33 @@ pub enum FileBrowserCommand { impl Command for FileBrowserCommand { fn execute (self, state: &mut T) -> Perhaps { use FileBrowserCommand::*; - match state.phrases_mode_mut().clone() { - Some(PhrasesMode::Import(index, browser)) => match self { + let mode = state.phrases_mode_mut(); + match mode { + Some(PhrasesMode::Import(index, ref mut browser)) => match self { Cancel => { - *state.phrases_mode_mut() = None; + *mode = None; }, Chdir(cwd) => { - *state.phrases_mode_mut() = Some(PhrasesMode::Import( - index, FileBrowser::new(Some(cwd))? - )); + *mode = Some(PhrasesMode::Import(*index, FileBrowser::new(Some(cwd))?)); }, Select(index) => { - *state.phrases_mode_mut() = Some(PhrasesMode::Import( - index, browser - )) + browser.index = index; + }, + Confirm => { + todo!("import midi to phrase"); }, _ => todo!(), _ => unreachable!() }, - Some(PhrasesMode::Export(index, browser)) => match self { + Some(PhrasesMode::Export(index, ref mut browser)) => match self { Cancel => { - *state.phrases_mode_mut() = None; + *mode = None; }, Chdir(cwd) => { - *state.phrases_mode_mut() = Some(PhrasesMode::Export( - index, FileBrowser::new(Some(cwd))? - )); + *mode = Some(PhrasesMode::Export(*index, FileBrowser::new(Some(cwd))?)); }, Select(index) => { - *state.phrases_mode_mut() = Some(PhrasesMode::Import( - index, browser - )) + browser.index = index; }, _ => unreachable!() }, diff --git a/crates/tek_tui/src/tui_content.rs b/crates/tek_tui/src/tui_content.rs index 8875d6dd..1c1e1ed3 100644 --- a/crates/tek_tui/src/tui_content.rs +++ b/crates/tek_tui/src/tui_content.rs @@ -132,10 +132,10 @@ impl<'a, T: PhrasesViewState> Content for PhrasesView<'a, T> { let entered = self.0.phrases_entered(); let mode = self.0.phrases_mode(); let content = Stack::down(move|add|match mode { - Some(PhrasesMode::Import(index, ref browser)) => { + Some(PhrasesMode::Import(_, ref browser)) => { add(browser) }, - Some(PhrasesMode::Export(index, ref browser)) => { + Some(PhrasesMode::Export(_, ref browser)) => { add(browser) }, _ => { @@ -201,6 +201,7 @@ impl Content for FileBrowser { } i += 1; } + add(&format!("{}/{i}", self.index))?; Ok(()) }) } diff --git a/crates/tek_tui/src/tui_input.rs b/crates/tek_tui/src/tui_input.rs index 6245611d..7ca1ae5d 100644 --- a/crates/tek_tui/src/tui_input.rs +++ b/crates/tek_tui/src/tui_input.rs @@ -94,9 +94,7 @@ fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option { - todo!() - }, + AppFocus::Menu => { todo!() }, AppFocus::Content(focused) => match focused { SequencerFocus::Phrases => Phrases(PhrasesCommand::input_to_command(state, input)?), SequencerFocus::PhraseEditor => Editor(PhraseCommand::input_to_command(state, input)?), @@ -316,11 +314,15 @@ impl InputToCommand for FileBrowserCommand { use FileBrowserCommand::*; if let Some(PhrasesMode::Import(index, browser)) = state.phrases_mode() { Some(match from.event() { - key!(Up) => Select(browser.index.overflowing_sub(1).0.min(browser.len())), - key!(Down) => Select(browser.index.saturating_add(1) % browser.len()), + key!(Up) => Select( + browser.index.overflowing_sub(1).0.min(browser.len().saturating_sub(1)) + ), + key!(Down) => Select( + browser.index.saturating_add(1) % browser.len() + ), key!(Right) => Chdir(browser.cwd.clone()), key!(Left) => Chdir(browser.cwd.clone()), - key!(Enter) => { todo!() }, + key!(Enter) => Confirm, key!(Char(c)) => { todo!() }, key!(Backspace) => { todo!() }, key!(Esc) => Self::Cancel, @@ -332,7 +334,7 @@ impl InputToCommand for FileBrowserCommand { key!(Down) => Select(browser.index.saturating_add(1) % browser.len()), key!(Right) => Chdir(browser.cwd.clone()), key!(Left) => Chdir(browser.cwd.clone()), - key!(Enter) => { todo!() }, + key!(Enter) => Confirm, key!(Char(c)) => { todo!() }, key!(Backspace) => { todo!() }, key!(Esc) => Self::Cancel,