From 770dc1dbc32db227981b0088226ca0ad06156144 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 18 Nov 2024 18:22:36 -0500 Subject: [PATCH] wip: ui: edit mode enhancements --- examples/test.csv | 3 --- examples/test.xlsx | Bin 0 -> 3891 bytes src/book/mod.rs | 8 ++++++-- src/ui/mod.rs | 23 +++++++++++++++-------- 4 files changed, 21 insertions(+), 13 deletions(-) delete mode 100644 examples/test.csv create mode 100644 examples/test.xlsx diff --git a/examples/test.csv b/examples/test.csv deleted file mode 100644 index ca1b615..0000000 --- a/examples/test.csv +++ /dev/null @@ -1,3 +0,0 @@ -pi,3^5,"ref(0,0)",-(1/0) -12%5,"pow(3,5)",0/NaN,"""Apollo""" -A1+A2,"if(true , sqrt(25),round(if(false,1.1,2.5)))",D2+1969, diff --git a/examples/test.xlsx b/examples/test.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..714870df7d7ad48210feaa90542dcefbaeaa7275 GIT binary patch literal 3891 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 TPCtAMd<=ff3=HQ%jaLQ$ Result<()> { - save_to_xlsx(&self.model, path)?; + // TODO(zaphar): Currently overwrites. Should we prompty in this case? + let file_path = std::path::Path::new(path); + let file = std::fs::File::create(file_path)?; + let writer = std::io::BufWriter::new(file); + save_xlsx_to_writer(&self.model, writer)?; Ok(()) } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 9044a02..5f01b6c 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -156,14 +156,9 @@ impl<'ws> Workspace<'ws> { fn handle_edit_input(&mut self, key: event::KeyEvent) -> Result> { if key.kind == KeyEventKind::Press { if let KeyCode::Esc = key.code { - self.state.modality = Modality::Navigate; - 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.dirty { - self.book.edit_current_cell(contents)?; - } - return Ok(None); + self.exit_edit_mode()?; + } else if let KeyCode::Enter = key.code { + self.exit_edit_mode()?; } } // TODO(zaphar): Some specialized editing keybinds @@ -176,6 +171,18 @@ impl<'ws> Workspace<'ws> { Ok(None) } + fn exit_edit_mode(&mut self) -> Result<(), anyhow::Error> { + self.state.modality = Modality::Navigate; + 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.dirty { + self.book.edit_current_cell(contents)?; + self.book.evaluate(); + } + Ok(()) + } + fn handle_navigation_input(&mut self, key: event::KeyEvent) -> Result> { if key.kind == KeyEventKind::Press { match key.code {