diff --git a/crates/tek_tui/src/lib.rs b/crates/tek_tui/src/lib.rs index 7412334b..b022cacc 100644 --- a/crates/tek_tui/src/lib.rs +++ b/crates/tek_tui/src/lib.rs @@ -293,7 +293,7 @@ pub trait FocusWrap { } } -pub trait StatusBar: Copy + Widget { +pub trait StatusBar: Widget { type State; fn hotkey_fg () -> Color where Self: Sized; fn update (&mut self, state: &Self::State) where Self: Sized; @@ -314,6 +314,12 @@ pub trait StatusBar: Copy + Widget { }) }) } + + fn with <'a> (state: &'a Self::State, content: impl Widget) -> impl Widget + where Self: Sized, &'a Self::State: Into + { + Split::up(1, state.into(), content) + } } fn content_with_menu_and_status <'a, A, S, C> ( diff --git a/crates/tek_tui/src/tui_app_sequencer.rs b/crates/tek_tui/src/tui_app_sequencer.rs index f9f5eaa2..2fbf52a8 100644 --- a/crates/tek_tui/src/tui_app_sequencer.rs +++ b/crates/tek_tui/src/tui_app_sequencer.rs @@ -77,27 +77,25 @@ impl_focus!(SequencerTui SequencerFocus [ ]); /// Status bar for sequencer app -#[derive(Copy, Clone)] -pub enum SequencerStatusBar { - Transport, - PhrasePool, - PhraseEditor, +#[derive(Clone)] +pub struct SequencerStatusBar { + pub(crate) cpu: Option } impl StatusBar for SequencerStatusBar { - type State = (); + type State = SequencerTui; fn hotkey_fg () -> Color { TuiTheme::hotkey_fg() } - fn update (&mut self, state: &()) { + fn update (&mut self, state: &SequencerTui) { todo!() } } -impl Content for SequencerStatusBar { - type Engine = Tui; - fn content (&self) -> impl Widget { - todo!(); - "" +impl From<&SequencerTui> for SequencerStatusBar { + fn from (state: &SequencerTui) -> Self { + Self { + cpu: state.perf.percentage().map(|cpu|format!("{cpu:.03}%")) + } } } diff --git a/crates/tek_tui/src/tui_view_sequencer.rs b/crates/tek_tui/src/tui_view_sequencer.rs index 657aeb4b..49aa7459 100644 --- a/crates/tek_tui/src/tui_view_sequencer.rs +++ b/crates/tek_tui/src/tui_view_sequencer.rs @@ -3,7 +3,7 @@ use crate::*; impl Content for SequencerTui { type Engine = Tui; fn content (&self) -> impl Widget { - lay!( + SequencerStatusBar::with(self, lay!( col!( TransportView::from(self), Split::right(20, @@ -11,10 +11,13 @@ impl Content for SequencerTui { widget(&PhraseView2::from(self)), ).min_y(20) ), - self.perf.percentage() - .map(|cpu|format!("{cpu:.03}%")) - .fg(Color::Rgb(255,128,0)) - .align_sw(), - ) + )) + } +} + +impl Content for SequencerStatusBar { + type Engine = Tui; + fn content (&self) -> impl Widget { + widget(&self.cpu).fg(Color::Rgb(255,128,0)).align_se().fill_x() } }