From 6e6e7581b4c8575dd379f20a786108ce4edcd9c8 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Wed, 1 Feb 2023 19:50:32 -0330 Subject: refactor --- src/input.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/input.rs (limited to 'src/input.rs') diff --git a/src/input.rs b/src/input.rs new file mode 100644 index 0000000..5ffaec8 --- /dev/null +++ b/src/input.rs @@ -0,0 +1,45 @@ +use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; + +use crate::{Calculator, Operator, Signal}; + +impl Calculator { + pub fn handle_input(&mut self, key: KeyEvent) -> Signal { + match key.modifiers { + KeyModifiers::CONTROL => match key.code { + KeyCode::Char('c') => { + return Signal::Exit; + } + _ => {} + }, + KeyModifiers::NONE => match key.code { + KeyCode::Char('q') => { + return Signal::Exit; + } + KeyCode::Char(c) => { + if c.is_ascii_digit() { + self.input_buffer.push(c); + } else if c == '.' && !self.input_buffer.contains('.') { + if self.input_buffer.len() == 0 { + self.input_buffer.push('0'); + } + self.input_buffer.push(c); + } else if let Ok(op) = Operator::parse(c) { + if self.input_buffer.len() > 0 { + self.push_buffer_to_stack(); + } + self.perform_operation(op); + } + } + KeyCode::Enter if self.input_buffer.len() > 0 => { + self.push_buffer_to_stack(); + } + KeyCode::Backspace => { + self.input_buffer.pop(); + } + _ => {} + }, + _ => {} + } + return Signal::None; + } +} -- cgit v1.2.3