Files
PathEditor/include/core/undo_redo.h
T
Serendipity 1f48551199 feat: 实现撤销/重做功能和CSV导出支持
- 添加撤销/重做管理器,支持添加、删除、编辑、移动等操作的撤销/重做
- 在应用上下文中集成撤销/重做管理器,最大支持50条历史记录
- 为所有基本操作(新建、编辑、删除、上移、下移、清理)添加撤销记录
- 扩展导出功能,支持CSV格式导出(除原有JSON格式外)
- 添加路径格式验证函数,确保导入数据的有效性
- 更新UI文件对话框过滤器以包含CSV格式选项
2026-05-01 22:42:56 +08:00

66 lines
1.8 KiB
C

#ifndef UNDO_REDO_H
#define UNDO_REDO_H
#include "utils/string_ext.h"
// 操作类型
typedef enum {
OP_ADD, // 添加路径
OP_DELETE, // 删除路径
OP_EDIT, // 编辑路径
OP_MOVE_UP, // 上移
OP_MOVE_DOWN, // 下移
OP_CLEAN, // 清理(批量删除)
OP_CLEAR, // 清空列表
OP_IMPORT // 导入
} OperationType;
// 目标类型(哪个列表)
typedef enum {
TARGET_SYSTEM, // 系统变量
TARGET_USER // 用户变量
} TargetType;
// 单个操作记录
typedef struct {
OperationType type;
TargetType target;
int index;
int count; // 用于批量操作(如清理、导入)
char **old_paths; // 操作前的路径列表(用于撤销)
char **new_paths; // 操作后的路径列表(用于重做)
} OpRecord;
// 撤销/重做管理器
typedef struct {
OpRecord *records;
int max_size; // 最大历史记录数
int current; // 当前指针位置(-1表示最新操作之后)
int count; // 实际记录数
} UndoRedoManager;
// 创建撤销/重做管理器
UndoRedoManager *create_undo_redo_manager(int max_size);
// 销毁撤销/重做管理器
void destroy_undo_redo_manager(UndoRedoManager *mgr);
// 添加操作记录
int push_undo_record(UndoRedoManager *mgr, const OpRecord *record);
// 执行撤销
int undo(UndoRedoManager *mgr, StringList *sys_paths, StringList *user_paths);
// 执行重做
int redo(UndoRedoManager *mgr, StringList *sys_paths, StringList *user_paths);
// 检查是否可以撤销
int can_undo(const UndoRedoManager *mgr);
// 检查是否可以重做
int can_redo(const UndoRedoManager *mgr);
// 清空历史记录
void clear_undo_redo_history(UndoRedoManager *mgr);
#endif // UNDO_REDO_H