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

41
src/render.rs Normal file
View file

@ -0,0 +1,41 @@
use crate::prelude::*;
pub fn render_toolbar_vertical (
stdout: &mut std::io::Stdout,
offset: (u16, u16),
actions: &[(&str, &str)],
) -> Result<(u16, u16), Box<dyn Error>> {
use crossterm::{*, style::{Stylize, PrintStyledContent}, cursor::MoveTo};
let move_to = |col, row| MoveTo(offset.0 + col, offset.1 + row);
let mut x: u16 = 1;
let mut y: u16 = 0;
for (name, description) in actions.iter() {
stdout.queue(move_to(1, y))?.queue(
PrintStyledContent(name.yellow().bold())
)?.queue(move_to(1, y + 1))?.queue(
PrintStyledContent(description.yellow())
)?;
y = y + 3;
x = u16::max(x, usize::max(name.len(), description.len()) as u16);
}
Ok((x, y))
}
pub fn render_box (
stdout: &mut std::io::Stdout,
x: u16,
y: u16,
w: u16,
h: u16,
active: bool
) -> Result<(), Box<dyn Error>> {
let edge: String = std::iter::repeat("").take(w.saturating_sub(2) as usize).collect();
let back: String = std::iter::repeat(" ").take(w.saturating_sub(2) as usize).collect();
stdout.queue(MoveTo(x, y))?.queue(Print(&format!("{edge}")))?;
for row in y+1..y+h {
stdout.queue(MoveTo(x, row))?.queue(Print(""))?;
stdout.queue(MoveTo(x+w-1, row))?.queue(Print(""))?;
}
stdout.queue(MoveTo(x, y+h))?.queue(Print(&format!("{edge}")))?;
Ok(())
}