From 7c204745ee9d052e9a872503c98a3ab7fa1d479b Mon Sep 17 00:00:00 2001 From: huttongrabiel Date: Sun, 2 Apr 2023 16:30:45 -0700 Subject: [PATCH] Spreadsheet: Add CellUndoMetadataCommand class Enables the ability to undo changes in metadata without undoing chages in data. Previously there was only CellUndoData which cannot undo things such as changes in cell background color. --- .../Spreadsheet/SpreadsheetModel.cpp | 19 +++++++++++++++++++ .../Spreadsheet/SpreadsheetModel.h | 11 +++++++++++ 2 files changed, 30 insertions(+) diff --git a/Userland/Applications/Spreadsheet/SpreadsheetModel.cpp b/Userland/Applications/Spreadsheet/SpreadsheetModel.cpp index 80254b40e7..9693de25f4 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetModel.cpp +++ b/Userland/Applications/Spreadsheet/SpreadsheetModel.cpp @@ -221,4 +221,23 @@ void CellsUndoCommand::redo() } } +CellsUndoMetadataCommand::CellsUndoMetadataCommand(Vector cell_changes) +{ + m_cell_changes = move(cell_changes); +} + +void CellsUndoMetadataCommand::undo() +{ + for (size_t i = 0; i < m_cell_changes.size(); ++i) { + m_cell_changes[i].cell().set_type_metadata(m_cell_changes[i].previous_type_metadata()); + } +} + +void CellsUndoMetadataCommand::redo() +{ + for (size_t i = 0; i < m_cell_changes.size(); ++i) { + m_cell_changes[i].cell().set_type_metadata(m_cell_changes[i].new_type_metadata()); + } +} + } diff --git a/Userland/Applications/Spreadsheet/SpreadsheetModel.h b/Userland/Applications/Spreadsheet/SpreadsheetModel.h index 346a9bbdea..4227e401e5 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetModel.h +++ b/Userland/Applications/Spreadsheet/SpreadsheetModel.h @@ -58,4 +58,15 @@ private: Vector m_cell_changes; }; +class CellsUndoMetadataCommand : public GUI::Command { +public: + CellsUndoMetadataCommand(Vector); + + virtual void undo() override; + virtual void redo() override; + +private: + Vector m_cell_changes; +}; + }