use crate::*; impl Tek { /// Render the arranger. pub fn view_arranger (&self) -> impl Content + use<'_> { let w = self.w(); let w_m = self.w_tracks_area(); let w_s = self.w_sidebar(); let h_trks = self.h_tracks_area(); let h_outs = self.h_outputs().saturating_sub(1); let h_ins = self.h_inputs().saturating_sub(1); let h_scn = self.h_scenes(); let n_outs = self.midi_outs.len(); let n_ins = self.midi_ins.len(); let ins_szs = ||self.inputs_sizes(); let outs_szs = ||self.outputs_sizes(); let editing = self.is_editing(); let scn_scr = self.view_scene_scroll(); let scn_sel = self.selected().scene(); let scn_last = self.scenes.len().saturating_sub(1); let scns_clrs = move||self.scenes_with_colors(editing, h_trks); let trk_scr = self.view_track_scroll(); let trks_szs = ||self.tracks_sizes_scrolled(); let trk_sel = self.selected().track(); let scns_trk_clrs = move||self.scenes_with_track_colors( editing, self.h_tracks_area(), trk_sel.unwrap_or(0) ); let trk_cnt_data = (trk_sel.unwrap_or(0), self.tracks().len()); self.fmtd.write().unwrap().trks.update( Some(trk_cnt_data), rewrite!(buf, "{}/{}", trk_cnt_data.0, trk_cnt_data.1) ); Bsp::s(view_inputs( w_m, w_s, h_ins, n_ins, trks_szs, ins_szs, trk_sel, editing ), Bsp::s(view_tracks( w_m, w_s, &self.fmtd.read().unwrap().trks.view, trks_szs, trk_sel, editing ), Bsp::n(view_outputs( w_m, w_s, h_outs, n_outs, trks_szs, outs_szs, trk_sel, editing ), view_scenes( w, w_m, w_s, h_scn, trk_scr, trks_szs, trk_sel, scn_scr, scns_clrs, scns_trk_clrs, scn_last, scn_sel, &self.editor, editing )))) } pub(crate) fn view_scene_scroll (&self) -> impl Content { Fill::y(Fixed::x(1, ScrollbarV { offset: self.scene_scroll, length: self.h_tracks_area() as usize, total: self.h_scenes() as usize, })) } pub(crate) fn view_track_scroll (&self) -> impl Content { Fill::y(Fixed::x(1, ScrollbarV { offset: self.scene_scroll, length: self.h_tracks_area() as usize, total: self.h_scenes() as usize, })) } } pub(crate) fn io_ports <'a, T: PortsSizes<'a>> ( fg: Color, bg: Color, iter: impl Fn()->T + Send + Sync + 'a ) -> impl Content + 'a { Map::new(iter, move|(index, name, connections, y, y2), _|map_south(y as u16, (y2-y) as u16, Bsp::s( Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(Bsp::e(" 󰣲 ", name))))), Map::new(||connections.iter(), move|connect, index|map_south(index as u16, 1, Fill::x(Align::w(Tui::bold(false, Tui::fg_bg(fg, bg, &connect.info))))))))) } pub(crate) fn io_conns <'a, T: PortsSizes<'a>> ( fg: Color, bg: Color, iter: impl Fn()->T + Send + Sync + 'a ) -> impl Content + 'a { Map::new(iter, move|(index, name, connections, y, y2), _|map_south(y as u16, (y2-y) as u16, Bsp::s( Fill::x(Tui::bold(true, wrap(bg, fg, Fill::x(Align::w("▞▞▞▞ ▞▞▞▞"))))), Map::new(||connections.iter(), move|connect, index|map_south(index as u16, 1, Fill::x(Align::w(Tui::bold(false, wrap(bg, fg, Fill::x("")))))))))) } //#[cfg(test)] mod test { //use super::*; //#[test] fn test_view_arranger () { //let mut output = TuiOut::default(); //output.area[2] = 9; //output.area[3] = 9; //let mut app = Tek::default(); //app.editor = Some(Default::default()); //app.scenes_add(5); //app.tracks_add(5, Some(5), &[], &[]); //Content::render(&io_ports(Reset, Reset, ||app.inputs_sizes()), &mut output); //Content::render(&io_conns(Reset, Reset, ||app.outputs_sizes()), &mut output); //Content::render(&app.per_track(|_, _|()), &mut output); //Content::render(&app.per_track_top(|_, _|()), &mut output); //Content::render(&app.view_arranger(), &mut output); //Content::render(&app.view_inputs(), &mut output); //Content::render(&app.view_outputs(), &mut output); //Content::render(&app.view_scenes(), &mut output); //Content::render( //&app.view_scene_name(0, 0, 0, 0, &Default::default(), None), //&mut output); //Content::render( //&app.view_scene_clip(0, 0, 0, &{ //let mut scene: Scene = Default::default(); //scene.clips.push(Some(Default::default())); //scene //}, None, 0, 0, false, false, None), //&mut output); //Content::render(&view_scene_cell( //false, //None, //false, //0, //&Default::default(), //None, //None, //&"", //Default::default(), //), &mut output); //} //}