From b37397acb82483ef79ff943d34accc722ff1920c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher=20Andr=C3=A9s?= Date: Sun, 26 May 2024 21:28:00 +0200 Subject: [PATCH] UPDATE: Adds ability to show/hide grid lines (#71) --- base/src/model.rs | 7 ++++ base/src/new_empty.rs | 1 + base/src/test/user_model/mod.rs | 1 + base/src/test/user_model/test_grid_lines.rs | 42 ++++++++++++++++++++ base/src/types.rs | 2 + base/src/user_model.rs | 39 +++++++++++++++++- bindings/wasm/src/lib.rs | 16 ++++++++ xlsx/src/import/worksheets.rs | 5 +++ xlsx/tests/NoGrid.xlsx | Bin 0 -> 10923 bytes xlsx/tests/example.ic | Bin 4778 -> 4780 bytes xlsx/tests/test.rs | 21 ++++++++++ 11 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 base/src/test/user_model/test_grid_lines.rs create mode 100644 xlsx/tests/NoGrid.xlsx diff --git a/base/src/model.rs b/base/src/model.rs index a029acd..695ec57 100644 --- a/base/src/model.rs +++ b/base/src/model.rs @@ -683,6 +683,13 @@ impl Model { Err(format!("Invalid color: {}", color)) } + /// Makes the grid lines in the sheet visible (`true`) or hidden (`false`) + pub fn set_show_grid_lines(&mut self, sheet: u32, show_grid_lines: bool) -> Result<(), String> { + let worksheet = self.workbook.worksheet_mut(sheet)?; + worksheet.show_grid_lines = show_grid_lines; + Ok(()) + } + fn get_cell_value(&self, cell: &Cell, cell_reference: CellReferenceIndex) -> CalcResult { use Cell::*; match cell { diff --git a/base/src/new_empty.rs b/base/src/new_empty.rs index 8d61ce0..3b01cc4 100644 --- a/base/src/new_empty.rs +++ b/base/src/new_empty.rs @@ -65,6 +65,7 @@ impl Model { color: Default::default(), frozen_columns: 0, frozen_rows: 0, + show_grid_lines: true, views, } } diff --git a/base/src/test/user_model/mod.rs b/base/src/test/user_model/mod.rs index a190c0e..646abfc 100644 --- a/base/src/test/user_model/mod.rs +++ b/base/src/test/user_model/mod.rs @@ -3,6 +3,7 @@ mod test_clear_cells; mod test_diff_queue; mod test_evaluation; mod test_general; +mod test_grid_lines; mod test_rename_sheet; mod test_row_column; mod test_styles; diff --git a/base/src/test/user_model/test_grid_lines.rs b/base/src/test/user_model/test_grid_lines.rs new file mode 100644 index 0000000..6abc7d9 --- /dev/null +++ b/base/src/test/user_model/test_grid_lines.rs @@ -0,0 +1,42 @@ +#![allow(clippy::unwrap_used)] + +use crate::test::util::new_empty_model; +use crate::UserModel; + +#[test] +fn basic_tests() { + let model = new_empty_model(); + let mut model = UserModel::from_model(model); + model.new_sheet(); + + // default sheet has show_grid_lines = true + assert_eq!(model.get_show_grid_lines(0), Ok(true)); + + // default new sheet has show_grid_lines = true + assert_eq!(model.get_show_grid_lines(1), Ok(true)); + + // wrong sheet number + assert_eq!( + model.get_show_grid_lines(2), + Err("Invalid sheet index".to_string()) + ); + + // we can set it + model.set_show_grid_lines(1, false).unwrap(); + assert_eq!(model.get_show_grid_lines(1), Ok(false)); + assert_eq!(model.get_show_grid_lines(0), Ok(true)); + + model.undo().unwrap(); + + assert_eq!(model.get_show_grid_lines(1), Ok(true)); + assert_eq!(model.get_show_grid_lines(0), Ok(true)); + + model.redo().unwrap(); + + let send_queue = model.flush_send_queue(); + let mut model2 = UserModel::from_model(new_empty_model()); + model2.apply_external_diffs(&send_queue).unwrap(); + + assert_eq!(model2.get_show_grid_lines(1), Ok(false)); + assert_eq!(model2.get_show_grid_lines(0), Ok(true)); +} diff --git a/base/src/types.rs b/base/src/types.rs index 042896f..ebda7c2 100644 --- a/base/src/types.rs +++ b/base/src/types.rs @@ -111,6 +111,8 @@ pub struct Worksheet { pub frozen_rows: i32, pub frozen_columns: i32, pub views: HashMap, + /// Whether or not to show the grid lines in the worksheet + pub show_grid_lines: bool, } /// Internal representation of Excel's sheet_data diff --git a/base/src/user_model.rs b/base/src/user_model.rs index cc10259..7fb7bbb 100644 --- a/base/src/user_model.rs +++ b/base/src/user_model.rs @@ -130,7 +130,11 @@ enum Diff { old_value: String, new_value: String, }, - // FIXME: we are missing SetViewDiffs + SetShowGridLines { + sheet: u32, + old_value: bool, + new_value: bool, + }, // FIXME: we are missing SetViewDiffs } type DiffList = Vec; @@ -1107,6 +1111,25 @@ impl UserModel { } Ok(()) } + + /// Set the gid lines in the worksheet to visible (`true`) or hidden (`false`) + pub fn set_show_grid_lines(&mut self, sheet: u32, show_grid_lines: bool) -> Result<(), String> { + let old_value = self.model.workbook.worksheet(sheet)?.show_grid_lines; + self.model.set_show_grid_lines(sheet, show_grid_lines)?; + + self.push_diff_list(vec![Diff::SetShowGridLines { + sheet, + new_value: show_grid_lines, + old_value, + }]); + Ok(()) + } + + /// Returns true in the grid lines for + pub fn get_show_grid_lines(&self, sheet: u32) -> Result { + Ok(self.model.workbook.worksheet(sheet)?.show_grid_lines) + } + // **** Private methods ****** // fn push_diff_list(&mut self, diff_list: DiffList) { @@ -1270,6 +1293,13 @@ impl UserModel { } => { self.model.set_sheet_color(*index, old_value)?; } + Diff::SetShowGridLines { + sheet, + old_value, + new_value: _, + } => { + self.model.set_show_grid_lines(*sheet, *old_value)?; + } } } if needs_evaluation { @@ -1390,6 +1420,13 @@ impl UserModel { } => { self.model.set_sheet_color(*index, new_value)?; } + Diff::SetShowGridLines { + sheet, + old_value: _, + new_value, + } => { + self.model.set_show_grid_lines(*sheet, *new_value)?; + } } } diff --git a/bindings/wasm/src/lib.rs b/bindings/wasm/src/lib.rs index f7ce52f..0af5018 100644 --- a/bindings/wasm/src/lib.rs +++ b/bindings/wasm/src/lib.rs @@ -338,4 +338,20 @@ impl Model { .set_top_left_visible_cell(top_row, top_column) .map_err(to_js_error) } + + #[wasm_bindgen(js_name = "setShowGridLines")] + pub fn set_show_grid_lines( + &mut self, + sheet: u32, + show_grid_lines: bool, + ) -> Result<(), JsError> { + self.model + .set_show_grid_lines(sheet, show_grid_lines) + .map_err(to_js_error) + } + + #[wasm_bindgen(js_name = "getShowGridLines")] + pub fn get_show_grid_lines(&mut self, sheet: u32) -> Result { + self.model.get_show_grid_lines(sheet).map_err(to_js_error) + } } diff --git a/xlsx/src/import/worksheets.rs b/xlsx/src/import/worksheets.rs index 3b291bb..e529842 100644 --- a/xlsx/src/import/worksheets.rs +++ b/xlsx/src/import/worksheets.rs @@ -544,6 +544,7 @@ struct SheetView { frozen_columns: i32, frozen_rows: i32, range: [i32; 4], + show_grid_lines: bool, } impl Default for SheetView { @@ -555,6 +556,7 @@ impl Default for SheetView { frozen_rows: 0, frozen_columns: 0, range: [1, 1, 1, 1], + show_grid_lines: true, } } } @@ -608,6 +610,7 @@ fn get_sheet_view(ws: Node) -> SheetView { let sheet_view = sheet_view[0]; let is_selected = sheet_view.attribute("tabSelected").unwrap_or("0") == "1"; + let show_grid_lines = sheet_view.attribute("showGridLines").unwrap_or("1") == "1"; let pane = sheet_view .children() @@ -654,6 +657,7 @@ fn get_sheet_view(ws: Node) -> SheetView { selected_row, selected_column, is_selected, + show_grid_lines, range: [row1, column1, row2, column2], } } else { @@ -980,6 +984,7 @@ pub(super) fn load_sheet( comments: settings.comments, frozen_rows: sheet_view.frozen_rows, frozen_columns: sheet_view.frozen_columns, + show_grid_lines: sheet_view.show_grid_lines, views, }, sheet_view.is_selected, diff --git a/xlsx/tests/NoGrid.xlsx b/xlsx/tests/NoGrid.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..24c3114caaa628171896e07c38fb4144b6727c13 GIT binary patch literal 10923 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 literal 0 HcmV?d00001 diff --git a/xlsx/tests/example.ic b/xlsx/tests/example.ic index 7e99ea30d823e8922a4194e07a48cfa8aa5f9a36..1d312197a4642cecfb0ee515a4f6a69038465698 100644 GIT binary patch delta 1277 zcmZ8ey>A>v6rYbbJ2U&edwbs>zB`|NNu0!-fjCBryg6+g(xicc3Mr1F5FwBfIWpa) zNCiR^i&B7uLO~NzSTYg~g(+yLs3CtrB*2J&fVa1^ipXzw-p6m=y!YnKv$gNnj(+2d zfHynJj$5^^*Bknh=|(>q(ZmYt6hdazl+dx{k@UcFmEhWT1Z5n|qS67&vo!0w4c@DP z=q7&XNYx6c-Hw`_dOT2+GawZ35EBGXa>|$x$Wn{bfEB-w4t_3U`TNjYFiHts0<8)q z6Hz>k0OD|F0cV_o@3?{Eaz(YR?PWQvNP&anQkPrc3O{fZQi=j7PKBi~k}5@+XM@mw zq+%y@1B}p~a@<8|qv;1xECIX1VnuI`AKEHrkq*2ifeqtc(YE;t52$2Za1dw;><#Y< z0);59kMY293aE<#7J8XNhf6S&ys#Eaw-n$xu@1PUTt5^ts@Y-4a9HK($#wboHX&rn z2-&&!<&(X)hm(U8$UVJ(eV&n&rEDk(5Hg0e5F{NJAS4~4JD$%cb3}$}IzBv{KA29Y z4-UtNx3X-KA)8@rmK|ULD3bgiX~6&xi_d2Gzy8Lh?Kca{@hg~N&B3Y^=G4E`usI)XrcT3$X{gV$3PmFHmUs)@Q zDk?N=ctT1TpBP^m-7YVQ8f5`Q)YTu-Po_{NwHmNR`L+uD-g zDn=+@^`_BTKRDAFw)*{Ud$clWG?RL-*626e{Z^+t2-nuflXDvvE}q9sR1h*_lyHJJ zE(8#zlx=HGq^)$xRWk62zljb7DK4>XunAanhTSClRqGeiGPs(onb@PfbU%CY_1(XJ z-2Lo|bf10ti+R^1{ma!~y!+>iSNPN28^=dKeE#pxCXS@}V?E4&((3^*kgGR0uik%n u>*IrmALak(c76Mu5ANJKn2qLJFRjZtwQJ6f*}1y4b9}}Al^zTCJL^CA(2B?a delta 1343 zcmZ8gOK;p%6uvL}-s`tL&b%ja9A~EQ;1p-tIEuItPMsd5>SqZwW`WoUcfu>-Ss0HYFu*0S9 zXj$+L39T@=p8V#O)^S)wT7}sNWlOx})CepuZ9iTb=eO z8>hkMnX~6EoM-R}!ax)u3}ocWss=&`izCYtQc7@7;CTr7TT0Ei@jAN1EckHWyMH2p z+(LVrFEqXm>s36yuH$j>`4#Rw{p{E2t!nS9_n-f$?*#t?fU1lFm z|90e;Z~yhjv`MOemSdkV&K^9v`O(8iA8x$4b+!IS_SP=H^}(Gx5A*eM`{dV-j$Pf} Rsj(FwT(N$`2h#b@d;!Yvi=_Yn diff --git a/xlsx/tests/test.rs b/xlsx/tests/test.rs index 7e69c3c..822d32c 100644 --- a/xlsx/tests/test.rs +++ b/xlsx/tests/test.rs @@ -48,6 +48,27 @@ fn test_example() { assert_eq!(workbook, model2.workbook, "{:?}", s); } +#[test] +fn no_grid() { + let model = load_from_xlsx("tests/NoGrid.xlsx", "en", "UTC").unwrap(); + let workbook = model.workbook; + let ws = &workbook.worksheets; + + // NoGrid does not show grid lines + let no_grid_sheet = &ws[0]; + assert_eq!(no_grid_sheet.name, "NoGrid".to_string()); + assert!(!no_grid_sheet.show_grid_lines); + + let sheet2 = &ws[1]; + assert_eq!(no_grid_sheet.name, "NoGrid".to_string()); + assert!(sheet2.show_grid_lines); + + let no_grid_no_headers_sheet = &ws[2]; + assert_eq!(no_grid_sheet.name, "NoGrid".to_string()); + // There is also no headers + assert!(!no_grid_no_headers_sheet.show_grid_lines); +} + #[test] fn test_save_to_xlsx() { let mut model = load_from_xlsx("tests/example.xlsx", "en", "UTC").unwrap();