From 4e17a27eb8d36868bcf7e1edf32affd84412a1f4 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 22 Jul 2023 21:30:53 -0230 Subject: init go module --- src/input.rs | 94 ------------------------------------------------------------ 1 file changed, 94 deletions(-) delete mode 100644 src/input.rs (limited to 'src/input.rs') diff --git a/src/input.rs b/src/input.rs deleted file mode 100644 index 2d982e5..0000000 --- a/src/input.rs +++ /dev/null @@ -1,94 +0,0 @@ -use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; - -use crate::{Calculator, Constant, Function, 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::SHIFT => match key.code { - KeyCode::Char('Q') => { - return Signal::Exit; - } - KeyCode::Char('J' | 'K') => self.swap(), - KeyCode::Char('D') => { - self.input_buffer = String::new(); - } - KeyCode::Char('C') => self.clear(), - KeyCode::Char('A') => { - self.angle_mode = self.angle_mode.toggle(); - } - KeyCode::Char('N') => { - if self.input_buffer.len() > 0 { - if let Ok(f) = self.input_buffer.parse::() { - self.input_buffer = format!("{}", -f); - } - } else if let Some(v) = self.stack.pop() { - self.stack.push(-v); - } - } - _ => {} - }, - KeyModifiers::NONE => match key.code { - KeyCode::Char(c) => self.push_to_buffer(c), - KeyCode::Backspace => { - self.input_buffer.pop(); - } - KeyCode::Enter => { - if let Ok(func) = Function::parse(&self.input_buffer) { - if let Some(val) = self.stack.pop() { - self.stack.push(func.call(val, self.angle_mode)); - } - } else if let Ok(c) = Constant::parse(&self.input_buffer) { - self.stack.push(c.value()); - } else if let Ok(bu) = self.input_buffer.parse::() { - self.stack.push(bu); - } - self.input_buffer = String::new(); - } - _ => {} - }, - _ => {} - } - return Signal::None; - } - - fn push_to_buffer(&mut self, c: char) { - 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 let Ok(c) = Constant::parse(&self.input_buffer) { - self.stack.push(c.value()); - } else if let Ok(f) = self.input_buffer.parse::() { - self.stack.push(f); - } - self.input_buffer = String::new(); - self.perform_operation(op); - } else { - self.input_buffer.push(c); - } - } - - fn swap(&mut self) { - if let Some(st) = self.stack.pop() { - if let Ok(bu) = self.input_buffer.parse::() { - self.stack.push(bu); - } - self.input_buffer = format!("{}", st); - } - } - - // Clear stack and input buffer. - fn clear(&mut self) { - self.input_buffer = String::new(); - self.stack = Vec::new(); - } -} -- cgit v1.2.3