From e9b4a2ca78b6988118206db5d41dffeb0a8d3b38 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 17 May 2025 08:07:51 +0300 Subject: [PATCH] ClipsView: refactor those horrible nested closures --- crates/device/src/arranger/arranger_clip.rs | 55 ++++++++++++--------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/crates/device/src/arranger/arranger_clip.rs b/crates/device/src/arranger/arranger_clip.rs index 98cc9dad..3b6ab878 100644 --- a/crates/device/src/arranger/arranger_clip.rs +++ b/crates/device/src/arranger/arranger_clip.rs @@ -31,36 +31,45 @@ impl ClipCommand { } } -impl Arrangement { - -} - impl ClipsView for Arrangement {} impl<'a> ClipsView for ArrangerView<'a> {} pub trait ClipsView: HasTrackScroll + HasSceneScroll + Send + Sync { - fn scenes_clips_2 <'a> (&'a self, theme: ItemTheme) -> impl Content + 'a { - Fixed::y(self.scenes().len() as u16 * 2, - Tui::bg(theme.darker.rgb, - Align::w(Fill::x(Map::new( - ||self.scenes().iter().skip(self.scene_scroll()), - move|scene: &'a Scene, index|self.track_scenes(scene, index)))))) + fn scenes_clips_2 <'a> ( + &'a self, + theme: ItemTheme + ) -> impl Content + 'a { + Fixed::y(self.scenes().len() as u16 * 2, Tui::bg(theme.darker.rgb, + Align::w(Fill::x(Map::new(||self.scenes().iter().skip(self.scene_scroll()), + move|scene: &'a Scene, index|self.track_scenes(index, scene)))))) } - fn track_scenes (&self, scene: &Scene, scene_index: usize) -> impl Content { + fn track_scenes <'a> ( + &'a self, + scene_index: usize, + scene: &'a Scene + ) -> impl Content + 'a { Push::y(scene_index as u16 * 2u16, Fixed::xy(20, 2, Map::new( move||scene.clips.iter().skip(self.track_scroll()), - move|clip: &Option>>, track_index|{ - let (theme, text) = if let Some(clip) = clip { - let clip = clip.read().unwrap(); - (clip.color, clip.name.clone()) - } else { - (scene.color, Default::default()) - }; - Push::x(track_index as u16 * 14, Tui::bg(theme.dark.rgb, Bsp::e( - format!(" {scene_index:2} {track_index:2} "), - Tui::fg(Rgb(255, 255, 255), - Tui::bold(true, format!("{}", text)))))) - }))) + move|clip: &'a Option>>, track_index| + self.track_scene_clip(scene_index, scene, track_index, clip)))) + } + fn track_scene_clip ( + &self, + scene_index: usize, + scene: &Scene, + track_index: usize, + clip: &Option>> + ) -> impl Content { + let (theme, text) = if let Some(clip) = clip { + let clip = clip.read().unwrap(); + (clip.color, clip.name.clone()) + } else { + (scene.color, Default::default()) + }; + Push::x(track_index as u16 * 14, Tui::bg(theme.dark.rgb, Bsp::e( + format!(" {scene_index:2} {track_index:2} "), + Tui::fg(Rgb(255, 255, 255), + Tui::bold(true, format!("{}", text)))))) } }