mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
wip: midi import/export browser, pt.6
This commit is contained in:
parent
4adb8d45fe
commit
f12a1dc2ca
3 changed files with 25 additions and 26 deletions
|
|
@ -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!()
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue