- Introduced SwapManager for sidecar journaling of buffer mutations, with a safe recovery mechanism. - Added group undo/redo functionality, allowing atomic grouping of related edits. - Implemented `SwapRecorder` and integrated it as a callback interface for mutations. - Added unit tests for swap journaling (save/load/replay) and undo grouping. - Refactored undo to support group tracking and ID management. - Updated CMake to include the new tests and swap journaling logic.
23 lines
492 B
C++
23 lines
492 B
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
|
|
enum class UndoType : std::uint8_t {
|
|
Insert,
|
|
Delete,
|
|
Paste,
|
|
Newline,
|
|
DeleteRow,
|
|
};
|
|
|
|
struct UndoNode {
|
|
UndoType type{};
|
|
int row{};
|
|
int col{};
|
|
std::uint64_t group_id = 0; // 0 means ungrouped; non-zero means undo/redo as an atomic group
|
|
std::string text;
|
|
UndoNode *parent = nullptr; // previous state; null means pre-first-edit
|
|
UndoNode *child = nullptr; // next in current timeline
|
|
UndoNode *next = nullptr; // redo branch
|
|
}; |