aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ui.rs42
1 files changed, 24 insertions, 18 deletions
diff --git a/src/ui.rs b/src/ui.rs
index bb5057d..36ce949 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -15,24 +15,8 @@ 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]);
-
+ let chunks = layout(self.stack.len()).split(f.size());
+ f.render_widget(stack_list(&self.stack), chunks[1]);
f.render_widget(Paragraph::new(self.input_buffer.as_str()), chunks[2]);
}
}
@@ -58,3 +42,25 @@ where
terminal.show_cursor()?;
Ok(())
}
+
+fn layout(stack_size: usize) -> Layout {
+ Layout::default()
+ .direction(Direction::Vertical)
+ .constraints(
+ [
+ Constraint::Max(u16::MAX),
+ Constraint::Length(stack_size as u16),
+ Constraint::Length(1),
+ ]
+ .as_ref(),
+ )
+}
+
+fn stack_list(stack: &Vec<f64>) -> List {
+ List::new(
+ stack
+ .iter()
+ .map(|f| ListItem::new(format!("{}", f)))
+ .collect::<Vec<ListItem>>(),
+ )
+}