restruct: 65e

This commit is contained in:
i do not exist 2026-06-23 22:02:09 +03:00
parent ae347eeef7
commit b3e9cde8a1
4 changed files with 38 additions and 49 deletions

View file

@ -202,28 +202,28 @@ pub fn view_io_ports <'a, T: PortsSizes<'a>> (
}) })
} }
pub fn view_scenes_clips ( pub fn view_scenes_clips <'a> (
scenes: impl ScenesSizes<'_>, scenes: impl ScenesSizes<'a>,
tracks: impl TracksSizes<'_>, tracks: impl TracksSizes<'a>,
select: &Selection, select: &Selection,
editor: Option<&MidiEditor>, editor: Option<&MidiEditor>,
size: &Size, size: &Size,
is_editing: bool, is_editing: bool,
) -> impl Draw<Tui> { ) -> impl Draw<Tui> {
size.of(wh_full(above(wh_full(origin_se(fg(Green, format!("{}x{}", size.w(), size.h())))), size.of(wh_full(above(wh_full(origin_se(fg(Green, format!("{}x{}", size.w(), size.h())))),
thunk(|to: &mut Tui|{ thunk(move |to: &mut Tui|{
for (index, track, _, _) in tracks { for (index, track, _, _) in tracks {
let clips = view_track_clips(scenes, select, editor, index, track, is_editing); let clips = view_track_clips(&scenes, select, editor, index, track, is_editing);
w_exact(track.width as u16, h_full(clips)).draw(to); w_exact(track.width as u16, h_full(clips)).draw(to);
} }
Ok(XYWH(0, 0, 0, 0)) Ok(XYWH(0, 0, 0, 0))
})))) }))))
} }
pub fn view_track_clips ( pub fn view_track_clips <'a> (
scenes: impl ScenesSizes<'_>, scenes: &impl ScenesSizes<'a>,
select: &Selection, select: &Selection,
editor: &Option<MidiEditor>, editor: Option<&MidiEditor>,
index: usize, index: usize,
track: &Track, track: &Track,
is_editing: bool, is_editing: bool,
@ -320,7 +320,7 @@ pub fn view_track_names (
pub fn view_track_outputs ( pub fn view_track_outputs (
theme: ItemTheme, theme: ItemTheme,
tracks: impl TracksSizes<'_>, tracks: impl TracksSizes<'_>,
midi_outs: impl Iterator<Item = ()>, midi_outs: impl Iterator<Item = &MidiOutput>,
) -> impl Draw<Tui> { ) -> impl Draw<Tui> {
view_track_row_section(theme, view_track_row_section(theme,
south(w_full(origin_w(button_2("o", "utput", false))), south(w_full(origin_w(button_2("o", "utput", false))),
@ -345,14 +345,14 @@ pub fn view_track_outputs (
} }
pub fn view_track_inputs ( pub fn view_track_inputs (
theme: ItemTheme, theme: ItemTheme,
tracks: impl TracksSizes<'_>, tracks: impl TracksSizes<'_>,
h: u16, height: u16,
) -> impl Draw<Tui> { ) -> impl Draw<Tui> {
view_track_row_section(theme, button_2("i", "nput", false), button_2("I", "+", false), view_track_row_section(theme, button_2("i", "nput", false), button_2("I", "+", false),
bg(theme.darker.term, origin_w(thunk(move|to: &mut Tui|{ bg(theme.darker.term, origin_w(thunk(move|to: &mut Tui|{
for (index, track, _x1, _x2) in tracks { for (index, track, _x1, _x2) in tracks {
wh_exact(Some(track_width(index, track)), Some(h + 1), wh_exact(Some(track_width(index, track)), Some(height + 1),
origin_nw(south( origin_nw(south(
bg(track.color.base.term, bg(track.color.base.term,
w_full(origin_w(east!( w_full(origin_w(east!(
@ -370,18 +370,21 @@ pub fn view_track_inputs (
} }
pub fn view_scenes_names ( pub fn view_scenes_names (
scenes: &impl ScenesSizes<'_> scenes: impl ScenesSizes<'_>,
select: &Selection,
editor: Option<&MidiEditor>,
editing: bool,
) -> impl Draw<Tui> { ) -> impl Draw<Tui> {
w_exact(20, thunk(|to: &mut Tui|{ w_exact(20, thunk(move |to: &mut Tui|{
for (index, scene, ..) in scenes { for (index, scene, ..) in scenes {
view_scene_name(index, scene).draw(to); view_scene_name(select, editor, index, scene, editing).draw(to);
} }
Ok(XYWH(1, 1, 1, 1)) Ok(XYWH(1, 1, 1, 1))
})) }))
} }
pub fn view_scene_name ( pub fn view_scene_name (
select: Option<&Selection>, select: &Selection,
editor: Option<&MidiEditor>, editor: Option<&MidiEditor>,
index: usize, index: usize,
scene: &Scene, scene: &Scene,
@ -422,8 +425,9 @@ pub fn view_audio_outs_status (theme: ItemTheme, track: Option<&Track>) -> impl
track.map(move|track|view_ports_status(theme, "Audio outs:", &track.audio_outs())) track.map(move|track|view_ports_status(theme, "Audio outs:", &track.audio_outs()))
} }
pub fn view_track_per ( pub fn view_track_per <'a, T: Draw<Tui> + 'a, U: TracksSizes<'a>> (
tracks: impl TracksSizes<'_> tracks: impl Fn() -> U + Send + Sync + 'a,
callback: impl Fn(usize, &'a Track)->T + Send + Sync + 'a
) -> impl Draw<Tui> { ) -> impl Draw<Tui> {
iter_east(tracks, move|(index, track, x1, x2): (usize, &Track, usize, usize), _|{ iter_east(tracks, move|(index, track, x1, x2): (usize, &Track, usize, usize), _|{
w_exact((x2 - x1) as u16, fg_bg( w_exact((x2 - x1) as u16, fg_bg(
@ -437,12 +441,9 @@ pub fn view_per_track () -> impl Draw<Tui> {}
pub fn view_per_track_top () -> impl Draw<Tui> {} pub fn view_per_track_top () -> impl Draw<Tui> {}
pub fn view_inputs ( pub fn view_inputs (tracks: impl TracksSizes<'_>, midi_ins: &[MidiInput]) -> impl Draw<Tui> {
tracks: impl TracksSizes<'_>, let header = h_exact(1, view_inputs_header(tracks, midi_ins));
midi_ins: &[MidiIn], south(header, thunk(move |to: &mut Tui|{
) -> impl Draw<Tui> {
let header = h_exact(1, view_inputs_header(tracks));
south(header, thunk(|to: &mut Tui|{
for (index, port) in midi_ins.iter().enumerate() { for (index, port) in midi_ins.iter().enumerate() {
x_push(index as u16 * 10, h_exact(1, view_inputs_row(tracks, port))).draw(to); x_push(index as u16 * 10, h_exact(1, view_inputs_row(tracks, port))).draw(to);
} }
@ -450,10 +451,7 @@ pub fn view_inputs (
})) }))
} }
pub fn view_inputs_header ( pub fn view_inputs_header (tracks: impl TracksSizes<'_>, midi_ins: &[MidiInput]) -> impl Draw<Tui> {
tracks: impl TracksSizes<'_>,
midi_ins: &[MidiIn],
) -> impl Draw<Tui> {
east(w_exact(20, origin_w(button_3("i", "nput ", format!("{}", midi_ins.len()), false))), east(w_exact(20, origin_w(button_3("i", "nput ", format!("{}", midi_ins.len()), false))),
west(w_exact(4, button_2("I", "+", false)), thunk(move|to: &mut Tui|{ west(w_exact(4, button_2("I", "+", false)), thunk(move|to: &mut Tui|{
for (_index, track, x1, _x2) in tracks { for (_index, track, x1, _x2) in tracks {
@ -468,10 +466,7 @@ pub fn view_inputs_header (
}))) })))
} }
pub fn view_inputs_row ( pub fn view_inputs_row (tracks: impl TracksSizes<'_>, port: &MidiInput) -> impl Draw<Tui> {
tracks: impl TracksSizes<'_>,
port: ()
) -> impl Draw<Tui> {
east(w_exact(20, origin_w(east("", bold(true, fg(Rgb(255,255,255), port.port_name()))))), east(w_exact(20, origin_w(east("", bold(true, fg(Rgb(255,255,255), port.port_name()))))),
west(w_exact(4, ()), thunk(move|to: &mut Tui|{ west(w_exact(4, ()), thunk(move|to: &mut Tui|{
for (_index, track, _x1, _x2) in tracks { for (_index, track, _x1, _x2) in tracks {

View file

@ -27,13 +27,12 @@ pub trait ClipsView: TracksView + ScenesView {
/// Draw clips per scene /// Draw clips per scene
fn view_scenes_clips <'a> (&'a self) -> impl Draw<Tui> + 'a { fn view_scenes_clips <'a> (&'a self) -> impl Draw<Tui> + 'a {
crate::view::view_scenes_clips( crate::view::view_scenes_clips(
self.tracks_with_sizes(), self.clips_size() self.scenes_with_sizes(),
) self.tracks_with_sizes(),
} self.selection(),
/// Draw clips for tracks self.editor(),
fn view_track_clips <'a> (&'a self, track_index: usize, track: &'a Track) -> impl Draw<Tui> + 'a { self.clips_size(),
crate::view::view_track_clips( self.is_editing(),
self.scenes_with_sizes(), self.selection(), self.editor(), track_index, track
) )
} }
} }

View file

@ -61,12 +61,7 @@ pub trait ScenesView: HasEditor + HasSelection + HasSceneScroll + HasClipsSize +
fn view_scenes_names (&self) -> impl Draw<Tui> { fn view_scenes_names (&self) -> impl Draw<Tui> {
crate::view::view_scenes_names( crate::view::view_scenes_names(
self.scenes_with_sizes() self.scenes_with_sizes(), self.selection(), self.editor(), self.is_editing()
)
}
fn view_scene_name <'a> (&'a self, index: usize, scene: &'a Scene) -> impl Draw<Tui> + 'a {
crate::view::view_scene_name(
self.selected(), self.editor(), index, scene
) )
} }
fn scenes_with_sizes (&self) -> impl ScenesSizes<'_> { fn scenes_with_sizes (&self) -> impl ScenesSizes<'_> {

View file

@ -53,7 +53,7 @@ impl Track {
tracks: impl Fn() -> U + Send + Sync + 'a, tracks: impl Fn() -> U + Send + Sync + 'a,
callback: impl Fn(usize, &'a Track)->T + Send + Sync + 'a callback: impl Fn(usize, &'a Track)->T + Send + Sync + 'a
) -> impl Draw<Tui> + 'a { ) -> impl Draw<Tui> + 'a {
per(tracks, callback) view_track_per(tracks, callback)
} }
/// Create a new track connecting the [Sequencer] to a [Sampler]. /// Create a new track connecting the [Sequencer] to a [Sampler].
@ -180,7 +180,7 @@ pub trait TracksView: ScenesView + HasMidiIns + HasMidiOuts + HasTrackScroll {
/// Draw name of each track /// Draw name of each track
fn view_track_names (&self, theme: ItemTheme) -> impl Draw<Tui> { fn view_track_names (&self, theme: ItemTheme) -> impl Draw<Tui> {
crate::view::view_track_names( crate::view::view_track_names(
self.tracks_with_sizes(), self.tracks().len(), self.scenes().len(), self.selection() theme, self.tracks_with_sizes(), self.tracks().len(), self.scenes().len(), self.selection()
) )
} }
/// Draw outputs per track /// Draw outputs per track
@ -251,12 +251,12 @@ impl_as_mut_opt!(Track: |self: Arrangement| self.selected_track_mut());
impl Arrangement { impl Arrangement {
#[cfg(feature = "track")] #[cfg(feature = "track")]
pub fn view_inputs (&self, _theme: ItemTheme) -> impl Draw<Tui> + '_ { pub fn view_inputs (&self, _theme: ItemTheme) -> impl Draw<Tui> + '_ {
crate::view::view_inputs() crate::view::view_inputs(self.tracks_with_sizes(), self.midi_ins().as_slice())
} }
#[cfg(feature = "track")] #[cfg(feature = "track")]
pub fn view_inputs_header (&self) -> impl Draw<Tui> + '_ { pub fn view_inputs_header (&self) -> impl Draw<Tui> + '_ {
crate::view::view_inputs_header(self.tracks_with_sizes()) crate::view::view_inputs_header(self.tracks_with_sizes(), self.midi_ins().as_slice())
} }
#[cfg(feature = "track")] #[cfg(feature = "track")]