mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
down to 15e
This commit is contained in:
parent
16e6a0397c
commit
1de163d0d3
7 changed files with 67 additions and 65 deletions
85
src/pool.rs
85
src/pool.rs
|
|
@ -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::*;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue