From 919d84b44c025a51b2109139895d299dd23eeed4 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Sun, 1 Dec 2024 09:54:49 -0500 Subject: [PATCH] wip: ui: esc cancells editing a cell --- src/ui/mod.rs | 14 +++++++++----- src/ui/test.rs | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 8d9cfa0..d77123b 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -202,7 +202,8 @@ impl<'ws> Workspace<'ws> { ], Modality::CellEdit => vec![ "Edit Mode:".to_string(), - "* ESC, ENTER/RETURN: Exit edit mode".to_string(), + "* ENTER/RETURN: Exit edit mode and save changes".to_string(), + "* ESC: Exit edit mode and discard changes".to_string(), "Otherwise edit as normal".to_string(), ], Modality::Command => vec![ @@ -252,7 +253,8 @@ impl<'ws> Workspace<'ws> { self.enter_dialog_mode(self.render_help_text()); return Ok(None); } - KeyCode::Esc | KeyCode::Enter => self.exit_edit_mode()?, + KeyCode::Enter => self.exit_edit_mode(true)?, + KeyCode::Esc => self.exit_edit_mode(false)?, _ => { // NOOP } @@ -495,15 +497,17 @@ impl<'ws> Workspace<'ws> { Ok(()) } - fn exit_edit_mode(&mut self) -> Result<()> { + fn exit_edit_mode(&mut self, keep: bool) -> Result<()> { self.text_area.set_cursor_line_style(Style::default()); self.text_area.set_cursor_style(Style::default()); let contents = self.text_area.lines().join("\n"); - if self.state.dirty { + if self.state.dirty && keep{ self.book.edit_current_cell(contents)?; self.book.evaluate(); - self.state.dirty = false; + } else { + self.text_area = reset_text_area(self.book.get_current_cell_contents()?); } + self.state.dirty = false; self.enter_navigation_mode(); Ok(()) } diff --git a/src/ui/test.rs b/src/ui/test.rs index 7869cfa..d3f0e6c 100644 --- a/src/ui/test.rs +++ b/src/ui/test.rs @@ -298,3 +298,20 @@ fn test_command_mode_help_keycode() { assert_eq!(Some(&Modality::Dialog), ws.state.modality_stack.last()); assert_eq!(edit_help, ws.state.popup); } + +#[test] +fn test_edit_mode_esc_keycode() { + let mut ws = + Workspace::new_empty("en", "America/New_York").expect("Failed to get empty workbook"); + assert_eq!(Some(&Modality::Navigate), ws.state.modality_stack.last()); + ws.handle_input(construct_key_event(KeyCode::Char('i'))) + .expect("Failed to handle 'i' key"); + assert_eq!(Some(&Modality::CellEdit), ws.state.modality_stack.last()); + ws.handle_input(construct_key_event(KeyCode::Char('a'))) + .expect("Failed to handle 'a' key event"); + ws.handle_input(construct_key_event(KeyCode::Esc)) + .expect("Failed to handle 'esc' key event"); + assert_eq!("", ws.book.get_current_cell_contents().expect("Failed to get current cell contents")); + assert_eq!("", ws.text_area.lines().join("\n")); +} +