wip: running interface in separate or combined mode

also disassociating render functions from state structs
This commit is contained in:
🪞👃🪞 2024-05-28 22:13:20 +03:00
parent f9218e887a
commit d6bf840a1f
31 changed files with 905 additions and 532 deletions

80
src/sampler/render.rs Normal file
View file

@ -0,0 +1,80 @@
use crate::prelude::*;
use super::Sampler;
pub fn render (
state: &mut Sampler,
stdout: &mut Stdout,
offset: (u16, u16),
) -> Result<(), Box<dyn Error>> {
render_toolbar(state, stdout, offset)?;
render_table(state, stdout, offset)?;
render_meters(state, stdout, offset)?;
stdout.flush()?;
Ok(())
}
fn render_toolbar (
state: &mut Sampler,
stdout: &mut Stdout,
offset: (u16, u16),
) -> Result<(), Box<dyn Error>> {
stdout
.queue(cursor::MoveTo(1, 0))?
.queue(PrintStyledContent("Arrows".yellow().bold()))?
.queue(cursor::MoveTo(1, 1))?
.queue(PrintStyledContent("Navigate".yellow()))?
.queue(cursor::MoveTo(11, 0))?
.queue(PrintStyledContent("Enter".yellow().bold()))?
.queue(cursor::MoveTo(11, 1))?
.queue(PrintStyledContent("Play sample".yellow()))?
.queue(cursor::MoveTo(24, 0))?
.queue(PrintStyledContent("Ins/Del".yellow().bold()))?
.queue(cursor::MoveTo(24, 1))?
.queue(PrintStyledContent("Add/remove sample".yellow()))?;
Ok(())
}
fn render_table (
state: &mut Sampler,
stdout: &mut Stdout,
offset: (u16, u16),
) -> Result<(), Box<dyn Error>> {
stdout
.queue(cursor::MoveTo(0, 3))?
.queue(Print(
" Name Rate Trigger Route"))?;
for (i, sample) in state.samples.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 C10 36 ")),
(33, format!(" {:.1}dB -> Output ", sample.gain)),
].into_iter().enumerate() {
stdout.queue(cursor::MoveTo(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>> {
for (i, sample) in state.samples.iter().enumerate() {
let row = 4 + i as u16;
stdout
.queue(cursor::MoveTo(32, row))?
.queue(PrintStyledContent("".green()))?;
}
Ok(())
}