feat: 重写为 Tauri + React + TypeScript (v4.0)

完全移除旧 C+IUP 代码,改用 Tauri 2.x + React 19 + TypeScript + Rust 技术栈重写。
功能与 v3.1 完全等价:

- React 前端:Tailwind CSS 4、Zustand 状态管理、i18next 国际化
- Rust 后端:winreg 注册表读写、Win32 API FFI 调用
- 核心逻辑:StringList、UndoRedoManager、PathManager、Import/Export
- 深色模式、中英文切换、键盘快捷键、合并预览
- 66 个 Vitest 单元测试

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 18:32:54 +08:00
parent cdcfd8e0a7
commit 48129a8908
2545 changed files with 12608 additions and 142894 deletions
@@ -1,37 +0,0 @@
# 全局快捷键 — 设计文档
## 背景
Ctrl+Z/Y 撤销/重做已在功能 1 中实现(列表级 K_ANY)。新增 Ctrl+N/S/F 作为对话框级的全局快捷键。
## 目标
添加三个全局快捷键:`Ctrl+N` 新建、`Ctrl+S` 保存、`Ctrl+F` 聚焦搜索框。
## 改动文件
| 文件 | 改动 |
|------|------|
| `include/controller/callbacks.h` | 声明 `dlg_k_any_cb` |
| `src/controller/callbacks_sys.c` | 实现 `dlg_k_any_cb` |
| `src/ui/main_window.c` | 对话框注册 `K_ANY` 回调 |
## 核心逻辑
```
dlg_k_any_cb(dlg, c):
if c == K_cN → btn_new_cb(dlg)
if c == K_cS → btn_ok_cb(dlg)
if c == K_cF → IupSetFocus(txt_search)
else → IUP_DEFAULT
```
## 快捷键传播
IUP 键盘事件从子控件向父控件传播。列表的 `list_k_any_cb`Ctrl+Z/Y/DEL)返回 `IUP_IGNORE` 阻止传播;未识别的键返回 `IUP_DEFAULT` 使事件继续传播到对话框的 `dlg_k_any_cb`
## 不做的事
- 不新增翻译条目
- 不修改 Lua 配置
- 列表级 `K_ANY` 保持不变
@@ -1,65 +0,0 @@
# 撤销/重做 UI 集成 — 设计文档
## 背景
撤销/重做后端(`src/core/undo_redo.c`)已完整实现,支持 7 种操作类型的记录与回滚。所有 UI 操作(新建/编辑/删除/上移/下移/清理)均已调用 `push_undo_record()` 写入历史。但 `undo()``redo()` 函数未被任何 UI 代码调用——用户无法触发撤销或重做。
## 目标
在界面上添加撤销/重做按钮,并绑定 Ctrl+Z / Ctrl+Y 快捷键,让用户可以回退和恢复操作。
## 改动文件
| 文件 | 改动内容 |
|------|---------|
| `include/utils/ui_constants.h` | 新增 `CTRL_BTN_UNDO``CTRL_BTN_REDO` 常量 |
| `src/ui/main_window.c` | 创建撤销/重做按钮,绑定回调,调整布局 |
| `src/controller/callbacks_nav.c` | 新增 `btn_undo_cb``btn_redo_cb``list_k_any_cb` 增加 Ctrl+Z/Y 检测 |
| `lua/config.lua` | 新增 `button.undo``button.redo` 配置项 |
| `locale/` 翻译文件 | 同步新增按钮的中英文翻译 |
## 核心逻辑
```
btn_undo_cb(dlg):
ctx = get_app_context_from_dlg(dlg)
if !can_undo(ctx->undo_redo_mgr): return
undo(ctx->undo_redo_mgr, &ctx->sys_paths, &ctx->user_paths)
sync both lists to UI
update undo/redo button enabled state
btn_redo_cb(dlg):
同上,调用 redo()
list_k_any_cb:
新增分支:
if c == K_cZ → btn_undo_cb
if c == K_cY → btn_redo_cb
```
## 按钮布局
撤销/重做按钮放在上移/下移按钮下方:
```
[新建] [编辑]
[浏览] [删除]
(分隔)
[一键清理]
(分隔)
[导入] [导出]
[上移] [下移]
[撤销] [重做] ← 新增
```
## 按钮状态
- `can_undo() == false` → 撤销按钮 `ACTIVE=NO`
- `can_redo() == false` → 重做按钮 `ACTIVE=NO`
- 每次 undo/redo 执行后刷新按钮状态
## 不做的事
- 不修改 `undo_redo.c` 后端代码(已完备)
- 不添加操作历史面板(保持简洁,通过按钮状态反馈即可)
- 不在保存后清空历史(当前设计由 `clear_undo_redo_history` 决定,保持现有行为)