mirror of
https://codeberg.org/unspeaker/tek.git
synced 2026-10-08 18:56:42 +02:00
modularize grid view
This commit is contained in:
parent
922c2e1f2f
commit
5a34025277
4 changed files with 173 additions and 104 deletions
175
src/track.rs
175
src/track.rs
|
|
@ -369,34 +369,42 @@ pub trait TracksView: HasTracks + ScenesView + HasMidiIns + HasMidiOuts + HasTra
|
|||
|
||||
/// Draw name of each track
|
||||
fn view_track_names (&self, theme: ItemTheme) -> impl Draw<Tui> {
|
||||
let btn1t = self.view_track_count();
|
||||
let btn1s = self.view_scene_count();
|
||||
let btns1 = south(btn1t, btn1s);
|
||||
let btns2 = south(self.view_track_add(), self.view_scene_add());
|
||||
view_track_row_section(theme,
|
||||
btns1,
|
||||
btns2,
|
||||
bg(theme.darker.term,
|
||||
iter_east(||self.tracks_with_sizes().map(|(index, track, _x1, _x2)|{
|
||||
let b = if self.selection().track() == Some(index) {
|
||||
track.color.light.term
|
||||
} else {
|
||||
track.color.base.term
|
||||
};
|
||||
bg(b, south(
|
||||
east!(
|
||||
"·t",
|
||||
index,
|
||||
" ",
|
||||
fg(Rgb(255, 255, 255), bold(true, &track.name))
|
||||
)
|
||||
.align_nw()
|
||||
.full_w(),
|
||||
""
|
||||
))
|
||||
.exact_w(track_width(index, track))
|
||||
.exact_h(2)
|
||||
}))))
|
||||
self.view_track_names_count(),
|
||||
self.view_track_names_add(),
|
||||
self.view_track_names_cells()
|
||||
)
|
||||
}
|
||||
|
||||
fn view_track_names_add (&self) -> impl Draw<Tui> {
|
||||
south(self.view_track_add(), self.view_scene_add())
|
||||
}
|
||||
|
||||
fn view_track_names_count (&self) -> impl Draw<Tui> {
|
||||
south(self.view_track_count(), self.view_scene_count())
|
||||
}
|
||||
|
||||
fn view_track_names_cells <'a> (&'a self) -> impl Draw<Tui> {
|
||||
iter_east(||self.tracks_with_sizes().map(|(index, track, _x1, _x2)|{
|
||||
let b = if self.selection().track() == Some(index) {
|
||||
track.color.light.term
|
||||
} else {
|
||||
track.color.base.term
|
||||
};
|
||||
bg(b, south(
|
||||
east!(
|
||||
"·t",
|
||||
index,
|
||||
" ",
|
||||
fg(Rgb(255, 255, 255), bold(true, &track.name))
|
||||
)
|
||||
.align_nw()
|
||||
.full_w(),
|
||||
""
|
||||
))
|
||||
.exact_w(track_width(index, track))
|
||||
.exact_h(2)
|
||||
}))
|
||||
}
|
||||
|
||||
/// Draw outputs per track
|
||||
|
|
@ -404,52 +412,36 @@ pub trait TracksView: HasTracks + ScenesView + HasMidiIns + HasMidiOuts + HasTra
|
|||
view_track_row_section(theme,
|
||||
self.view_track_output_count(),
|
||||
self.view_track_output_add(),
|
||||
bg(theme.darker.term,
|
||||
iter_east(move||self.tracks_with_sizes().map(move|(index, track, _x1, _x2)|{
|
||||
let f = Rgb(255, 255, 255);
|
||||
let b = track.color.dark.term;
|
||||
iter_south(move||track.sequencer.midi_outs.iter().map(move|port: &MidiOutput|{
|
||||
fg(f, bg(b, east!("·o", index, " ", port.port_name()).full_w().align_w()).exact_h(1))
|
||||
}))
|
||||
.full_h()
|
||||
.align_nw()
|
||||
.exact_w(track_width(index, track))
|
||||
}))))
|
||||
self.view_track_output_cells()
|
||||
)
|
||||
}
|
||||
|
||||
/// Draw inputs per track
|
||||
fn view_track_inputs <'a> (&'a self, theme: ItemTheme) -> impl Draw<Tui> {
|
||||
let mut height = 0u16;
|
||||
for track in self.tracks().iter() {
|
||||
height = height.max(track.sequencer.midi_ins.len() as u16);
|
||||
}
|
||||
view_track_row_section(theme,
|
||||
self.view_track_input_count(),
|
||||
self.view_track_input_add(),
|
||||
bg(theme.darker.term, iter_east(move||self
|
||||
.tracks_with_sizes()
|
||||
.map(move|(index, track, _x1, _x2)|{
|
||||
south(
|
||||
bg(track.color.base.term,
|
||||
east!(
|
||||
either(track.sequencer.monitoring, fg(Green, "●mon "), "·mon "),
|
||||
either(track.sequencer.recording, fg(Red, "●rec "), "·rec "),
|
||||
either(track.sequencer.overdub, fg(Yellow, "●dub "), "·dub "),
|
||||
).align_w().full_w()),
|
||||
iter_south(move||track.sequencer.midi_ins.iter().map(move|port|fg_bg(
|
||||
Rgb(255, 255, 255),
|
||||
track.color.dark.term,
|
||||
east!("·i", index, " ", port.port_name()).align_w().full_w()))))
|
||||
.align_nw()
|
||||
.exact_wh(track_width(index, track), height + 1)
|
||||
}))).align_w())
|
||||
fn view_track_output_cells <'a> (&'a self) -> impl Draw<Tui> {
|
||||
iter_east(move||self.tracks_with_sizes().map(move|(index, track, _x1, _x2)|{
|
||||
let f = Rgb(255, 255, 255);
|
||||
let b = track.color.dark.term;
|
||||
iter_south(move||track.sequencer.midi_outs.iter().map(move|port: &MidiOutput|{
|
||||
fg(f, bg(b, east!("·o", index, " ", port.port_name()).full_w().align_w()).exact_h(1))
|
||||
}))
|
||||
.full_h()
|
||||
.align_nw()
|
||||
.exact_w(track_width(index, track))
|
||||
}))
|
||||
}
|
||||
|
||||
fn view_track_device_count (&self) -> impl Draw<Tui> {
|
||||
button_3("d", "evice", self.track().map(|t|t.devices.len()).unwrap_or(0), false).min_h(2)
|
||||
}
|
||||
|
||||
fn view_track_devices (&self, theme: ItemTheme) -> impl Draw<Tui> {
|
||||
let height = self.tracks_devices_height();
|
||||
let btn1 = button_3("d", "evice", self.track().map(|t|t.devices.len()).unwrap_or(0), false).min_h(2);
|
||||
let btn1 = self.view_track_device_count();
|
||||
let btn2 = self.view_track_device_add();
|
||||
view_track_row_section(theme, btn1, btn2, iter_east(move||self.tracks_with_sizes()
|
||||
view_track_row_section(theme, btn1, btn2, self.view_track_device_cells(height))
|
||||
}
|
||||
|
||||
fn view_track_device_cells (&self, height: u16) -> impl Draw<Tui> {
|
||||
iter_east(move||self.tracks_with_sizes()
|
||||
.enumerate()
|
||||
.map(move|(index, (_, track, _x1, _x2))|bg(
|
||||
track.color.dark.term,
|
||||
|
|
@ -463,7 +455,7 @@ pub trait TracksView: HasTracks + ScenesView + HasMidiIns + HasMidiOuts + HasTra
|
|||
.exact_wh(
|
||||
Some(track_width(index, track)),
|
||||
Some(height + 1),
|
||||
))))
|
||||
)))
|
||||
}
|
||||
|
||||
fn tracks_devices_height (&self) -> u16 {
|
||||
|
|
@ -474,10 +466,51 @@ pub trait TracksView: HasTracks + ScenesView + HasMidiIns + HasMidiOuts + HasTra
|
|||
h as u16
|
||||
}
|
||||
|
||||
fn view_inputs (&self, _theme: ItemTheme) -> impl Draw<Tui> + '_ {
|
||||
fn view_inputs (&self) -> impl Draw<Tui> + '_ {
|
||||
let title_1 = button_3("i", "nput ", self.midi_ins().len(), false).align_w().exact_wh(20, 1);
|
||||
let title_2 = self.view_track_input_add().exact_wh(4, 1);
|
||||
east(title_1, west(title_2, draw(move|to: &mut Tui|{
|
||||
east(title_1, west(title_2, self.view_input_cells()))
|
||||
}
|
||||
|
||||
fn tracks_inputs_height (&self) -> u16 {
|
||||
let mut height = 0u16;
|
||||
for track in self.tracks().iter() {
|
||||
height = height.max(track.sequencer.midi_ins.len() as u16);
|
||||
}
|
||||
height
|
||||
}
|
||||
|
||||
/// Draw inputs per track
|
||||
fn view_track_inputs <'a> (&'a self, theme: ItemTheme) -> impl Draw<Tui> {
|
||||
view_track_row_section(theme,
|
||||
self.view_track_input_count(),
|
||||
self.view_track_input_add(),
|
||||
self.view_track_input_cells(self.tracks_inputs_height())
|
||||
)
|
||||
}
|
||||
|
||||
fn view_track_input_cells (&self, height: u16) -> impl Draw<Tui> {
|
||||
iter_east(move||self
|
||||
.tracks_with_sizes()
|
||||
.map(move|(index, track, _x1, _x2)|{
|
||||
south(
|
||||
bg(track.color.base.term,
|
||||
east!(
|
||||
either(track.sequencer.monitoring, fg(Green, "●mon "), "·mon "),
|
||||
either(track.sequencer.recording, fg(Red, "●rec "), "·rec "),
|
||||
either(track.sequencer.overdub, fg(Yellow, "●dub "), "·dub "),
|
||||
).align_w().full_w()),
|
||||
iter_south(move||track.sequencer.midi_ins.iter().map(move|port|fg_bg(
|
||||
Rgb(255, 255, 255),
|
||||
track.color.dark.term,
|
||||
east!("·i", index, " ", port.port_name()).align_w().full_w()))))
|
||||
.align_nw()
|
||||
.exact_wh(track_width(index, track), height + 1)
|
||||
})).align_w()
|
||||
}
|
||||
|
||||
fn view_input_cells (&self) -> impl Draw<Tui> {
|
||||
draw(move|to: &mut Tui|{
|
||||
for (_index, track, x1, _x2) in self.tracks_with_sizes() {
|
||||
let _ = south(
|
||||
bg(track.color.dark.term, east!(
|
||||
|
|
@ -502,12 +535,12 @@ pub trait TracksView: HasTracks + ScenesView + HasMidiIns + HasMidiOuts + HasTra
|
|||
)
|
||||
).push_x(index as u16 * 10).exact_h(1).draw(to)?;
|
||||
}
|
||||
todo!()
|
||||
Ok(None)
|
||||
})
|
||||
).draw(to)?;
|
||||
}
|
||||
Ok(Some(to.area()))
|
||||
})))
|
||||
})
|
||||
}
|
||||
|
||||
fn outputs_height (&self) -> u16 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue