diff --git a/crates/tek_tui/src/tui_command.rs b/crates/tek_tui/src/tui_command.rs index c00bf92a..a97c3640 100644 --- a/crates/tek_tui/src/tui_command.rs +++ b/crates/tek_tui/src/tui_command.rs @@ -275,6 +275,11 @@ impl Command for FileBrowserCommand { index, FileBrowser::new(Some(cwd))? )); }, + Select(index) => { + *state.phrases_mode_mut() = Some(PhrasesMode::Import( + index, browser + )) + }, _ => todo!(), _ => unreachable!() }, @@ -287,6 +292,11 @@ impl Command for FileBrowserCommand { index, FileBrowser::new(Some(cwd))? )); }, + Select(index) => { + *state.phrases_mode_mut() = Some(PhrasesMode::Import( + index, browser + )) + }, _ => unreachable!() }, _ => unreachable!(), diff --git a/crates/tek_tui/src/tui_content.rs b/crates/tek_tui/src/tui_content.rs index 195169b6..8875d6dd 100644 --- a/crates/tek_tui/src/tui_content.rs +++ b/crates/tek_tui/src/tui_content.rs @@ -188,11 +188,18 @@ impl Content for FileBrowser { type Engine = Tui; fn content (&self) -> impl Widget { Stack::down(|add|{ + let mut i = 0; for (_, name) in self.dirs.iter() { - add(&name.as_str())?; + if i >= self.scroll { + add(&TuiStyle::bold(name.as_str(), i == self.index))?; + } + i += 1; } for (_, name) in self.files.iter() { - add(&name.as_str())?; + if i >= self.scroll { + add(&TuiStyle::bold(name.as_str(), i == self.index))?; + } + i += 1; } Ok(()) }) diff --git a/crates/tek_tui/src/tui_input.rs b/crates/tek_tui/src/tui_input.rs index 2b7b7b30..6245611d 100644 --- a/crates/tek_tui/src/tui_input.rs +++ b/crates/tek_tui/src/tui_input.rs @@ -89,7 +89,7 @@ where } fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option { - use SequencerCommand as Cmd; + use SequencerCommand::*; if !state.entered() { return None } @@ -98,18 +98,14 @@ fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option match focused { + SequencerFocus::Phrases => Phrases(PhrasesCommand::input_to_command(state, input)?), + SequencerFocus::PhraseEditor => Editor(PhraseCommand::input_to_command(state, input)?), SequencerFocus::Transport(_) => { match TransportCommand::input_to_command(state, input)? { TransportCommand::Clock(_) => { todo!() }, - TransportCommand::Focus(command) => Cmd::Focus(command), + TransportCommand::Focus(command) => Focus(command), } }, - SequencerFocus::Phrases => { - Cmd::Phrases(PhrasesCommand::input_to_command(state, input)?) - }, - SequencerFocus::PhraseEditor => { - Cmd::Editor(PhraseCommand::input_to_command(state, input)?) - }, } }) } @@ -317,12 +313,13 @@ fn to_phrases_command (state: &T, input: &TuiInput) -> Optio impl InputToCommand for FileBrowserCommand { fn input_to_command (state: &T, from: &TuiInput) -> Option { use KeyCode::{Up, Down, Right, Left, Enter, Esc, Char, Backspace}; + use FileBrowserCommand::*; if let Some(PhrasesMode::Import(index, browser)) = state.phrases_mode() { Some(match from.event() { - key!(Up) => Self::Select(0), - key!(Down) => Self::Select(0), - key!(Right) => Self::Chdir(browser.cwd.clone()), - key!(Left) => Self::Chdir(browser.cwd.clone()), + key!(Up) => Select(browser.index.overflowing_sub(1).0.min(browser.len())), + 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!(Char(c)) => { todo!() }, key!(Backspace) => { todo!() }, @@ -331,10 +328,10 @@ impl InputToCommand for FileBrowserCommand { }) } else if let Some(PhrasesMode::Export(index, browser)) = state.phrases_mode() { Some(match from.event() { - key!(Up) => Self::Select(0), - key!(Down) => Self::Select(0), - key!(Right) => Self::Chdir(browser.cwd.clone()), - key!(Left) => Self::Chdir(browser.cwd.clone()), + key!(Up) => Select(browser.index.overflowing_sub(1).0.min(browser.len())), + 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!(Char(c)) => { todo!() }, key!(Backspace) => { todo!() }, diff --git a/crates/tek_tui/src/tui_model.rs b/crates/tek_tui/src/tui_model.rs index 7c71e365..11ff6c86 100644 --- a/crates/tek_tui/src/tui_model.rs +++ b/crates/tek_tui/src/tui_model.rs @@ -206,6 +206,9 @@ impl FileBrowser { size: Measure::new(), }) } + pub fn len (&self) -> usize { + self.dirs.len() + self.files.len() + } } /// Displays and edits phrase length.