down to 15e

This commit is contained in:
🪞👃🪞 2024-12-31 16:23:10 +01:00
parent 16e6a0397c
commit 1de163d0d3
7 changed files with 67 additions and 65 deletions

View file

@ -197,6 +197,13 @@ impl PoolModel {
pub(crate) fn phrases_mode_mut (&mut self) -> &mut Option<PoolMode> {
&mut self.mode
}
pub fn file_picker (&self) -> Option<&FileBrowser> {
match self.mode {
Some(PoolMode::Import(_, ref file_picker)) => Some(file_picker),
Some(PoolMode::Export(_, ref file_picker)) => Some(file_picker),
_ => None
}
}
}
pub struct PoolView<'a>(pub(crate) &'a PoolModel);
// TODO: Display phrases always in order of appearance
@ -207,48 +214,44 @@ render!(Tui: (self: PoolView<'a>) => {
let upper_left = "Pool:";
let upper_right = format!("({})", phrases.len());
let color = self.0.phrase().read().unwrap().color;
Tui::bg(bg, lay!(move|add|{
add(&Fill::xy(Outer(Style::default().fg(color.base.rgb).bg(bg))))?;
//add(&Lozenge(Style::default().bg(border_bg).fg(border_color)))?;
add(&Padding::xy(0, 1, Fill::xy(col!(move|add|match mode {
Some(PoolMode::Import(_, ref file_picker)) => add(file_picker),
Some(PoolMode::Export(_, ref file_picker)) => add(file_picker),
_ => Ok(for (i, phrase) in phrases.iter().enumerate() {
add(&lay!(|add|{
let MidiClip { ref name, color, length, .. } = *phrase.read().unwrap();
let mut length = PhraseLength::new(length, None);
if let Some(PoolMode::Length(phrase, new_length, focus)) = mode {
if i == *phrase {
length.pulses = *new_length;
length.focus = Some(*focus);
let border = Fill::xy(Outer(Style::default().fg(color.base.rgb).bg(bg)));
let enclose = |x|lay!(border, Padding::xy(0, 1, Tui::bg(bg, x)));
let content = Cond::either(
self.0.file_picker().is_some(),
Thunk::new(||self.0.file_picker().unwrap()),
Thunk::new(||Coll::map(phrases.iter(), |phrase, i|{
let MidiClip { ref name, color, length, .. } = *phrase.read().unwrap();
let mut length = PhraseLength::new(length, None);
if let Some(PoolMode::Length(phrase, new_length, focus)) = self.0.mode {
if i == phrase {
length.pulses = new_length;
length.focus = Some(focus);
}
}
let clip = Tui::bg(color.base.rgb, Fill::x(col!(
Fill::x(lay!(
Fill::x(Align::w(format!(" {i}"))),
Fill::x(Align::e(Pull::x(1, length.clone()))),
)),
Tui::bold(true, {
let mut row2 = format!(" {name}");
if let Some(PoolMode::Rename(phrase, _)) = self.0.mode {
if i == phrase {
row2 = format!("{row2}");
}
}
add(&Tui::bg(color.base.rgb, Fill::x(col!(
Fill::x(lay!(|add|{
add(&Fill::x(Align::w(format!(" {i}"))))?;
add(&Fill::x(Align::e(Pull::x(1, length.clone()))))
})),
Tui::bold(true, {
let mut row2 = format!(" {name}");
if let Some(PoolMode::Rename(phrase, _)) = mode {
if i == *phrase {
row2 = format!("{row2}");
}
};
row2
}),
))))?;
if i == self.0.phrase_index() {
add(&CORNERS)?;
}
Ok(())
}))?;
})
}))))?;
add(&Fill::x(Align::nw(Push::x(1, Tui::fg(title_color, upper_left.to_string())))))?;
add(&Fill::x(Align::ne(Pull::x(1, Tui::fg(title_color, upper_right.to_string())))))?;
add(&self.0.size)
}))
};
row2
}),
)));
Push::y(i as u16 * 2, lay!(clip, Cond::when(i == self.0.phrase_index(), CORNERS)))
})));
enclose(lay!(
//add(&Lozenge(Style::default().bg(border_bg).fg(border_color)))?;
content,
Fill::x(Align::nw(Push::x(1, Tui::fg(title_color, upper_left.to_string())))),
Fill::x(Align::ne(Pull::x(1, Tui::fg(title_color, upper_right.to_string())))),
self.0.size.clone()
))
});
command!(|self: FileBrowserCommand, state: PoolModel|{
use PoolMode::*;