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) => SampleRate(sr) =>
{ self.clock.timebase.sr.set(sr as f64); }, { self.clock.timebase.sr.set(sr as f64); },
PortRegistration(id, true) => PortRegistration(id, true) =>
{ println!("\rport add: {id}") }, { /*println!("\rport add: {id}")*/ },
PortRegistration(id, false) => PortRegistration(id, false) =>
{ println!("\rport del: {id}") }, { /*println!("\rport del: {id}")*/ },
PortsConnected(a, b, true) => PortsConnected(a, b, true) =>
{ println!("\rport conn: {a} {b}") }, { /*println!("\rport conn: {a} {b}")*/ },
PortsConnected(a, b, false) => PortsConnected(a, b, false) =>
{ println!("\rport disc: {a} {b}") }, { /*println!("\rport disc: {a} {b}")*/ },
ClientRegistration(id, true) => ClientRegistration(id, true) =>
{}, {},
ClientRegistration(id, false) => ClientRegistration(id, false) =>

View file

@ -200,6 +200,10 @@ command!(|self: TekCommand, app: Tek|match self {
SetSize(usize), SetSize(usize),
SetZoom(usize), SetZoom(usize),
SetColor(usize, ItemPalette), SetColor(usize, ItemPalette),
TogglePlay,
ToggleSolo,
ToggleRecord,
ToggleMonitor,
} }
atom_command!(TrackCommand: |app: Tek| { atom_command!(TrackCommand: |app: Tek| {
("add" [] Self::Add) ("add" [] Self::Add)
@ -209,6 +213,10 @@ atom_command!(TrackCommand: |app: Tek| {
("del" [a: usize] Self::Del(a.unwrap().saturating_sub(1))) ("del" [a: usize] Self::Del(a.unwrap().saturating_sub(1)))
("stop" [a: usize] Self::Stop(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())) ("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 { command!(|self: TrackCommand, app: Tek|match self {
Self::Add => { Self::Add => {
@ -228,6 +236,24 @@ command!(|self: TrackCommand, app: Tek|match self {
app.tracks[index].color = color; app.tracks[index].color = color;
Some(Self::SetColor(index, old)) 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 _ => None
}); });
#[derive(Clone, Debug)] pub enum SceneCommand { #[derive(Clone, Debug)] pub enum SceneCommand {

View file

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