add rec/mon commands and flatten toolbar

This commit is contained in:
🪞👃🪞 2025-01-23 22:17:14 +01:00
parent b2e4b01bfe
commit 6b463f14f0
4 changed files with 53 additions and 34 deletions

View file

@ -76,13 +76,13 @@ audio!(
SampleRate(sr) =>
{ self.clock.timebase.sr.set(sr as f64); },
PortRegistration(id, true) =>
{ println!("\rport add: {id}") },
{ /*println!("\rport add: {id}")*/ },
PortRegistration(id, false) =>
{ println!("\rport del: {id}") },
{ /*println!("\rport del: {id}")*/ },
PortsConnected(a, b, true) =>
{ println!("\rport conn: {a} {b}") },
{ /*println!("\rport conn: {a} {b}")*/ },
PortsConnected(a, b, false) =>
{ println!("\rport disc: {a} {b}") },
{ /*println!("\rport disc: {a} {b}")*/ },
ClientRegistration(id, true) =>
{},
ClientRegistration(id, false) =>

View file

@ -200,6 +200,10 @@ command!(|self: TekCommand, app: Tek|match self {
SetSize(usize),
SetZoom(usize),
SetColor(usize, ItemPalette),
TogglePlay,
ToggleSolo,
ToggleRecord,
ToggleMonitor,
}
atom_command!(TrackCommand: |app: Tek| {
("add" [] Self::Add)
@ -209,6 +213,10 @@ atom_command!(TrackCommand: |app: Tek| {
("del" [a: usize] Self::Del(a.unwrap().saturating_sub(1)))
("stop" [a: usize] Self::Stop(a.unwrap().saturating_sub(1)))
("swap" [a: usize, b: usize] Self::Swap(a.unwrap(), b.unwrap()))
("play" [] Self::TogglePlay)
("solo" [] Self::ToggleSolo)
("rec" [] Self::ToggleRecord)
("mon" [] Self::ToggleMonitor)
});
command!(|self: TrackCommand, app: Tek|match self {
Self::Add => {
@ -228,6 +236,24 @@ command!(|self: TrackCommand, app: Tek|match self {
app.tracks[index].color = color;
Some(Self::SetColor(index, old))
},
Self::TogglePlay => {
Some(Self::TogglePlay)
},
Self::ToggleSolo => {
Some(Self::ToggleSolo)
},
Self::ToggleRecord => {
if let Some(t) = app.selected.track() {
app.tracks[t-1].player.recording = !app.tracks[t-1].player.recording;
}
Some(Self::ToggleRecord)
},
Self::ToggleMonitor => {
if let Some(t) = app.selected.track() {
app.tracks[t-1].player.monitoring = !app.tracks[t-1].player.monitoring;
}
Some(Self::ToggleMonitor)
},
_ => None
});
#[derive(Clone, Debug)] pub enum SceneCommand {

View file

@ -14,3 +14,8 @@
(@lt track swap-prev)
(@gt track swap-next)
(@delete track delete)
(@r track rec)
(@m track mon)
(@p track play)
(@P track solo)

View file

@ -119,31 +119,19 @@ impl Tek {
}
fn view_clock (&self) -> impl Content<TuiOut> + use<'_> {
self.update_clock();
let compact = self.size.w() > 80;
let theme = ItemPalette::G[96];
Outer(false, Style::default().fg(Tui::g(0))).enclose(row!(
Thunk::new(move||{
let fmtd = self.fmtd.read().unwrap();
Either::new(compact,
row!(FieldH(theme, "SR", fmtd.sr.view.clone()),
FieldH(theme, "Buf", fmtd.buf.view.clone()),
FieldH(theme, "Lat", fmtd.lat.view.clone())),
row!(FieldV(theme, "SR", fmtd.sr.view.clone()),
FieldV(theme, "Buf", fmtd.buf.view.clone()),
FieldV(theme, "Lat", fmtd.lat.view.clone()))) }),
" ",
self.view_play_pause(),
" ",
Thunk::new(move||{
let fmtd = self.fmtd.read().unwrap();
Either::new(compact,
row!(FieldH(theme, "BPM", fmtd.bpm.view.clone()),
FieldH(theme, "Beat", fmtd.beat.view.clone()),
FieldH(theme, "Time", fmtd.time.view.clone())),
row!(FieldV(theme, "BPM", fmtd.bpm.view.clone()),
FieldV(theme, "Beat", fmtd.beat.view.clone()),
FieldV(theme, "Time", fmtd.time.view.clone()))) }),
))
let theme = ItemPalette::G[96];
let fmtd = self.fmtd.read().unwrap();
Bsp::a(
Fill::xy(Align::w(self.view_play_pause())),
Fill::xy(Align::e(row!(
FieldH(theme, "SR", fmtd.sr.view.clone()),
FieldH(theme, "Buf", fmtd.buf.view.clone()),
FieldH(theme, "Lat", fmtd.lat.view.clone()),
FieldH(theme, "BPM", fmtd.bpm.view.clone()),
FieldH(theme, "Beat", fmtd.beat.view.clone()),
FieldH(theme, "Time", fmtd.time.view.clone())
)))
)
}
fn view_meter <'a> (&'a self, label: &'a str, value: f32) -> impl Content<TuiOut> + 'a {
col!(
@ -216,9 +204,9 @@ impl Tek {
Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(input.name())))),
input.conn().get(0).map(conn)
)));
let rec = false;
let mon = false;
let cells: ThunkBox<_> = per_track!(self.size.w();|self, track, t|{
let rec = track.player.recording;
let mon = track.player.monitoring;
let bg = if self.selected().track() == Some(t+1) { track.color.light.rgb } else { track.color.base.rgb };
let bg2 = if t > 0 { self.tracks()[t - 1].color.base.rgb } else { Reset };
Bsp::s(
@ -227,8 +215,8 @@ impl Tek {
Tui::fg_bg(if mon { White } else { track.color.darkest.rgb }, bg, "Monit"),
))),
Self::wrap(bg, fg, row!(
Tui::fg_bg(if rec { White } else { track.color.darkest.rgb }, bg, "P▞▞▞▞"),
Tui::fg_bg(if mon { White } else { track.color.darkest.rgb }, bg, "S▞▞▞▞"),
Tui::fg_bg(if rec { White } else { track.color.darkest.rgb }, bg, "R▞▞▞▞"),
Tui::fg_bg(if mon { White } else { track.color.darkest.rgb }, bg, "M▞▞▞▞"),
))
)
});
@ -289,7 +277,7 @@ impl Tek {
let data = (self.selected.track().unwrap_or(0), self.tracks().len());
self.fmtd.write().unwrap().trks.update(Some(data),
rewrite!(buf, "({}/{})", data.0, data.1));
button(" T ", Bsp::e(" track ",
button(" T ", Bsp::e(" track ",
self.fmtd.read().unwrap().trks.view.clone()))
}
fn view_scene_add (&self) -> impl Content<TuiOut> + use<'_> {