diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2023-02-04 16:53:49 -0330 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2023-02-04 16:53:49 -0330 |
| commit | d74b80a4fc15884ef4bc5986c65281f50a94aba9 (patch) | |
| tree | 05ab9ef5d19580147e28a15efc8c84e6b5fee28b | |
| parent | a6425ae123f9a1492d380d860d74f4589d180879 (diff) | |
| download | pfc-d74b80a4fc15884ef4bc5986c65281f50a94aba9.zip | |
boxed widgetsv0.3.4
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/ui.rs | 29 |
3 files changed, 23 insertions, 10 deletions
@@ -113,7 +113,7 @@ dependencies = [ [[package]] name = "pfc" -version = "0.3.3" +version = "0.3.4" dependencies = [ "crossterm", "tui", @@ -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 @@ -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<B: Backend>(&self, f: &mut Frame<B>) { - 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<Rect> { + 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<f64>) -> impl Widget { List::new( stack .iter() - .map(|f| ListItem::new(format!("{}", f))) + .map(|f| ListItem::new(format!(" {}", f))) .collect::<Vec<ListItem>>(), ) + .block(Block::default().borders(Borders::ALL)) } fn version_number_widget() -> impl Widget { |