mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
merge SceneClip and SceneRow into SceneRows
This commit is contained in:
parent
2352b72377
commit
647cd06060
1 changed files with 31 additions and 45 deletions
|
|
@ -519,57 +519,43 @@ impl<'a> Content for SceneRows<'a> {
|
|||
let Self(offset, columns, rows, tracks, scenes) = *self;
|
||||
Split::down(move |add| {
|
||||
for (scene, (pulses, _)) in scenes.iter().zip(rows) {
|
||||
add(&SceneRow(tracks, scene, columns, offset, 1.max((pulses / 96) as u16)))?;
|
||||
let height = 1.max((pulses / 96) as u16);
|
||||
let playing = scene.is_playing(tracks);
|
||||
add(&Fixed::Y(height, Split::right(move |add| {
|
||||
add(&Fixed::XY(offset.saturating_sub(1), height, Split::right(|add|{
|
||||
add(&if playing { "▶ " } else { " " })?;
|
||||
add(&scene.name.read().unwrap().as_str())
|
||||
})))?;
|
||||
for (track, (w, _x)) in columns.iter().enumerate() {
|
||||
add(&Fixed::XY(*w as u16, height, Layers::new(move |add|{
|
||||
let mut color = COLOR_BG0;
|
||||
if let (Some(track), Some(Some(clip))) = (
|
||||
tracks.get(track),
|
||||
scene.clips.get(track),
|
||||
) {
|
||||
if let Some(phrase) = track.phrases.get(*clip) {
|
||||
add(&Plus::X(1, format!(
|
||||
"{clip:02} {}",
|
||||
phrase.read().unwrap().name.read().unwrap()
|
||||
).as_str()))?;
|
||||
color = if track.sequence == Some(*clip) {
|
||||
Nord::PLAYING
|
||||
} else {
|
||||
COLOR_BG1
|
||||
};
|
||||
}
|
||||
}
|
||||
add(&Background(color))
|
||||
})))?;
|
||||
}
|
||||
Ok(())
|
||||
})))?;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
struct SceneRow<'a>(
|
||||
&'a[Sequencer<Tui>], &'a Scene, &'a[(usize, usize)], u16, u16
|
||||
);
|
||||
|
||||
impl<'a> Content for SceneRow<'a> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
let Self(tracks, scene, columns, offset, height) = self;
|
||||
let playing = scene.is_playing(tracks);
|
||||
Fixed::Y(*height, Split::right(move |add| {
|
||||
add(&Fixed::XY(offset.saturating_sub(1), *height, Split::right(|add|{
|
||||
add(&if playing { "▶ " } else { " " })?;
|
||||
add(&scene.name.read().unwrap().as_str())
|
||||
})))?;
|
||||
for (track, (_w, _x)) in columns.iter().enumerate() {
|
||||
add(&SceneClip(tracks.get(track), scene.clips.get(track)))?;
|
||||
}
|
||||
Ok(())
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
struct SceneClip<'a>(Option<&'a Sequencer<Tui>>, Option<&'a Option<usize>>);
|
||||
|
||||
impl<'a> Content for SceneClip<'a> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
let Self(track, clip) = self;
|
||||
Layers::new(move |add|{
|
||||
let mut color = COLOR_BG0;
|
||||
if let (Some(track), Some(Some(clip))) = (track, clip) {
|
||||
if let Some(phrase) = track.phrases.get(*clip) {
|
||||
add(&format!(
|
||||
"{clip:02} {}",
|
||||
phrase.read().unwrap().name.read().unwrap()
|
||||
).as_str())?;
|
||||
color = if track.sequence == Some(*clip) { Nord::PLAYING } else { COLOR_BG1 };
|
||||
}
|
||||
}
|
||||
add(&Background(color))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
struct ArrangerViewHorizontal<'a, E: Engine>(
|
||||
&'a Arranger<E>
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue