mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
62 lines
1.9 KiB
Rust
62 lines
1.9 KiB
Rust
use crate::prelude::*;
|
|
use super::Sampler;
|
|
|
|
impl WidgetRef for Sampler {
|
|
fn render_ref (&self, area: Rect, buf: &mut Buffer) {
|
|
}
|
|
}
|
|
|
|
pub fn render (
|
|
state: &mut Sampler,
|
|
stdout: &mut Stdout,
|
|
offset: (u16, u16),
|
|
) -> Result<(), Box<dyn Error>> {
|
|
render_table(state, stdout, offset)?;
|
|
render_meters(state, stdout, offset)?;
|
|
Ok(())
|
|
}
|
|
|
|
fn render_table (
|
|
state: &mut Sampler,
|
|
stdout: &mut Stdout,
|
|
offset: (u16, u16),
|
|
) -> Result<(), Box<dyn Error>> {
|
|
let move_to = |col, row| crossterm::cursor::MoveTo(offset.0 + col, offset.1 + row);
|
|
stdout.queue(move_to(0, 3))?.queue(
|
|
Print(" Name Rate Trigger Route")
|
|
)?;
|
|
for (i, sample) in state.samples.lock().unwrap().iter().enumerate() {
|
|
let row = 4 + i as u16;
|
|
for (j, (column, field)) in [
|
|
(0, format!(" {:7} ", sample.name)),
|
|
(9, format!(" {:.1}Hz ", sample.rate)),
|
|
(18, format!(" MIDI C{} {} ", sample.trigger.0, sample.trigger.1)),
|
|
(33, format!(" {:.1}dB -> Output ", sample.gain)),
|
|
(50, format!(" {} ", sample.playing.unwrap_or(0))),
|
|
].into_iter().enumerate() {
|
|
stdout.queue(move_to(column, row))?;
|
|
if state.selected_sample == i && state.selected_column == j {
|
|
stdout.queue(PrintStyledContent(field.to_string().bold().reverse()))?;
|
|
} else {
|
|
stdout.queue(PrintStyledContent(field.to_string().bold()))?;
|
|
}
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn render_meters (
|
|
state: &mut Sampler,
|
|
stdout: &mut Stdout,
|
|
offset: (u16, u16),
|
|
) -> Result<(), Box<dyn Error>> {
|
|
let move_to = |col, row| crossterm::cursor::MoveTo(offset.0 + col, offset.1 + row);
|
|
for (i, sample) in state.samples.lock().iter().enumerate() {
|
|
let row = 4 + i as u16;
|
|
stdout.queue(move_to(32, row))?.queue(
|
|
PrintStyledContent("▁".green())
|
|
)?;
|
|
}
|
|
Ok(())
|
|
}
|
|
|