aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--src/ui.rs29
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<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 {