aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui.rs
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2023-02-01 19:50:32 -0330
committerSam Anthony <sam@samanthony.xyz>2023-02-01 19:50:32 -0330
commit6e6e7581b4c8575dd379f20a786108ce4edcd9c8 (patch)
tree5b1ecf5b07d62e25648a23dd1a2d43260b2ff365 /src/ui.rs
parentdfbaad1f881be6ca3e93e09da360652ba5023b7d (diff)
downloadpfc-6e6e7581b4c8575dd379f20a786108ce4edcd9c8.zip
refactor
Diffstat (limited to 'src/ui.rs')
-rw-r--r--src/ui.rs30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/ui.rs b/src/ui.rs
index 9133f1c..bb5057d 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -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();