flatten arranger and piano modules

This commit is contained in:
🪞👃🪞 2025-01-02 13:16:25 +01:00
parent 7a4fa1692b
commit 1723826cc2
19 changed files with 120 additions and 130 deletions

View file

@ -5,30 +5,30 @@ use KeyCode::{Enter, Left, Right, Char};
/// Transport clock app.
pub struct TransportTui {
pub jack: Arc<RwLock<JackConnection>>,
pub clock: Clock,
pub size: Measure<Tui>,
pub cursor: (usize, usize),
pub color: ItemPalette,
pub jack: Arc<RwLock<JackConnection>>,
pub clock: Clock,
}
from_jack!(|jack|TransportTui Self {
jack: jack.clone(),
clock: Clock::from(jack),
size: Measure::new(),
cursor: (0, 0),
color: ItemPalette::random(),
});
has_clock!(|self: TransportTui|&self.clock);
audio!(|self: TransportTui, client, scope|ClockAudio(self).process(client, scope));
handle!(<Tui>|self: TransportTui, from|TransportCommand::execute_with_state(self, from));
render!(Tui: (self: TransportTui) => TransportView(&self.clock));
impl TransportTui {
pub fn new (jack: &Arc<RwLock<JackConnection>>) -> Usually<Self> {
Ok(Self {
jack: jack.clone(),
clock: Clock::from(jack),
})
}
}
pub struct TransportView<'a>(pub &'a Clock);
render!(Tui: (self: TransportView<'a>) => row!(
render!(Tui: (self: TransportView<'a>) => Outer(
Style::default().fg(TuiTheme::g(255)).bg(TuiTheme::g(0))
).enclose(row!(
BeatStats::new(self.0), " ",
PlayPause(self.0.is_rolling()), " ",
OutputStats::new(self.0),
));
)));
pub struct PlayPause(pub bool);
render!(Tui: (self: PlayPause) => Tui::bg(
@ -36,15 +36,6 @@ render!(Tui: (self: PlayPause) => Tui::bg(
Fixed::x(5, Tui::either(self.0,
Tui::fg(Color::Rgb(0, 255, 0), Bsp::s(" 🭍🭑🬽 ", " 🭞🭜🭘 ",)),
Tui::fg(Color::Rgb(255, 128, 0), Bsp::s(" ▗▄▖ ", " ▝▀▘ ",))))));
impl std::fmt::Debug for TransportTui {
fn fmt (&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
f.debug_struct("TransportTui")
.field("jack", &self.jack)
.field("size", &self.size)
.field("cursor", &self.cursor)
.finish()
}
}
pub struct BeatStats { bpm: String, beat: String, time: String, }
impl BeatStats {
@ -60,7 +51,9 @@ impl BeatStats {
}
}
render!(Tui: (self: BeatStats) => col!(
Bsp::e(&self.bpm, " BPM"), Bsp::e("Beat ", &self.beat), Bsp::e("Time ", &self.time),
Bsp::e(Tui::fg(TuiTheme::g(255), &self.bpm), " BPM"),
Bsp::e("Beat ", Tui::fg(TuiTheme::g(255), &self.beat)),
Bsp::e("Time ", Tui::fg(TuiTheme::g(255), &self.time)),
));
pub struct OutputStats { sample_rate: String, buffer_size: String, latency: String, }
@ -76,14 +69,16 @@ impl OutputStats {
}
}
render!(Tui: (self: OutputStats) => col!(
Bsp::e(format!("{}", self.sample_rate), " sample rate"),
Bsp::e(format!("{}", self.buffer_size), " sample buffer"),
Bsp::e(format!("{:.3}ms", self.latency), " latency"),
Bsp::e(Tui::fg(TuiTheme::g(255), format!("{}", self.sample_rate)), " sample rate"),
Bsp::e(Tui::fg(TuiTheme::g(255), format!("{}", self.buffer_size)), " sample buffer"),
Bsp::e(Tui::fg(TuiTheme::g(255), format!("{:.3}ms", self.latency)), " latency"),
));
#[derive(Clone, Debug, PartialEq)]
pub enum TransportCommand {
Clock(ClockCommand),
}
command!(|self:TransportCommand,state:TransportTui|match self {
//Self::Focus(cmd) => cmd.execute(state)?.map(Self::Focus),
Self::Clock(cmd) => cmd.execute(state)?.map(Self::Clock),