From 83e64a3a10cd65d91b90c1bb6c833bb65780aa3e Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 9 Dec 2024 21:06:39 +0100 Subject: [PATCH] wip11 (4e) --- crates/tek/src/tui.rs | 2 +- crates/tek/src/tui/app_sequencer.rs | 2 +- crates/tek/src/tui/view_sequencer.rs | 88 +++++++++++++++++++--------- 3 files changed, 62 insertions(+), 30 deletions(-) diff --git a/crates/tek/src/tui.rs b/crates/tek/src/tui.rs index 2263c88d..d56dca59 100644 --- a/crates/tek/src/tui.rs +++ b/crates/tek/src/tui.rs @@ -23,7 +23,7 @@ mod ctrl_transport; pub(crate) use ctrl_transport::*; mod model_arranger; pub(crate) use model_arranger::*; -//// +//////////////////////////////////////////////////////// mod model_clock; pub(crate) use model_clock::*; diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index efd328fc..9b14d8d8 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -117,8 +117,8 @@ impl_focus!(SequencerTui SequencerFocus [ /// Status bar for sequencer app #[derive(Clone)] pub struct SequencerStatusBar { - pub(crate) cpu: Option, pub(crate) width: usize, + pub(crate) cpu: Option, pub(crate) size: String, pub(crate) res: String, pub(crate) mode: &'static str, diff --git a/crates/tek/src/tui/view_sequencer.rs b/crates/tek/src/tui/view_sequencer.rs index 5b67aa20..3c3488d5 100644 --- a/crates/tek/src/tui/view_sequencer.rs +++ b/crates/tek/src/tui/view_sequencer.rs @@ -31,38 +31,70 @@ render!(|self: SequencerTui|{ render!(|self: SequencerStatusBar|{ - let orange = Color::Rgb(255,128,0); - - let modeline = { - let light = Color::Rgb(100,100,100); - let yellow = Color::Rgb(255,255,0); - let black = Color::Rgb(0,0,0); - Tui::to_east( - Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))), - Tui::bg(light, row!((prefix, hotkey, suffix) in self.help.iter() => { - row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix]) - })) - ) - }; - - let statusbar = { - let dark = Color::Rgb(100,100,100); - let cpu = &self.cpu; - let res = &self.res; - let size = &self.size; - Tui::bg(dark, row!([ - Tui::fg(orange, cpu), - Tui::fg(orange, res), - Tui::fg(orange, size), - ])) - }; - lay!(|add|if self.width > 60 { - add(&row!(![modeline, statusbar])) + add(&row!(![ + SequencerMode::from(self), + SequencerStats::from(self), + ])) } else if self.width > 0 { - add(&col!(![modeline, statusbar])) + add(&col!(![ + SequencerMode::from(self), + SequencerStats::from(self), + ])) } else { Ok(()) }) }); + +struct SequencerMode { + mode: &'static str, + help: &'static [(&'static str, &'static str, &'static str)] +} +impl From<&SequencerStatusBar> for SequencerMode { + fn from (state: &SequencerStatusBar) -> Self { + Self { + mode: state.mode, + help: state.help, + } + } +} +render!(|self:SequencerMode|{ + let orange = Color::Rgb(255,128,0); + let light = Color::Rgb(100,100,100); + let yellow = Color::Rgb(255,255,0); + let black = Color::Rgb(0,0,0); + Tui::to_east( + Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))), + Tui::bg(light, row!((prefix, hotkey, suffix) in self.help.iter() => { + row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix]) + })) + ) +}); + +struct SequencerStats<'a> { + cpu: &'a Option, + size: &'a String, + res: &'a String, +} +impl<'a> From<&'a SequencerStatusBar> for SequencerStats<'a> { + fn from (state: &'a SequencerStatusBar) -> Self { + Self { + cpu: &state.cpu, + size: &state.size, + res: &state.res, + } + } +} +render!(|self:SequencerStats<'a>|{ + let orange = Color::Rgb(255,128,0); + let dark = Color::Rgb(100,100,100); + let cpu = &self.cpu; + let res = &self.res; + let size = &self.size; + Tui::bg(dark, row!([ + Tui::fg(orange, cpu), + Tui::fg(orange, res), + Tui::fg(orange, size), + ])) +});