diff --git a/app/src/view/view_arranger.rs b/app/src/view/view_arranger.rs index 7f4c22ba..2c3bd602 100644 --- a/app/src/view/view_arranger.rs +++ b/app/src/view/view_arranger.rs @@ -1,12 +1,6 @@ use crate::*; impl Tek { - pub fn view_arranger (&self) -> impl Content + use<'_> { - Bsp::s(self.view_inputs(), - Bsp::s(self.view_tracks(), - Bsp::n(self.view_outputs(), - self.view_scenes()))) - } // FIXME: The memoized arranger is too complex. // Just render a slice of the arranger for now, @@ -48,16 +42,24 @@ impl Tek { /// of the arranger buffer to blit in [view_arranger]. pub fn redraw_arranger (&self) { return; - let width = self.w_tracks(); - let height = self.h_scenes() + self.h_inputs() + self.h_outputs(); - let buffer = Buffer::empty(ratatui::prelude::Rect { x: 0, y: 0, width, height }); - let mut output = TuiOut { buffer, area: [0, 0, width, height] }; - let layout = Bsp::s(self.view_inputs(), - Bsp::s(self.view_tracks(), - Bsp::n(self.view_outputs(), - self.view_scenes()))); - Content::render(&layout, &mut output); - *self.arranger.write().unwrap() = output.buffer; + //let width = self.w_tracks(); + //let height = self.h_scenes() + self.h_inputs() + self.h_outputs(); + //let buffer = Buffer::empty(ratatui::prelude::Rect { x: 0, y: 0, width, height }); + //let mut output = TuiOut { buffer, area: [0, 0, width, height] }; + //let layout = Bsp::s(self.view_inputs(), + //Bsp::s(self.view_tracks(), + //Bsp::n(self.view_outputs(), + //self.view_scenes()))); + //Content::render(&layout, &mut output); + //*self.arranger.write().unwrap() = output.buffer; + } + + pub fn view_arranger (&self) -> impl Content + use<'_> { + let ins = self.view_inputs(); + let trs = self.view_tracks(); + let out = self.view_outputs(); + let scn = self.view_scenes(); + Bsp::s(ins, Bsp::s(trs, Bsp::n(out, scn))) } pub fn view_tracks (&self) -> impl Content + use<'_> { @@ -72,14 +74,14 @@ impl Tek { } pub fn view_scenes (&self) -> impl Content + use<'_> { - let editing = self.is_editing(); - let s = self.w_sidebar() as u16; - let w = self.w_tracks_area(); - let w_full = self.w(); - let h = self.h_scenes(); - let h_area = self.h_tracks_area(); - let selected_track = self.selected().track(); - let selected_scene = self.selected().scene(); + let editing = self.is_editing(); + let s = self.w_sidebar() as u16; + let w = self.w_tracks_area(); + let w_full = self.w(); + let h = self.h_scenes(); + let h_area = self.h_tracks_area(); + let st = self.selected().track(); + let ss = self.selected().scene(); let track_scroll = { let offset = self.track_scroll; let length = self.w_tracks_area() as usize; @@ -95,36 +97,25 @@ impl Tek { Tui::bg(Reset, Bsp::s(track_scroll, Bsp::e(scene_scroll, Fixed::y(h_area, row(w, h, s, Map::new( move||self.scenes_with_colors(editing, h_area), - move|(s, scene, y1, y2, prev): SceneWithColor, _|self.view_scene_name( - w_full, (1 + y2 - y1) as u16, y1 as u16, s, scene, prev)), + move|(s, scene, y1, y2, prev): SceneWithColor, _|view_scene_name( + w_full, + (1 + y2 - y1) as u16, + y1 as u16, + s, + scene, + prev, + s == self.scenes.len().saturating_sub(1), + self.selected().scene(), + ) + ), self.per_track(move|t, track|Map::new( move||self.scenes_with_track_colors(editing, h_area, t), move|(s, scene, y1, y2, prev): SceneWithColor, _|self.view_scene_clip( w, (1 + y2 - y1) as u16, y1 as u16, - scene, prev, s, t, editing, selected_track == Some(t), selected_scene))), - () ))))) - } - - fn view_scene_name ( - &self, - width: u16, - height: u16, - offset: u16, - index: usize, - scene: &Scene, - prev: Option, - ) -> impl Content + use<'_> { - Fill::x(map_south(offset, height, Fixed::y(height, scene_cell( - index == self.scenes.len().saturating_sub(1), - self.selected().scene(), - true, - index, - &scene.color, - prev, - Some(scene.name.clone()), - " ⯈ ", - scene.color.lightest.rgb - )))) + scene, prev, s, t, editing, st == Some(t), ss) + )), + () + ))))) } fn view_scene_clip ( @@ -252,6 +243,29 @@ impl Tek { } +fn view_scene_name ( + width: u16, + height: u16, + offset: u16, + index: usize, + scene: &Scene, + prev: Option, + last: bool, + selected: Option, +) -> impl Content { + Fill::x(map_south(offset, height, Fixed::y(height, scene_cell( + last, + selected, + true, + index, + &scene.color, + prev, + Some(scene.name.clone()), + " ⯈ ", + scene.color.lightest.rgb + )))) +} + fn view_inputs <'a, T, U, V, W> ( w: u16, s: u16, @@ -266,11 +280,8 @@ fn view_inputs <'a, T, U, V, W> ( W: Content, { let headers = Bsp::s(Align::e("Input:"), Align::e("Into:")); - let separators = per_track_top( - w_tracks_area, - tracks_sizes, - |_, _|Tui::bg(Reset, Align::c(Bsp::s( OctaveVertical::default(), " ------ "))) - ); + let sep = |_, _|Tui::bg(Reset, Align::c(Bsp::s(OctaveVertical::default(), " ------ "))); + let separators = per_track_top(w_tracks_area, tracks_sizes, sep); Bsp::s(Bsp::s(routes, ports), row_top(w, 2, s, headers, separators, ())) }