wip: midi import/export browser, pt.6

This commit is contained in:
🪞👃🪞 2024-11-24 21:35:56 +01:00
parent 4adb8d45fe
commit f12a1dc2ca
3 changed files with 25 additions and 26 deletions

View file

@ -265,37 +265,33 @@ pub enum FileBrowserCommand {
impl<T: PhrasesControl> Command<T> for FileBrowserCommand { impl<T: PhrasesControl> Command<T> for FileBrowserCommand {
fn execute (self, state: &mut T) -> Perhaps<Self> { fn execute (self, state: &mut T) -> Perhaps<Self> {
use FileBrowserCommand::*; use FileBrowserCommand::*;
match state.phrases_mode_mut().clone() { let mode = state.phrases_mode_mut();
Some(PhrasesMode::Import(index, browser)) => match self { match mode {
Some(PhrasesMode::Import(index, ref mut browser)) => match self {
Cancel => { Cancel => {
*state.phrases_mode_mut() = None; *mode = None;
}, },
Chdir(cwd) => { Chdir(cwd) => {
*state.phrases_mode_mut() = Some(PhrasesMode::Import( *mode = Some(PhrasesMode::Import(*index, FileBrowser::new(Some(cwd))?));
index, FileBrowser::new(Some(cwd))?
));
}, },
Select(index) => { Select(index) => {
*state.phrases_mode_mut() = Some(PhrasesMode::Import( browser.index = index;
index, browser },
)) Confirm => {
todo!("import midi to phrase");
}, },
_ => todo!(), _ => todo!(),
_ => unreachable!() _ => unreachable!()
}, },
Some(PhrasesMode::Export(index, browser)) => match self { Some(PhrasesMode::Export(index, ref mut browser)) => match self {
Cancel => { Cancel => {
*state.phrases_mode_mut() = None; *mode = None;
}, },
Chdir(cwd) => { Chdir(cwd) => {
*state.phrases_mode_mut() = Some(PhrasesMode::Export( *mode = Some(PhrasesMode::Export(*index, FileBrowser::new(Some(cwd))?));
index, FileBrowser::new(Some(cwd))?
));
}, },
Select(index) => { Select(index) => {
*state.phrases_mode_mut() = Some(PhrasesMode::Import( browser.index = index;
index, browser
))
}, },
_ => unreachable!() _ => unreachable!()
}, },

View file

@ -132,10 +132,10 @@ impl<'a, T: PhrasesViewState> Content for PhrasesView<'a, T> {
let entered = self.0.phrases_entered(); let entered = self.0.phrases_entered();
let mode = self.0.phrases_mode(); let mode = self.0.phrases_mode();
let content = Stack::down(move|add|match mode { let content = Stack::down(move|add|match mode {
Some(PhrasesMode::Import(index, ref browser)) => { Some(PhrasesMode::Import(_, ref browser)) => {
add(browser) add(browser)
}, },
Some(PhrasesMode::Export(index, ref browser)) => { Some(PhrasesMode::Export(_, ref browser)) => {
add(browser) add(browser)
}, },
_ => { _ => {
@ -201,6 +201,7 @@ impl Content for FileBrowser {
} }
i += 1; i += 1;
} }
add(&format!("{}/{i}", self.index))?;
Ok(()) Ok(())
}) })
} }

View file

@ -94,9 +94,7 @@ fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option<Seque
return None return None
} }
Some(match state.focused() { Some(match state.focused() {
AppFocus::Menu => { AppFocus::Menu => { todo!() },
todo!()
},
AppFocus::Content(focused) => match focused { AppFocus::Content(focused) => match focused {
SequencerFocus::Phrases => Phrases(PhrasesCommand::input_to_command(state, input)?), SequencerFocus::Phrases => Phrases(PhrasesCommand::input_to_command(state, input)?),
SequencerFocus::PhraseEditor => Editor(PhraseCommand::input_to_command(state, input)?), SequencerFocus::PhraseEditor => Editor(PhraseCommand::input_to_command(state, input)?),
@ -316,11 +314,15 @@ impl<T: PhrasesControl> InputToCommand<Tui, T> for FileBrowserCommand {
use FileBrowserCommand::*; use FileBrowserCommand::*;
if let Some(PhrasesMode::Import(index, browser)) = state.phrases_mode() { if let Some(PhrasesMode::Import(index, browser)) = state.phrases_mode() {
Some(match from.event() { Some(match from.event() {
key!(Up) => Select(browser.index.overflowing_sub(1).0.min(browser.len())), key!(Up) => Select(
key!(Down) => Select(browser.index.saturating_add(1) % browser.len()), 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!(Right) => Chdir(browser.cwd.clone()),
key!(Left) => Chdir(browser.cwd.clone()), key!(Left) => Chdir(browser.cwd.clone()),
key!(Enter) => { todo!() }, key!(Enter) => Confirm,
key!(Char(c)) => { todo!() }, key!(Char(c)) => { todo!() },
key!(Backspace) => { todo!() }, key!(Backspace) => { todo!() },
key!(Esc) => Self::Cancel, key!(Esc) => Self::Cancel,
@ -332,7 +334,7 @@ impl<T: PhrasesControl> InputToCommand<Tui, T> for FileBrowserCommand {
key!(Down) => Select(browser.index.saturating_add(1) % browser.len()), key!(Down) => Select(browser.index.saturating_add(1) % browser.len()),
key!(Right) => Chdir(browser.cwd.clone()), key!(Right) => Chdir(browser.cwd.clone()),
key!(Left) => Chdir(browser.cwd.clone()), key!(Left) => Chdir(browser.cwd.clone()),
key!(Enter) => { todo!() }, key!(Enter) => Confirm,
key!(Char(c)) => { todo!() }, key!(Char(c)) => { todo!() },
key!(Backspace) => { todo!() }, key!(Backspace) => { todo!() },
key!(Esc) => Self::Cancel, key!(Esc) => Self::Cancel,