tek/app/src/view/view_arranger.rs

130 lines
5.2 KiB
Rust

use crate::*;
impl Tek {
/// Render the arranger.
pub fn view_arranger (&self) -> impl Content<TuiOut> + 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<TuiOut> {
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<TuiOut> {
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<TuiOut> + '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<TuiOut> + '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);
//}
//}