mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-13 07:06:41 +01:00
130 lines
5.2 KiB
Rust
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);
|
|
//}
|
|
//}
|