mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +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) =>
|
||||
{ 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) =>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<'_> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue