mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16: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>,
|
view: &ArrangerView<Tui>,
|
||||||
) -> impl Widget<Engine = Tui> + use<'_> {
|
) -> impl Widget<Engine = Tui> + use<'_> {
|
||||||
let focused = view.focused;
|
let focused = view.focused;
|
||||||
let _tracks = view.model.read().unwrap().arrangement.read().unwrap().tracks.as_slice();
|
let _tracks = view.model.tracks();
|
||||||
lay!(
|
lay!(
|
||||||
focused.then_some(Background(TuiTheme::border_bg())),
|
focused.then_some(Background(TuiTheme::border_bg())),
|
||||||
row!(
|
row!(
|
||||||
|
|
@ -160,10 +160,7 @@ pub fn arranger_content_horizontal (
|
||||||
CustomWidget::new(|_|{todo!()}, |to: &mut TuiOutput|{
|
CustomWidget::new(|_|{todo!()}, |to: &mut TuiOutput|{
|
||||||
let [x, y, _, height] = to.area();
|
let [x, y, _, height] = to.area();
|
||||||
let mut x2 = 0;
|
let mut x2 = 0;
|
||||||
Ok(for (scene_index, scene) in view.model.read().unwrap()
|
Ok(for (scene_index, scene) in view.model.scenes().iter().enumerate() {
|
||||||
.arrangement.read().unwrap().
|
|
||||||
scenes.iter().enumerate()
|
|
||||||
{
|
|
||||||
let active_scene = view.selected.scene() == Some(scene_index);
|
let active_scene = view.selected.scene() == Some(scene_index);
|
||||||
let sep = Some(if active_scene {
|
let sep = Some(if active_scene {
|
||||||
Style::default().yellow().not_dim()
|
Style::default().yellow().not_dim()
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,9 @@ pub fn arranger_content_vertical (
|
||||||
view: &ArrangerView<Tui>,
|
view: &ArrangerView<Tui>,
|
||||||
factor: usize
|
factor: usize
|
||||||
) -> impl Widget<Engine = Tui> + use<'_> {
|
) -> impl Widget<Engine = Tui> + use<'_> {
|
||||||
let model = view.model.read().unwrap();
|
let clock = view.model.clock();
|
||||||
let clock = model.transport.read().unwrap().clock;
|
let tracks = view.model.tracks();
|
||||||
let tracks = model.arrangement.read().unwrap().tracks.as_slice();
|
let scenes = view.model.scenes();
|
||||||
let scenes = model.arrangement.read().unwrap().scenes.as_slice();
|
|
||||||
let cols = track_widths(tracks);
|
let cols = track_widths(tracks);
|
||||||
let rows = ArrangerScene::ppqs(scenes, factor);
|
let rows = ArrangerScene::ppqs(scenes, factor);
|
||||||
let bg = view.color;
|
let bg = view.color;
|
||||||
|
|
@ -98,32 +97,6 @@ pub fn arranger_content_vertical (
|
||||||
.bg(track.color.rgb)
|
.bg(track.color.rgb)
|
||||||
.push_x(scenes_w)
|
.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
|
// tracks and scenes
|
||||||
let content = col!(
|
let content = col!(
|
||||||
// scenes:
|
// scenes:
|
||||||
|
|
@ -132,10 +105,32 @@ pub fn arranger_content_vertical (
|
||||||
let playing = scene.is_playing(tracks);
|
let playing = scene.is_playing(tracks);
|
||||||
Stack::right(move |add| {
|
Stack::right(move |add| {
|
||||||
// scene title:
|
// 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:
|
// clip per track:
|
||||||
Ok(for (track, w) in cols.iter().map(|col|col.0).enumerate() {
|
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)
|
}).fixed_y(height)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ use crate::*;
|
||||||
pub struct PhrasePoolView<E: Engine> {
|
pub struct PhrasePoolView<E: Engine> {
|
||||||
_engine: PhantomData<E>,
|
_engine: PhantomData<E>,
|
||||||
/// Collection of phrases
|
/// Collection of phrases
|
||||||
pub model: Vec<Arc<RwLock<Phrase>>>,
|
pub model: PhrasePoolModel,
|
||||||
/// Selected phrase
|
/// Selected phrase
|
||||||
pub phrase: usize,
|
pub phrase: usize,
|
||||||
/// Scroll offset
|
/// Scroll offset
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue