From d9ffe5c43ee3ee4497ee88af6212fe868761e1dc Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 1 Aug 2024 20:56:33 +0200 Subject: fix cell typing --- src/widgets/sheetview/mod.rs | 48 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'src/widgets/sheetview') diff --git a/src/widgets/sheetview/mod.rs b/src/widgets/sheetview/mod.rs index 7b539ea..fa11d1d 100644 --- a/src/widgets/sheetview/mod.rs +++ b/src/widgets/sheetview/mod.rs @@ -12,6 +12,7 @@ use crate::{ config::{theme::style, GlobalConfig}, lua, sheet::{ + cell::Cell, eval::EvalFunction, register::{Register, SheetId}, Sheet, @@ -163,9 +164,50 @@ impl SheetView { self.mode = SheetViewMode::Command; self.bar.set_input_mode(true) } + KeyCode::Enter => { + self.mode = SheetViewMode::Insert; + self.bar.set_input_mode(true); + } _ => {} }, - SheetViewMode::Insert => {} + SheetViewMode::Insert => match event.code { + KeyCode::Enter => { + let lock = Register::get(self.sheet).unwrap(); + let mut sheet = lock.write().unwrap(); + + if let Some(_) = self.selection_anchor { + self.selection().iter().map(|(r, c)| (*r, *c)).collect() + } else { + vec![self.cursor] + } + .into_iter() + .for_each(|(r, c)| { + sheet.set_cell(r as usize, c as usize, { + let s = self.bar.input().unwrap(); + match s.parse() { + Ok(n) => Cell::Number(n), + Err(_) => Cell::String(s.to_string()), + } + }) + }); + + self.bar.set_input_mode(false); + if self.selection_anchor.is_some() { + self.mode = SheetViewMode::Visual; + } else { + self.mode = SheetViewMode::Normal; + } + } + KeyCode::Esc => { + if self.selection_anchor.is_some() { + self.mode = SheetViewMode::Visual; + } else { + self.mode = SheetViewMode::Normal; + } + self.bar.set_input_mode(false); + } + _ => self.bar.handle_keyevent(event), + }, SheetViewMode::Visual => match event.code { KeyCode::Char('j') => self.move_cursor_by((1, 0)), KeyCode::Char('k') => self.move_cursor_by((-1, 0)), @@ -183,6 +225,10 @@ impl SheetView { self.mode = SheetViewMode::Command; self.bar.set_input_mode(true) } + KeyCode::Enter => { + self.mode = SheetViewMode::Insert; + self.bar.set_input_mode(true); + } _ => {} }, SheetViewMode::Command => match event.code { -- cgit v1.2.3-70-g09d2