wip: refactor pt.25: 18 errors

This commit is contained in:
🪞👃🪞 2024-11-14 15:17:40 +01:00
parent da074eb5fa
commit 76644e32ba
3 changed files with 30 additions and 38 deletions

View file

@ -4,7 +4,7 @@ pub fn arranger_content_horizontal (
view: &ArrangerView<Tui>,
) -> impl Widget<Engine = Tui> + 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()

View file

@ -16,10 +16,9 @@ pub fn arranger_content_vertical (
view: &ArrangerView<Tui>,
factor: usize
) -> impl Widget<Engine = Tui> + 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<RwLock<Phrase>>).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<RwLock<Phrase>>).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)
}

View file

@ -3,7 +3,7 @@ use crate::*;
pub struct PhrasePoolView<E: Engine> {
_engine: PhantomData<E>,
/// Collection of phrases
pub model: Vec<Arc<RwLock<Phrase>>>,
pub model: PhrasePoolModel,
/// Selected phrase
pub phrase: usize,
/// Scroll offset