From 76644e32baf8bc838081cac998af1c8818c71f07 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Thu, 14 Nov 2024 15:17:40 +0100 Subject: [PATCH] wip: refactor pt.25: 18 errors --- crates/tek_tui/src/tui_arranger_hor.rs | 7 +-- crates/tek_tui/src/tui_arranger_ver.rs | 59 ++++++++++++-------------- crates/tek_tui/src/tui_pool.rs | 2 +- 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/crates/tek_tui/src/tui_arranger_hor.rs b/crates/tek_tui/src/tui_arranger_hor.rs index 84bc65d1..0c48c650 100644 --- a/crates/tek_tui/src/tui_arranger_hor.rs +++ b/crates/tek_tui/src/tui_arranger_hor.rs @@ -4,7 +4,7 @@ pub fn arranger_content_horizontal ( view: &ArrangerView, ) -> impl Widget + use<'_> { let focused = view.focused; - let _tracks = view.model.read().unwrap().arrangement.read().unwrap().tracks.as_slice(); + let _tracks = view.model.tracks(); lay!( focused.then_some(Background(TuiTheme::border_bg())), row!( @@ -160,10 +160,7 @@ pub fn arranger_content_horizontal ( CustomWidget::new(|_|{todo!()}, |to: &mut TuiOutput|{ let [x, y, _, height] = to.area(); let mut x2 = 0; - Ok(for (scene_index, scene) in view.model.read().unwrap() - .arrangement.read().unwrap(). - scenes.iter().enumerate() - { + Ok(for (scene_index, scene) in view.model.scenes().iter().enumerate() { let active_scene = view.selected.scene() == Some(scene_index); let sep = Some(if active_scene { Style::default().yellow().not_dim() diff --git a/crates/tek_tui/src/tui_arranger_ver.rs b/crates/tek_tui/src/tui_arranger_ver.rs index b273c73d..de51c565 100644 --- a/crates/tek_tui/src/tui_arranger_ver.rs +++ b/crates/tek_tui/src/tui_arranger_ver.rs @@ -16,10 +16,9 @@ pub fn arranger_content_vertical ( view: &ArrangerView, factor: usize ) -> impl Widget + use<'_> { - let model = view.model.read().unwrap(); - let clock = model.transport.read().unwrap().clock; - let tracks = model.arrangement.read().unwrap().tracks.as_slice(); - let scenes = model.arrangement.read().unwrap().scenes.as_slice(); + let clock = view.model.clock(); + let tracks = view.model.tracks(); + let scenes = view.model.scenes(); let cols = track_widths(tracks); let rows = ArrangerScene::ppqs(scenes, factor); let bg = view.color; @@ -98,32 +97,6 @@ pub fn arranger_content_vertical ( .bg(track.color.rgb) .push_x(scenes_w) }); - // scene titles - let scene_name = |scene: &ArrangerScene, playing: bool, height|row!( - if playing { "▶ " } else { " " }, - TuiStyle::bold(scene.name.read().unwrap().as_str(), true), - ).fixed_xy(scenes_w, height); - // scene clips - let scene_clip = |scene: &ArrangerScene, track: usize, w: u16, h: u16|Layers::new(move |add|{ - let mut bg = clip_bg; - match (tracks.get(track), scene.clips.get(track)) { - (Some(track), Some(Some(phrase))) => { - let name = &(phrase as &Arc>).read().unwrap().name; - let name = format!("{}", name); - let max_w = name.len().min((w as usize).saturating_sub(2)); - let color = phrase.read().unwrap().color; - add(&name.as_str()[0..max_w].push_x(1).fixed_x(w))?; - bg = color.dark.rgb; - if let Some((_, Some(ref playing))) = track.player.phrase { - if *playing.read().unwrap() == *phrase.read().unwrap() { - bg = color.light.rgb - } - }; - }, - _ => {} - }; - add(&Background(bg)) - }).fixed_xy(w, h); // tracks and scenes let content = col!( // scenes: @@ -132,10 +105,32 @@ pub fn arranger_content_vertical ( let playing = scene.is_playing(tracks); Stack::right(move |add| { // scene title: - add(&scene_name(scene, playing, height).bg(scene.color.rgb))?; + add(&row!( + if playing { "▶ " } else { " " }, + TuiStyle::bold(scene.name.read().unwrap().as_str(), true), + ).fixed_xy(scenes_w, height).bg(scene.color.rgb))?; // clip per track: Ok(for (track, w) in cols.iter().map(|col|col.0).enumerate() { - add(&scene_clip(scene, track, w as u16, height))?; + add(&Layers::new(move |add|{ + let mut bg = clip_bg; + match (tracks.get(track), scene.clips.get(track)) { + (Some(track), Some(Some(phrase))) => { + let name = &(phrase as &Arc>).read().unwrap().name; + let name = format!("{}", name); + let max_w = name.len().min((w as usize).saturating_sub(2)); + let color = phrase.read().unwrap().color; + add(&name.as_str()[0..max_w].push_x(1).fixed_x(w as u16))?; + bg = color.dark.rgb; + if let Some((_, Some(ref playing))) = track.player.phrase { + if *playing.read().unwrap() == *phrase.read().unwrap() { + bg = color.light.rgb + } + }; + }, + _ => {} + }; + add(&Background(bg)) + }).fixed_xy(w as u16, height))?; }) }).fixed_y(height) } diff --git a/crates/tek_tui/src/tui_pool.rs b/crates/tek_tui/src/tui_pool.rs index 2534e860..ac152b61 100644 --- a/crates/tek_tui/src/tui_pool.rs +++ b/crates/tek_tui/src/tui_pool.rs @@ -3,7 +3,7 @@ use crate::*; pub struct PhrasePoolView { _engine: PhantomData, /// Collection of phrases - pub model: Vec>>, + pub model: PhrasePoolModel, /// Selected phrase pub phrase: usize, /// Scroll offset