diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2023-02-01 19:50:32 -0330 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2023-02-01 19:50:32 -0330 |
| commit | 6e6e7581b4c8575dd379f20a786108ce4edcd9c8 (patch) | |
| tree | 5b1ecf5b07d62e25648a23dd1a2d43260b2ff365 /src/ui.rs | |
| parent | dfbaad1f881be6ca3e93e09da360652ba5023b7d (diff) | |
| download | pfc-6e6e7581b4c8575dd379f20a786108ce4edcd9c8.zip | |
refactor
Diffstat (limited to 'src/ui.rs')
| -rw-r--r-- | src/ui.rs | 30 |
1 files changed, 29 insertions, 1 deletions
@@ -6,9 +6,37 @@ use crossterm::{ use std::io; use tui::{ backend::{Backend, CrosstermBackend}, - Terminal, + layout::{Constraint, Direction, Layout}, + widgets::{List, ListItem, Paragraph}, + Frame, Terminal, }; +use crate::Calculator; + +impl Calculator { + pub fn draw<B: Backend>(&self, f: &mut Frame<B>) { + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints( + [ + Constraint::Max(u16::MAX), + Constraint::Length(self.stack.len() as u16), + Constraint::Length(1), + ] + .as_ref(), + ) + .split(f.size()); + + let items: Vec<ListItem> = (self.stack) + .iter() + .map(|f| ListItem::new(format!("{}", f))) + .collect(); + f.render_widget(List::new(items), chunks[1]); + + f.render_widget(Paragraph::new(self.input_buffer.as_str()), chunks[2]); + } +} + pub fn init_terminal() -> Result<Terminal<CrosstermBackend<io::Stdout>>, io::Error> { enable_raw_mode()?; let mut stdout = io::stdout(); |