diff --git a/base/src/test/user_model/test_diff_queue.rs b/base/src/test/user_model/test_diff_queue.rs index 8449cad..6e7cef4 100644 --- a/base/src/test/user_model/test_diff_queue.rs +++ b/base/src/test/user_model/test_diff_queue.rs @@ -65,8 +65,8 @@ fn queue_undo_redo_multiple() { model1.set_user_input(0, row, 17, "=ROW()").unwrap(); } - model1.insert_row(0, 3).unwrap(); - model1.insert_row(0, 3).unwrap(); + model1.insert_rows(0, 3, 1).unwrap(); + model1.insert_rows(0, 3, 1).unwrap(); // undo al of them while model1.can_undo() { diff --git a/base/src/test/user_model/test_general.rs b/base/src/test/user_model/test_general.rs index d54b0ef..d71b6f3 100644 --- a/base/src/test/user_model/test_general.rs +++ b/base/src/test/user_model/test_general.rs @@ -62,7 +62,7 @@ fn insert_remove_rows() { assert!(model.set_rows_height(0, 5, 5, 3.0 * height).is_ok()); // remove the row - assert!(model.delete_row(0, 5).is_ok()); + assert!(model.delete_rows(0, 5, 1).is_ok()); // Row 5 has now the normal height assert_eq!(model.get_row_height(0, 5), Ok(height)); // There is no value in A5 @@ -99,7 +99,7 @@ fn insert_remove_columns() { assert_eq!(model.get_column_width(0, 5).unwrap(), 3.0 * column_width); // remove the column - assert!(model.delete_column(0, 5).is_ok()); + assert!(model.delete_columns(0, 5, 1).is_ok()); // Column 5 has now the normal width assert_eq!(model.get_column_width(0, 5), Ok(column_width)); // There is no value in E5 diff --git a/base/src/test/user_model/test_row_column.rs b/base/src/test/user_model/test_row_column.rs index b667ebd..c8ef68e 100644 --- a/base/src/test/user_model/test_row_column.rs +++ b/base/src/test/user_model/test_row_column.rs @@ -14,7 +14,7 @@ fn simple_insert_row() { for row in 1..5 { assert!(model.set_user_input(sheet, row, column, "123").is_ok()); } - assert!(model.insert_row(sheet, 3).is_ok()); + assert!(model.insert_rows(sheet, 3, 1).is_ok()); assert_eq!( model.get_formatted_cell_value(sheet, 3, column).unwrap(), "" @@ -40,7 +40,7 @@ fn simple_insert_column() { for column in 1..5 { assert!(model.set_user_input(sheet, row, column, "123").is_ok()); } - assert!(model.insert_column(sheet, 3).is_ok()); + assert!(model.insert_columns(sheet, 3, 1).is_ok()); assert_eq!(model.get_formatted_cell_value(sheet, row, 3).unwrap(), ""); assert!(model.undo().is_ok()); @@ -62,7 +62,7 @@ fn simple_delete_column() { .set_columns_width(0, 5, 5, DEFAULT_COLUMN_WIDTH * 3.0) .unwrap(); - model.delete_column(0, 5).unwrap(); + model.delete_columns(0, 5, 1).unwrap(); assert_eq!(model.get_formatted_cell_value(0, 2, 5), Ok("".to_string())); assert_eq!(model.get_column_width(0, 5), Ok(DEFAULT_COLUMN_WIDTH)); @@ -92,20 +92,20 @@ fn delete_column_errors() { let model = new_empty_model(); let mut model = UserModel::from_model(model); assert_eq!( - model.delete_column(1, 1), + model.delete_columns(1, 1, 1), Err("Invalid sheet index".to_string()) ); assert_eq!( - model.delete_column(0, 0), + model.delete_columns(0, 0, 1), Err("Column number '0' is not valid.".to_string()) ); assert_eq!( - model.delete_column(0, LAST_COLUMN + 1), - Err("Column number '16385' is not valid.".to_string()) + model.delete_columns(0, LAST_COLUMN + 1, 1), + Err(format!("Column number '{}' is not valid.", LAST_COLUMN + 1)) ); - assert_eq!(model.delete_column(0, LAST_COLUMN), Ok(())); + assert_eq!(model.delete_columns(0, LAST_COLUMN, 1), Ok(())); } #[test] @@ -119,7 +119,7 @@ fn simple_delete_row() { .set_rows_height(0, 15, 15, DEFAULT_ROW_HEIGHT * 3.0) .unwrap(); - model.delete_row(0, 15).unwrap(); + model.delete_rows(0, 15, 1).unwrap(); assert_eq!(model.get_formatted_cell_value(0, 15, 6), Ok("".to_string())); assert_eq!(model.get_row_height(0, 15), Ok(DEFAULT_ROW_HEIGHT)); @@ -150,7 +150,7 @@ fn simple_delete_row_no_style() { let mut model = UserModel::from_model(model); model.set_user_input(0, 15, 4, "3").unwrap(); model.set_user_input(0, 15, 6, "=D15*2").unwrap(); - model.delete_row(0, 15).unwrap(); + model.delete_rows(0, 15, 1).unwrap(); assert_eq!(model.get_formatted_cell_value(0, 15, 6), Ok("".to_string())); } @@ -180,14 +180,14 @@ fn insert_row_evaluates() { model.set_user_input(0, 1, 1, "42").unwrap(); model.set_user_input(0, 1, 2, "=A1*2").unwrap(); - assert!(model.insert_row(0, 1).is_ok()); + assert!(model.insert_rows(0, 1, 1).is_ok()); assert_eq!(model.get_formatted_cell_value(0, 2, 2).unwrap(), "84"); model.undo().unwrap(); assert_eq!(model.get_formatted_cell_value(0, 1, 2).unwrap(), "84"); model.redo().unwrap(); assert_eq!(model.get_formatted_cell_value(0, 2, 2).unwrap(), "84"); - model.delete_row(0, 1).unwrap(); + model.delete_rows(0, 1, 1).unwrap(); assert_eq!(model.get_formatted_cell_value(0, 1, 2).unwrap(), "84"); assert_eq!(model.get_cell_content(0, 1, 2).unwrap(), "=A1*2"); } @@ -199,7 +199,7 @@ fn insert_column_evaluates() { model.set_user_input(0, 1, 1, "42").unwrap(); model.set_user_input(0, 10, 1, "=A1*2").unwrap(); - assert!(model.insert_column(0, 1).is_ok()); + assert!(model.insert_columns(0, 1, 1).is_ok()); assert_eq!(model.get_formatted_cell_value(0, 10, 2).unwrap(), "84"); model.undo().unwrap(); @@ -207,7 +207,7 @@ fn insert_column_evaluates() { model.redo().unwrap(); assert_eq!(model.get_formatted_cell_value(0, 10, 2).unwrap(), "84"); - model.delete_column(0, 1).unwrap(); + model.delete_columns(0, 1, 1).unwrap(); assert_eq!(model.get_formatted_cell_value(0, 10, 1).unwrap(), "84"); assert_eq!(model.get_cell_content(0, 10, 1).unwrap(), "=A1*2"); } diff --git a/base/src/user_model/common.rs b/base/src/user_model/common.rs index 90c510a..0ab2bdd 100644 --- a/base/src/user_model/common.rs +++ b/base/src/user_model/common.rs @@ -858,38 +858,6 @@ impl UserModel { Ok(()) } - /// Inserts a row - /// - /// See also: - /// * [Model::insert_rows] - pub fn insert_row(&mut self, sheet: u32, row: i32) -> Result<(), String> { - self.insert_rows(sheet, row, 1) - } - - /// Deletes a row - /// - /// See also: - /// * [Model::delete_rows] - pub fn delete_row(&mut self, sheet: u32, row: i32) -> Result<(), String> { - self.delete_rows(sheet, row, 1) - } - - /// Inserts a column - /// - /// See also: - /// * [Model::insert_columns] - pub fn insert_column(&mut self, sheet: u32, column: i32) -> Result<(), String> { - self.insert_columns(sheet, column, 1) - } - - /// Deletes a column - /// - /// See also: - /// * [Model::delete_columns] - pub fn delete_column(&mut self, sheet: u32, column: i32) -> Result<(), String> { - self.delete_columns(sheet, column, 1) - } - /// Inserts several rows at once pub fn insert_rows(&mut self, sheet: u32, row: i32, row_count: i32) -> Result<(), String> { let mut diff_list = Vec::new(); diff --git a/bindings/nodejs/index.d.ts b/bindings/nodejs/index.d.ts index 8cd16e4..9f098bc 100644 --- a/bindings/nodejs/index.d.ts +++ b/bindings/nodejs/index.d.ts @@ -59,10 +59,10 @@ export declare class UserModel { setSheetColor(sheet: number, color: string): void rangeClearAll(sheet: number, startRow: number, startColumn: number, endRow: number, endColumn: number): void rangeClearContents(sheet: number, startRow: number, startColumn: number, endRow: number, endColumn: number): void - insertRow(sheet: number, row: number): void - insertColumn(sheet: number, column: number): void - deleteRow(sheet: number, row: number): void - deleteColumn(sheet: number, column: number): void + insertRows(sheet: number, row: number, rowCount: number): void + insertColumns(sheet: number, column: number, columnCount: number): void + deleteRows(sheet: number, row: number, rowCount: number): void + deleteColumns(sheet: number, column: number, columnCount: number): void setRowHeight(sheet: number, row: number, height: number): void setColumnWidth(sheet: number, column: number, width: number): void getRowHeight(sheet: number, row: number): number diff --git a/bindings/nodejs/src/user_model.rs b/bindings/nodejs/src/user_model.rs index b1ebcb9..f905f83 100644 --- a/bindings/nodejs/src/user_model.rs +++ b/bindings/nodejs/src/user_model.rs @@ -183,24 +183,36 @@ impl UserModel { .map_err(to_js_error) } - #[napi(js_name = "insertRow")] - pub fn insert_row(&mut self, sheet: u32, row: i32) -> Result<()> { - self.model.insert_row(sheet, row).map_err(to_js_error) + #[napi(js_name = "insertRows")] + pub fn insert_rows(&mut self, sheet: u32, row: i32, row_count: i32) -> Result<()> { + self + .model + .insert_rows(sheet, row, row_count) + .map_err(to_js_error) } - #[napi(js_name = "insertColumn")] - pub fn insert_column(&mut self, sheet: u32, column: i32) -> Result<()> { - self.model.insert_column(sheet, column).map_err(to_js_error) + #[napi(js_name = "insertColumns")] + pub fn insert_columns(&mut self, sheet: u32, column: i32, column_count: i32) -> Result<()> { + self + .model + .insert_columns(sheet, column, column_count) + .map_err(to_js_error) } - #[napi(js_name = "deleteRow")] - pub fn delete_row(&mut self, sheet: u32, row: i32) -> Result<()> { - self.model.delete_row(sheet, row).map_err(to_js_error) + #[napi(js_name = "deleteRows")] + pub fn delete_rows(&mut self, sheet: u32, row: i32, row_count: i32) -> Result<()> { + self + .model + .delete_rows(sheet, row, row_count) + .map_err(to_js_error) } - #[napi(js_name = "deleteColumn")] - pub fn delete_column(&mut self, sheet: u32, column: i32) -> Result<()> { - self.model.delete_column(sheet, column).map_err(to_js_error) + #[napi(js_name = "deleteColumns")] + pub fn delete_columns(&mut self, sheet: u32, column: i32, column_count: i32) -> Result<()> { + self + .model + .delete_columns(sheet, column, column_count) + .map_err(to_js_error) } #[napi(js_name = "setRowsHeight")] diff --git a/bindings/wasm/src/lib.rs b/bindings/wasm/src/lib.rs index e67324c..ab512e5 100644 --- a/bindings/wasm/src/lib.rs +++ b/bindings/wasm/src/lib.rs @@ -196,26 +196,6 @@ impl Model { .map_err(to_js_error) } - #[wasm_bindgen(js_name = "insertRow")] - pub fn insert_row(&mut self, sheet: u32, row: i32) -> Result<(), JsError> { - self.model.insert_row(sheet, row).map_err(to_js_error) - } - - #[wasm_bindgen(js_name = "insertColumn")] - pub fn insert_column(&mut self, sheet: u32, column: i32) -> Result<(), JsError> { - self.model.insert_column(sheet, column).map_err(to_js_error) - } - - #[wasm_bindgen(js_name = "deleteRow")] - pub fn delete_row(&mut self, sheet: u32, row: i32) -> Result<(), JsError> { - self.model.delete_row(sheet, row).map_err(to_js_error) - } - - #[wasm_bindgen(js_name = "deleteColumn")] - pub fn delete_column(&mut self, sheet: u32, column: i32) -> Result<(), JsError> { - self.model.delete_column(sheet, column).map_err(to_js_error) - } - #[wasm_bindgen(js_name = "insertRows")] pub fn insert_rows(&mut self, sheet: u32, row: i32, row_count: i32) -> Result<(), JsError> { self.model diff --git a/webapp/IronCalc/src/components/Worksheet/Worksheet.tsx b/webapp/IronCalc/src/components/Worksheet/Worksheet.tsx index a97b583..39fb6ed 100644 --- a/webapp/IronCalc/src/components/Worksheet/Worksheet.tsx +++ b/webapp/IronCalc/src/components/Worksheet/Worksheet.tsx @@ -340,22 +340,22 @@ const Worksheet = forwardRef( anchorEl={cellOutline.current} onInsertRowAbove={(): void => { const view = model.getSelectedView(); - model.insertRow(view.sheet, view.row); + model.insertRows(view.sheet, view.row, 1); setContextMenuOpen(false); }} onInsertRowBelow={(): void => { const view = model.getSelectedView(); - model.insertRow(view.sheet, view.row + 1); + model.insertRows(view.sheet, view.row + 1, 1); setContextMenuOpen(false); }} onInsertColumnLeft={(): void => { const view = model.getSelectedView(); - model.insertColumn(view.sheet, view.column); + model.insertColumns(view.sheet, view.column, 1); setContextMenuOpen(false); }} onInsertColumnRight={(): void => { const view = model.getSelectedView(); - model.insertColumn(view.sheet, view.column + 1); + model.insertColumns(view.sheet, view.column + 1, 1); setContextMenuOpen(false); }} onFreezeColumns={(): void => { @@ -380,12 +380,12 @@ const Worksheet = forwardRef( }} onDeleteRow={(): void => { const view = model.getSelectedView(); - model.deleteRow(view.sheet, view.row); + model.deleteRows(view.sheet, view.row, 1); setContextMenuOpen(false); }} onDeleteColumn={(): void => { const view = model.getSelectedView(); - model.deleteColumn(view.sheet, view.column); + model.deleteColumns(view.sheet, view.column, 1); setContextMenuOpen(false); }} row={model.getSelectedView().row}