mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
add rec/mon commands and flatten toolbar
This commit is contained in:
parent
b2e4b01bfe
commit
6b463f14f0
4 changed files with 53 additions and 34 deletions
|
|
@ -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) =>
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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<'_> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue