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 {
fn execute (self, state: &mut T) -> Perhaps<Self> {
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!()
},

View file

@ -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(())
})
}

View file

@ -94,9 +94,7 @@ fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option<Seque
return None
}
Some(match state.focused() {
AppFocus::Menu => {
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<T: PhrasesControl> InputToCommand<Tui, T> 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<T: PhrasesControl> InputToCommand<Tui, T> 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,