From d74b80a4fc15884ef4bc5986c65281f50a94aba9 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 4 Feb 2023 16:53:49 -0330 Subject: boxed widgets --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/ui.rs | 29 +++++++++++++++++++++-------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e4041d0..652fe7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -113,7 +113,7 @@ dependencies = [ [[package]] name = "pfc" -version = "0.3.3" +version = "0.3.4" dependencies = [ "crossterm", "tui", diff --git a/Cargo.toml b/Cargo.toml index a4976cf..ec6b618 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pfc" -version = "0.3.3" +version = "0.3.4" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/ui.rs b/src/ui.rs index 8efd060..0aa1a2b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -6,19 +6,25 @@ use crossterm::{ use std::io; use tui::{ backend::{Backend, CrosstermBackend}, - layout::{Alignment, Constraint, Direction, Layout}, - widgets::{List, ListItem, Paragraph, Widget}, + layout::{Alignment, Constraint, Direction, Layout, Rect}, + widgets::{Block, Borders, List, ListItem, Paragraph, Widget}, Frame, Terminal, }; use crate::Calculator; +const WIDTH: u16 = 32; + impl Calculator { pub fn draw(&self, f: &mut Frame) { - let chunks = layout(self.stack.len()).split(f.size()); + let chunks = layout(self.stack.len(), f.size()); f.render_widget(version_number_widget(), chunks[0]); f.render_widget(stack_widget(&self.stack), chunks[2]); - f.render_widget(Paragraph::new(self.input_buffer.as_str()), chunks[3]); + f.render_widget( + Paragraph::new(format!("> {}", self.input_buffer)) + .block(Block::default().borders(Borders::ALL)), + chunks[3], + ); } } @@ -44,27 +50,34 @@ where Ok(()) } -fn layout(stack_size: usize) -> Layout { +fn layout(stack_size: usize, frame_size: Rect) -> Vec { + let columns = Layout::default() + .direction(Direction::Horizontal) + .constraints([Constraint::Length(WIDTH), Constraint::Max(u16::MAX)].as_ref()) + .split(frame_size); + Layout::default() .direction(Direction::Vertical) .constraints( [ Constraint::Length(1), Constraint::Max(u16::MAX), - Constraint::Length(stack_size as u16), - Constraint::Length(1), + Constraint::Length(stack_size as u16 + 2), + Constraint::Length(3), ] .as_ref(), ) + .split(columns[0]) } fn stack_widget(stack: &Vec) -> impl Widget { List::new( stack .iter() - .map(|f| ListItem::new(format!("{}", f))) + .map(|f| ListItem::new(format!(" {}", f))) .collect::>(), ) + .block(Block::default().borders(Borders::ALL)) } fn version_number_widget() -> impl Widget { -- cgit v1.2.3