move all track controls to header

This commit is contained in:
🪞👃🪞 2024-11-02 23:34:48 +02:00
parent 0c850913f9
commit 98cf8da424

View file

@ -139,8 +139,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
//let border_bg = Color::Rgb(40, 50, 30); //let border_bg = Color::Rgb(40, 50, 30);
//let border_fg = if self.0.focused { border_hi } else { border_lo }; //let border_fg = if self.0.focused { border_hi } else { border_lo };
//let border = Lozenge(Style::default().bg(border_bg).fg(border_fg)); //let border = Lozenge(Style::default().bg(border_bg).fg(border_fg));
let track_title_h = 2u16; let track_title_h = 5u16;
let tracks_footer = 3u16;
let scene_title_w = 3 + Scene::longest_name(scenes) as u16; // x of 1st track let scene_title_w = 3 + Scene::longest_name(scenes) as u16; // x of 1st track
let clock = &self.0.clock; let clock = &self.0.clock;
let arrangement = Layers::new(move |add|{ let arrangement = Layers::new(move |add|{
@ -172,23 +171,16 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
// track titles // track titles
let header = row!((track, w) in tracks.iter().zip(cols.iter().map(|col|col.0))=>{ let header = row!((track, w) in tracks.iter().zip(cols.iter().map(|col|col.0))=>{
// name and width of track // name and width of track
let name = track.name.read().unwrap(); let name = track.name.read().unwrap();
let max_w = w.saturating_sub(1).min(name.len()).max(2); let player = &track.player;
let name = format!("{}", &name[0..max_w]); let max_w = w.saturating_sub(1).min(name.len()).max(2);
let name = TuiStyle::bold(name, true); let name = format!("{}", &name[0..max_w]);
let name = TuiStyle::bold(name, true);
// name of active MIDI input // name of active MIDI input
let input = format!("▎>{}", track.player.midi_inputs.get(0) let input = format!("▎>{}", track.player.midi_inputs.get(0)
.map(|port|port.short_name()) .map(|port|port.short_name())
.transpose()? .transpose()?
.unwrap_or("(none)".into())); .unwrap_or("(none)".into()));
col!(name, input)
.min_xy(w as u16, track_title_h)
.bg(track.color.rgb)
.push_x(scene_title_w)
});
// track controls
let footer = row!((track, w) in tracks.iter().zip(cols.iter().map(|col|col.0))=>{
let player = &track.player;
// beats elapsed // beats elapsed
let elapsed = if let Some((_, Some(phrase))) = player.phrase.as_ref() { let elapsed = if let Some((_, Some(phrase))) = player.phrase.as_ref() {
let length = phrase.read().unwrap().length; let length = phrase.read().unwrap().length;
@ -218,8 +210,8 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
.map(|port|port.short_name()) .map(|port|port.short_name())
.transpose()? .transpose()?
.unwrap_or("(none)".into())); .unwrap_or("(none)".into()));
col!(until_next, elapsed, output) col!(name, input, output, until_next, elapsed)
.min_xy(w as u16, tracks_footer) .min_xy(w as u16, track_title_h)
.bg(track.color.rgb) .bg(track.color.rgb)
.push_x(scene_title_w) .push_x(scene_title_w)
}); });
@ -267,9 +259,9 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
}) })
}).fixed_y(height) }).fixed_y(height)
} }
).fixed_y((self.0.size.h() as u16).saturating_sub(track_title_h + tracks_footer)); ).fixed_y((self.0.size.h() as u16).saturating_sub(track_title_h));
// full grid with header and footer // full grid with header and footer
add(&col!(header, content, footer))?; add(&col!(header, content))?;
// cursor // cursor
add(&CustomWidget::new(any_size, move|to: &mut TuiOutput|{ add(&CustomWidget::new(any_size, move|to: &mut TuiOutput|{
let area = to.area(); let area = to.area();