From e7fbb359c726d218e375831a7289f5c2607d7e60 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 21 Dec 2024 20:37:02 +0100 Subject: [PATCH] add editbar to arranger --- crates/tek/src/tui/app_arranger.rs | 25 +++++++++++++------------ crates/tek/src/tui/arranger_mode_v.rs | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/crates/tek/src/tui/app_arranger.rs b/crates/tek/src/tui/app_arranger.rs index feee07ea..a801a569 100644 --- a/crates/tek/src/tui/app_arranger.rs +++ b/crates/tek/src/tui/app_arranger.rs @@ -95,7 +95,7 @@ from_jack!(|jack| ArrangerTui { } }); impl ArrangerTui { - fn render_mode (state: &Self) -> impl Render { + fn render_mode (state: &Self) -> impl Render + use<'_> { match state.mode { ArrangerMode::H => todo!("horizontal arranger"), ArrangerMode::V(factor) => Self::render_mode_v(state, factor), @@ -103,24 +103,25 @@ impl ArrangerTui { } } render!(|self: ArrangerTui|{ - let arranger = ||lay!(|add|{ + let play = Fixed::wh(5, 2, PlayPause(self.clock.is_rolling())); + let transport = TransportView::from((self, Some(ItemPalette::from(TuiTheme::g(96))), true)); + let with_transport = |x|col!([row!(![&play, &transport]), &x]); + let pool_size = if self.show_pool { self.splits[1] } else { 0 }; + let with_pool = |x|Split::left(false, pool_size, PhraseListView(&self.phrases), x); + let status = SequencerStatus::from(self); + let with_editbar = |x|Tui::split_n(false, 3, PhraseEditStatus(&self.editor), x); + let with_status = |x|Tui::split_n(false, 2, status, x); + let with_size = |x|lay!([&self.size, x]); + let arranger = ||lay!(|add|{ let color = self.color; add(&Fill::wh(Tui::bg(color.darkest.rgb, ())))?; add(&Fill::wh(Lozenge(Style::default().fg(color.light.rgb).bg(color.darker.rgb))))?; add(&Self::render_mode(self)) }); - let play = Fixed::wh(5, 2, PlayPause(self.clock.is_rolling())); - let transport = TransportView::from((self, None, true)); - let with_transport = |x|col!([row!(![&play, &transport]), &x]); - let pool_size = if self.show_pool { self.splits[1] } else { 0 }; - let with_pool = |x|Split::left(false, pool_size, PhraseListView(&self.phrases), x); - let status = SequencerStatus::from(self); - let with_status = |x|Tui::split_n(false, 2, status, x); - let with_size = |x|lay!([&self.size, x]); - with_size(with_status(with_pool(with_transport(col!([ + with_size(with_status(with_editbar(with_pool(with_transport(col!([ Fill::w(Fixed::h(20, arranger())), Fill::w(Fixed::h(25, &self.editor)), - ]))))) + ])))))) }); audio!(|self: ArrangerTui, client, scope|{ // Start profiling cycle diff --git a/crates/tek/src/tui/arranger_mode_v.rs b/crates/tek/src/tui/arranger_mode_v.rs index 20ccfac3..8a17ccf1 100644 --- a/crates/tek/src/tui/arranger_mode_v.rs +++ b/crates/tek/src/tui/arranger_mode_v.rs @@ -2,7 +2,7 @@ use crate::*; const HEADER_H: u16 = 3; const SCENES_W_OFFSET: u16 = 3; impl ArrangerTui { - pub fn render_mode_v (state: &ArrangerTui, factor: usize) -> impl Render { + pub fn render_mode_v (state: &ArrangerTui, factor: usize) -> impl Render + use<'_> { lay!([ ArrangerVColSep::from(state), ArrangerVRowSep::from((state, factor)), col!([ArrangerVHead::from(state), ArrangerVBody::from((state, factor))]),