mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
wip: refactor pt.25: 18 errors
This commit is contained in:
parent
da074eb5fa
commit
76644e32ba
3 changed files with 30 additions and 38 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue