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

View file

@ -1,58 +1,22 @@
use std::error::Error;
use std::io::Write;
mod handle;
mod jack;
mod render;
pub use self::handle::*;
pub use self::jack::*;
pub use self::render::*;
use crate::prelude::*;
pub struct Transport {
cols: u16,
rows: u16,
}
pub struct Transport;
impl Transport {
pub fn run_tui () -> Result<(), Box<dyn Error>> {
let mut app = Self { cols: 0, rows: 0 };
let sleep = std::time::Duration::from_millis(16);
let mut stdout = std::io::stdout();
loop {
app.render(&mut stdout)?;
std::thread::sleep(sleep);
}
}
fn render (&mut self, stdout: &mut std::io::Stdout) -> Result<(), Box<dyn Error>> {
use crossterm::{*, style::{*, Stylize}};
let (cols, rows) = terminal::size()?;
if cols != self.cols || rows != self.rows {
self.cols = cols;
self.rows = rows;
stdout
.queue(terminal::Clear(terminal::ClearType::All))?
.queue(cursor::Hide)?
.queue(cursor::MoveTo(1, 0))?
.queue(PrintStyledContent("[Home]".yellow().bold()))?
.queue(cursor::MoveTo(1, 1))?
.queue(PrintStyledContent("⏹ Stop and rewind".yellow().bold()))?
.queue(cursor::MoveTo(20, 0))?
.queue(PrintStyledContent("[Enter]".yellow().bold()))?
.queue(cursor::MoveTo(20, 1))?
.queue(PrintStyledContent("⏮ Play from start".yellow().bold()))?
.queue(cursor::MoveTo(40, 0))?
.queue(PrintStyledContent("[Space]".yellow().bold()))?
.queue(cursor::MoveTo(40, 1))?
.queue(PrintStyledContent("⯈ Play from cursor".yellow().bold()))?
.queue(cursor::MoveTo(1, 3))?.queue(Print("Rate: "))?
.queue(cursor::MoveTo(7, 3))?.queue(PrintStyledContent("48000Hz".white().bold()))?
.queue(cursor::MoveTo(20, 3))?.queue(Print("BPM: "))?
.queue(cursor::MoveTo(25, 3))?.queue(PrintStyledContent("120.34".white().bold()))?
.queue(cursor::MoveTo(35, 3))?.queue(Print("Signature: "))?
.queue(cursor::MoveTo(46, 3))?.queue(PrintStyledContent("4 / 4".white().bold()))?
.queue(cursor::MoveTo(1, 4))?.queue(Print("Time: "))?
.queue(cursor::MoveTo(7, 4))?.queue(PrintStyledContent("1m 23.456s".white().bold()))?
.queue(cursor::MoveTo(20, 4))?.queue(Print("Beat: "))?
.queue(cursor::MoveTo(26, 4))?.queue(PrintStyledContent("30x 3/4".white().bold()))?
.flush()?;
}
Ok(())
pub fn new () -> Result<Self, Box<dyn Error>> {
Ok(Self)
}
}
const ACTIONS: [(&'static str, &'static str);3] = [
("Tab/Shift-Tab, Arrows", "Navigate"),
//("Home", "⏹ Stop and rewind"),
("Space", "⏮ Play from cursor/pause"),
("Shift-Space", "⯈ Play from start/rewind"),
];