diff --git a/base/src/user_model/common.rs b/base/src/user_model/common.rs index d77753b..727da3a 100644 --- a/base/src/user_model/common.rs +++ b/base/src/user_model/common.rs @@ -1020,12 +1020,24 @@ impl UserModel { column: i32, delta: i32, ) -> Result<(), String> { - self.model.move_column_action(sheet, column, delta) + let diff_list = vec![Diff::MoveColumn { + sheet, + column, + delta, + }]; + self.push_diff_list(diff_list); + self.model.move_column_action(sheet, column, delta)?; + self.evaluate_if_not_paused(); + Ok(()) } /// Moves a row vertically and adjusts formulas pub fn move_row_action(&mut self, sheet: u32, row: i32, delta: i32) -> Result<(), String> { - self.model.move_row_action(sheet, row, delta) + let diff_list = vec![Diff::MoveRow { sheet, row, delta }]; + self.push_diff_list(diff_list); + self.model.move_row_action(sheet, row, delta)?; + self.evaluate_if_not_paused(); + Ok(()) } /// Sets the width of a group of columns in a single diff list @@ -2308,6 +2320,21 @@ impl UserModel { self.model.delete_row_style(*sheet, *row)?; } } + Diff::MoveColumn { + sheet, + column, + delta, + } => { + // For undo, we apply the opposite move + self.model + .move_column_action(*sheet, *column + *delta, -*delta)?; + needs_evaluation = true; + } + Diff::MoveRow { sheet, row, delta } => { + // For undo, we apply the opposite move + self.model.move_row_action(*sheet, *row + *delta, -*delta)?; + needs_evaluation = true; + } } } if needs_evaluation { @@ -2515,6 +2542,18 @@ impl UserModel { } => { self.model.delete_row_style(*sheet, *row)?; } + Diff::MoveColumn { + sheet, + column, + delta, + } => { + self.model.move_column_action(*sheet, *column, *delta)?; + needs_evaluation = true; + } + Diff::MoveRow { sheet, row, delta } => { + self.model.move_row_action(*sheet, *row, *delta)?; + needs_evaluation = true; + } } } diff --git a/base/src/user_model/history.rs b/base/src/user_model/history.rs index 5613145..9d45986 100644 --- a/base/src/user_model/history.rs +++ b/base/src/user_model/history.rs @@ -165,6 +165,16 @@ pub(crate) enum Diff { new_scope: Option, new_formula: String, }, + MoveColumn { + sheet: u32, + column: i32, + delta: i32, + }, + MoveRow { + sheet: u32, + row: i32, + delta: i32, + }, // FIXME: we are missing SetViewDiffs }