From b3e9cde8a1e210151fbcde2cbb1042cd72949ef4 Mon Sep 17 00:00:00 2001 From: i do not exist Date: Tue, 23 Jun 2026 22:02:09 +0300 Subject: [PATCH] restruct: 65e --- src/app/view.rs | 59 +++++++++++++++++-------------------- src/device/arrange/clip.rs | 13 ++++---- src/device/arrange/scene.rs | 7 +---- src/device/arrange/track.rs | 8 ++--- 4 files changed, 38 insertions(+), 49 deletions(-) diff --git a/src/app/view.rs b/src/app/view.rs index f5e2852e..21699419 100644 --- a/src/app/view.rs +++ b/src/app/view.rs @@ -202,28 +202,28 @@ pub fn view_io_ports <'a, T: PortsSizes<'a>> ( }) } -pub fn view_scenes_clips ( - scenes: impl ScenesSizes<'_>, - tracks: impl TracksSizes<'_>, +pub fn view_scenes_clips <'a> ( + scenes: impl ScenesSizes<'a>, + tracks: impl TracksSizes<'a>, select: &Selection, editor: Option<&MidiEditor>, size: &Size, is_editing: bool, ) -> impl Draw { 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 { - 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); } Ok(XYWH(0, 0, 0, 0)) })))) } -pub fn view_track_clips ( - scenes: impl ScenesSizes<'_>, +pub fn view_track_clips <'a> ( + scenes: &impl ScenesSizes<'a>, select: &Selection, - editor: &Option, + editor: Option<&MidiEditor>, index: usize, track: &Track, is_editing: bool, @@ -320,7 +320,7 @@ pub fn view_track_names ( pub fn view_track_outputs ( theme: ItemTheme, tracks: impl TracksSizes<'_>, - midi_outs: impl Iterator, + midi_outs: impl Iterator, ) -> impl Draw { view_track_row_section(theme, south(w_full(origin_w(button_2("o", "utput", false))), @@ -345,14 +345,14 @@ pub fn view_track_outputs ( } pub fn view_track_inputs ( - theme: ItemTheme, + theme: ItemTheme, tracks: impl TracksSizes<'_>, - h: u16, + height: u16, ) -> impl Draw { 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|{ 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( bg(track.color.base.term, w_full(origin_w(east!( @@ -370,18 +370,21 @@ pub fn view_track_inputs ( } pub fn view_scenes_names ( - scenes: &impl ScenesSizes<'_> + scenes: impl ScenesSizes<'_>, + select: &Selection, + editor: Option<&MidiEditor>, + editing: bool, ) -> impl Draw { - w_exact(20, thunk(|to: &mut Tui|{ + w_exact(20, thunk(move |to: &mut Tui|{ 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)) })) } pub fn view_scene_name ( - select: Option<&Selection>, + select: &Selection, editor: Option<&MidiEditor>, index: usize, 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())) } -pub fn view_track_per ( - tracks: impl TracksSizes<'_> +pub fn view_track_per <'a, T: Draw + 'a, U: TracksSizes<'a>> ( + tracks: impl Fn() -> U + Send + Sync + 'a, + callback: impl Fn(usize, &'a Track)->T + Send + Sync + 'a ) -> impl Draw { iter_east(tracks, move|(index, track, x1, x2): (usize, &Track, usize, usize), _|{ w_exact((x2 - x1) as u16, fg_bg( @@ -437,12 +441,9 @@ pub fn view_per_track () -> impl Draw {} pub fn view_per_track_top () -> impl Draw {} -pub fn view_inputs ( - tracks: impl TracksSizes<'_>, - midi_ins: &[MidiIn], -) -> impl Draw { - let header = h_exact(1, view_inputs_header(tracks)); - south(header, thunk(|to: &mut Tui|{ +pub fn view_inputs (tracks: impl TracksSizes<'_>, midi_ins: &[MidiInput]) -> impl Draw { + let header = h_exact(1, view_inputs_header(tracks, midi_ins)); + south(header, thunk(move |to: &mut Tui|{ for (index, port) in midi_ins.iter().enumerate() { 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 ( - tracks: impl TracksSizes<'_>, - midi_ins: &[MidiIn], -) -> impl Draw { +pub fn view_inputs_header (tracks: impl TracksSizes<'_>, midi_ins: &[MidiInput]) -> impl Draw { 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|{ for (_index, track, x1, _x2) in tracks { @@ -468,10 +466,7 @@ pub fn view_inputs_header ( }))) } -pub fn view_inputs_row ( - tracks: impl TracksSizes<'_>, - port: () -) -> impl Draw { +pub fn view_inputs_row (tracks: impl TracksSizes<'_>, port: &MidiInput) -> impl Draw { 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|{ for (_index, track, _x1, _x2) in tracks { diff --git a/src/device/arrange/clip.rs b/src/device/arrange/clip.rs index c2b4cad0..4dc537c1 100644 --- a/src/device/arrange/clip.rs +++ b/src/device/arrange/clip.rs @@ -27,13 +27,12 @@ pub trait ClipsView: TracksView + ScenesView { /// Draw clips per scene fn view_scenes_clips <'a> (&'a self) -> impl Draw + 'a { crate::view::view_scenes_clips( - self.tracks_with_sizes(), self.clips_size() - ) - } - /// Draw clips for tracks - fn view_track_clips <'a> (&'a self, track_index: usize, track: &'a Track) -> impl Draw + 'a { - crate::view::view_track_clips( - self.scenes_with_sizes(), self.selection(), self.editor(), track_index, track + self.scenes_with_sizes(), + self.tracks_with_sizes(), + self.selection(), + self.editor(), + self.clips_size(), + self.is_editing(), ) } } diff --git a/src/device/arrange/scene.rs b/src/device/arrange/scene.rs index be16abfb..f2b15aa2 100644 --- a/src/device/arrange/scene.rs +++ b/src/device/arrange/scene.rs @@ -61,12 +61,7 @@ pub trait ScenesView: HasEditor + HasSelection + HasSceneScroll + HasClipsSize + fn view_scenes_names (&self) -> impl Draw { crate::view::view_scenes_names( - self.scenes_with_sizes() - ) - } - fn view_scene_name <'a> (&'a self, index: usize, scene: &'a Scene) -> impl Draw + 'a { - crate::view::view_scene_name( - self.selected(), self.editor(), index, scene + self.scenes_with_sizes(), self.selection(), self.editor(), self.is_editing() ) } fn scenes_with_sizes (&self) -> impl ScenesSizes<'_> { diff --git a/src/device/arrange/track.rs b/src/device/arrange/track.rs index e80a64f7..e35a4dd7 100644 --- a/src/device/arrange/track.rs +++ b/src/device/arrange/track.rs @@ -53,7 +53,7 @@ impl Track { tracks: impl Fn() -> U + Send + Sync + 'a, callback: impl Fn(usize, &'a Track)->T + Send + Sync + 'a ) -> impl Draw + 'a { - per(tracks, callback) + view_track_per(tracks, callback) } /// 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 fn view_track_names (&self, theme: ItemTheme) -> impl Draw { 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 @@ -251,12 +251,12 @@ impl_as_mut_opt!(Track: |self: Arrangement| self.selected_track_mut()); impl Arrangement { #[cfg(feature = "track")] pub fn view_inputs (&self, _theme: ItemTheme) -> impl Draw + '_ { - crate::view::view_inputs() + crate::view::view_inputs(self.tracks_with_sizes(), self.midi_ins().as_slice()) } #[cfg(feature = "track")] pub fn view_inputs_header (&self) -> impl Draw + '_ { - 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")]