add iteration versions of row and col macros

This commit is contained in:
🪞👃🪞 2024-09-30 00:15:39 +03:00
parent ad39376659
commit fd2e8f83f6
3 changed files with 57 additions and 50 deletions

View file

@ -833,10 +833,22 @@ where
($($expr:expr),* $(,)?) => { Layers::new(move|add|{ $(add(&$expr)?;)* Ok(()) }) }
}
#[macro_export] macro_rules! col {
($($expr:expr),* $(,)?) => { Stack::down(move|add|{ $(add(&$expr)?;)* Ok(()) }) }
($($expr:expr),* $(,)?) => { Stack::down(move|add|{ $(add(&$expr)?;)* Ok(()) }) };
($pat:pat in $collection:expr => $item:expr) => {
Stack::down(move |add|{
for $pat in $collection { add(&$item)?; }
Ok(())
})
}
}
#[macro_export] macro_rules! row {
($($expr:expr),* $(,)?) => { Stack::right(move|add|{ $(add(&$expr)?;)* Ok(()) }) }
($($expr:expr),* $(,)?) => { Stack::right(move|add|{ $(add(&$expr)?;)* Ok(()) }) };
($pat:pat in $collection:expr => $item:expr) => {
Stack::right(move |add|{
for $pat in $collection { add(&$item)?; }
Ok(())
})
}
}
/// A binary split with fixed proportion

View file

@ -466,8 +466,9 @@ impl<S: BorderStyle, W: Widget<Engine = Tui>> Content for Bordered<S, W> {
fn content (&self) -> impl Widget<Engine = Tui> {
let style = self.0;
Layers::new(move|add|{
add(&Inset::XY(1, 1, &self.1 as &dyn Widget<Engine = Tui>))?;
add(&Border(style))?;
add(&Inset::XY(1, 1, &self.1 as &dyn Widget<Engine = Tui>))
Ok(())
}).fill_xy()
}
}

View file

@ -491,21 +491,14 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
let cols = cols.as_ref();
add(&VerticalArrangerGrid(offset, &rows, &cols))?;
add(&VerticalArrangerCursor(state.focused, state.selected, offset, &cols, &rows))?;
add(&Stack::down(|add|{
add(&Stack::right(move |add|{
for (track, (w, _)) in tracks.iter().zip(cols) {
add(&Layers::new(|add|{
add(&Background(COLOR_BG1))?;
add(&track.name.read().unwrap().as_str())
}).min_xy(*w as u16, 2))?;
}
Ok(())
}).push_x(offset))?;
add(&Stack::down(move |add| {
for (scene, (pulses, _)) in scenes.iter().zip(rows) {
let track_titles = row!((track, (w, _)) in tracks.iter().zip(cols) => {
(&track.name.read().unwrap().as_str() as &dyn Widget<Engine = Tui>)
.bg(COLOR_BG1).min_xy(*w as u16, 2)
}.push_x(offset));
let track_clips = col!((scene, (pulses, _)) in scenes.iter().zip(rows) => {
let height = 1.max((pulses / 96) as u16);
let playing = scene.is_playing(tracks);
add(&Stack::right(move |add| {
Stack::right(move |add| {
add(&Stack::right(|add|{
add(&if playing { "" } else { " " })?;
add(&scene.name.read().unwrap().as_str())
@ -533,12 +526,15 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
}).fixed_xy(*w as u16, height))?;
}
Ok(())
}).fixed_y(height))?;
}
}).fixed_y(height)
});
add(&col!(track_titles, track_clips))?;
Ok(())
}))
}))
})
.bg(Color::Rgb(35,40,25))
.border(Lozenge(Style::default()
.bg(Color::Rgb(40,50,30))
.fg(Color::Rgb(70,80,50))))
}
}
@ -1428,9 +1424,7 @@ impl Content for Sequencer<Tui> {
}),
);
row!(toolbar, content)
.fill_x()
//.inset_x(1)
row!(toolbar, content).fill_x()
.bg(Color::Rgb(40,50,30))
.border(Lozenge(Style::default()
.bg(Color::Rgb(40,50,30))