diff --git a/tek/src/audio.rs b/tek/src/audio.rs index 80b41d2e..0629d601 100644 --- a/tek/src/audio.rs +++ b/tek/src/audio.rs @@ -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) => diff --git a/tek/src/keys.rs b/tek/src/keys.rs index 6c95dfb4..b7c17942 100644 --- a/tek/src/keys.rs +++ b/tek/src/keys.rs @@ -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 { diff --git a/tek/src/keys_track.edn b/tek/src/keys_track.edn index 37257ab4..6d6f41dc 100644 --- a/tek/src/keys_track.edn +++ b/tek/src/keys_track.edn @@ -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) diff --git a/tek/src/view.rs b/tek/src/view.rs index a911e083..d35e446d 100644 --- a/tek/src/view.rs +++ b/tek/src/view.rs @@ -119,31 +119,19 @@ impl Tek { } fn view_clock (&self) -> impl Content + 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 + '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 + use<'_> {