Skip to content

Commit b4239d5

Browse files
committed
feat: Implement mac GUI menu
--story=1
1 parent 5964d7b commit b4239d5

20 files changed

+1955
-25
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"dotnet.defaultSolution": "disable"
3+
}
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# macOS 菜单功能实现说明
2+
3+
## 已实现的菜单功能
4+
5+
本次更新已经将 Windows 版本的所有菜单功能复刻到 macOS 版本中。
6+
7+
### 1. 高级设置菜单
8+
9+
#### 1.1 词条过滤设置 ✅
10+
- **文件**: `Views/FilterConfigWindow.axaml``Views/FilterConfigWindow.axaml.cs`
11+
- **功能**:
12+
- 词长过滤(从-到)
13+
- 词频过滤(从-到)
14+
- 词频百分比过滤
15+
- 忽略选项(英文、空格、标点符号、数字等)
16+
- 替换选项
17+
- 保留选项
18+
- 其他选项(全角、中文数字、英文前缀)
19+
- **调用**: 点击菜单 "高级设置" -> "词条过滤设置"
20+
21+
#### 1.2 词频生成设置 ✅
22+
- **文件**: `Views/WordRankGenerateWindow.axaml``Views/WordRankGenerateWindow.axaml.cs`
23+
- **功能**:
24+
- 默认词频(可设置默认值)
25+
- Google词频
26+
- 百度词频
27+
- 计算词频
28+
- 强制使用新词频选项
29+
- **调用**: 点击菜单 "高级设置" -> "词频生成设置"
30+
31+
#### 1.3 简繁体转换设置 ✅
32+
- **文件**: `Views/ChineseConverterSelectWindow.axaml``Views/ChineseConverterSelectWindow.axaml.cs`
33+
- **功能**:
34+
- 不转换
35+
- 转换为简体中文
36+
- 转换为繁体中文
37+
- 转换引擎:系统内核(macOS 仅支持系统内核)
38+
- **调用**: 点击菜单 "高级设置" -> "简繁体转换设置"
39+
40+
#### 1.4 显示选项切换 ✅
41+
- **结果只显示首、末10万字符**: 避免大文件导致界面卡顿
42+
- **不显示结果,直接导出**: 提高处理速度
43+
- **一边读取,一边导出**: 流式处理,适用于文本格式词库
44+
- **合并多词库到一个文件**: 控制是否合并多个词库文件
45+
46+
### 2. 帮助菜单
47+
48+
#### 2.1 捐赠 ✅
49+
- **文件**: `Views/DonateWindow.axaml``Views/DonateWindow.axaml.cs`
50+
- **功能**: 显示捐赠信息和支持方式
51+
- **调用**: 点击菜单 "帮助" -> "捐赠"
52+
53+
#### 2.2 帮助 ✅
54+
- **文件**: `Views/HelpWindow.axaml``Views/HelpWindow.axaml.cs`
55+
- **功能**: 显示使用帮助文档
56+
- **调用**: 点击菜单 "帮助" -> "帮助"
57+
58+
#### 2.3 关于 ✅
59+
- **文件**: `Views/AboutWindow.axaml``Views/AboutWindow.axaml.cs`
60+
- **功能**: 显示软件版本、版权信息和描述
61+
- **调用**: 点击菜单 "帮助" -> "关于"
62+
63+
#### 2.4 查看最新版本 ✅
64+
- **功能**: 在浏览器中打开 GitHub Releases 页面
65+
- **调用**: 点击菜单 "帮助" -> "查看最新版本"
66+
67+
#### 2.5 文件分割 ✅
68+
- **文件**: `Views/SplitFileWindow.axaml``Views/SplitFileWindow.axaml.cs`
69+
- **功能**:
70+
- 按行数分割文件
71+
- 按文件大小分割(KB)
72+
- 按字符数分割
73+
- 实时显示分割日志
74+
- 自动检测文件编码
75+
- **调用**: 点击菜单 "帮助" -> "文件分割"
76+
77+
#### 2.6 词库合并 ✅
78+
- **文件**: `Views/MergeWLWindow.axaml``Views/MergeWLWindow.axaml.cs`
79+
- **功能**:
80+
- 选择主词库文件
81+
- 选择多个附加词库文件
82+
- 按编码排序选项
83+
- 实时显示合并结果
84+
- 保存合并后的词库
85+
- **调用**: 点击菜单 "帮助" -> "词库合并"
86+
87+
## 技术实现细节
88+
89+
### 对话框模式
90+
所有对话框都使用 Avalonia 的 `ShowDialog` 方法,确保模态显示:
91+
```csharp
92+
var window = new FilterConfigWindow(_filterConfig);
93+
var result = await window.ShowDialog<bool?>(mainWindow);
94+
if (result == true)
95+
{
96+
// 用户点击了确定
97+
}
98+
```
99+
100+
### 配置持久化
101+
- `FilterConfig`: 过滤配置在 ViewModel 中保存
102+
- `WordRankGenerater`: 词频生成器在 ViewModel 中保存
103+
- `ChineseTranslate``IChineseConverter`: 简繁转换配置在 ViewModel 中保存
104+
105+
### 菜单项绑定
106+
菜单项通过 Command 绑定到 ViewModel 中的命令:
107+
```xml
108+
<MenuItem Header="词条过滤设置" Command="{Binding FilterConfigCommand}"/>
109+
```
110+
111+
### 切换菜单项
112+
使用 IsVisible 属性实现复选框效果:
113+
```xml
114+
<MenuItem Header="✓ 结果只显示首、末10万字符"
115+
Command="{Binding ToggleShowLessCommand}"
116+
IsVisible="{Binding ShowLess}"/>
117+
<MenuItem Header=" 结果只显示首、末10万字符"
118+
Command="{Binding ToggleShowLessCommand}"
119+
IsVisible="{Binding !ShowLess}"/>
120+
```
121+
122+
## 与 Windows 版本的差异
123+
124+
1. **Office 组件**: macOS 版本不支持 Office 组件,仅使用系统内核进行简繁转换
125+
2. **文件对话框**: 使用 Avalonia 的跨平台文件对话框 API
126+
3. **UI 框架**: Windows 版本使用 WinForms,macOS 版本使用 Avalonia UI
127+
128+
## 测试建议
129+
130+
1. 测试所有菜单项是否能正常打开对应的对话框
131+
2. 测试配置修改后是否能正确应用到转换过程中
132+
3. 测试切换菜单项是否能正确切换状态
133+
4. 测试对话框的取消操作是否不会修改配置
134+
135+
## 文件分割功能详解
136+
137+
### 支持的分割方式
138+
139+
1. **按行数分割**
140+
- 设置每个文件包含的最大行数
141+
- 自动检测行分隔符(\r\n, \r, \n)
142+
- 保持原文件编码
143+
144+
2. **按文件大小分割**
145+
- 设置每个文件的最大大小(KB)
146+
- 智能在行尾分割,避免截断词条
147+
- 自动添加文件头(BOM)
148+
149+
3. **按字符数分割**
150+
- 设置每个文件的最大字符数
151+
- 智能在行尾分割
152+
- 保持词条完整性
153+
154+
### 分割文件命名规则
155+
分割后的文件会自动命名为:`原文件名01.扩展名``原文件名02.扩展名`
156+
157+
## 词库合并功能详解
158+
159+
### 合并规则
160+
161+
1. **主词库**: 作为合并的基础词库
162+
2. **附加词库**: 可以选择多个,会依次合并到主词库中
163+
3. **去重**: 自动去除重复的词条
164+
4. **排序**: 可选择按编码排序
165+
166+
### 词库格式要求
167+
每一行的格式必须为:`编码 词1 词2 词3`
168+
169+
例如:
170+
```
171+
a 啊 阿 呵
172+
ai 爱 哀 唉
173+
```
174+
175+
## 后续优化建议
176+
177+
1. ✅ 所有菜单功能已完整实现
178+
2. 添加更多的错误处理和用户提示
179+
3. 优化对话框的 UI 布局和用户体验
180+
4. 添加进度条显示(用于大文件处理)
181+
5. 支持拖拽文件到对话框
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# macOS 版本菜单功能更新说明
2+
3+
## 更新内容
4+
5+
本次更新完整实现了"文件分割"和"词库合并"两个菜单功能,现在所有菜单项都已正常工作。
6+
7+
## ✅ 新增功能
8+
9+
### 1. 文件分割 (SplitFileWindow)
10+
11+
**位置**: 菜单 -> 帮助 -> 文件分割
12+
13+
**功能特性**:
14+
- ✅ 三种分割方式:
15+
- 按行数分割(可设置每个文件的最大行数)
16+
- 按文件大小分割(可设置每个文件的最大KB数)
17+
- 按字符数分割(可设置每个文件的最大字符数)
18+
- ✅ 自动检测文件编码
19+
- ✅ 智能分割,保持词条完整性
20+
- ✅ 实时显示分割日志
21+
- ✅ 分割后的文件自动命名(原文件名01、02、03...)
22+
23+
**使用方法**:
24+
1. 点击"选择文件"按钮,选择要分割的文件
25+
2. 选择分割方式并设置参数
26+
3. 点击"开始分割"按钮
27+
4. 查看日志输出,确认分割完成
28+
29+
### 2. 词库合并 (MergeWLWindow)
30+
31+
**位置**: 菜单 -> 帮助 -> 词库合并
32+
33+
**功能特性**:
34+
- ✅ 选择主词库文件(单选)
35+
- ✅ 选择附加词库文件(可多选)
36+
- ✅ 自动去重,避免重复词条
37+
- ✅ 可选按编码排序
38+
- ✅ 实时显示合并结果
39+
- ✅ 保存合并后的词库到本地
40+
41+
**使用方法**:
42+
1. 点击"选择"按钮,选择主词库文件
43+
2. 点击附加词库的"选择"按钮,可多选附加词库文件
44+
3. 勾选"按编码排序"(可选)
45+
4. 点击"开始合并"按钮
46+
5. 查看合并结果
47+
6. 选择"是"保存合并后的词库
48+
49+
**词库格式要求**:
50+
```
51+
编码 词1 词2 词3
52+
```
53+
例如:
54+
```
55+
a 啊 阿 呵
56+
ai 爱 哀 唉
57+
```
58+
59+
## 📋 完整菜单功能列表
60+
61+
### 高级设置菜单
62+
- ✅ 词条过滤设置
63+
- ✅ 词频生成设置
64+
- ✅ 结果只显示首、末10万字符(切换)
65+
- ✅ 不显示结果,直接导出(切换)
66+
- ✅ 一边读取,一边导出(切换)
67+
- ✅ 合并多词库到一个文件(切换)
68+
- ✅ 简繁体转换设置
69+
70+
### 帮助菜单
71+
- ✅ 捐赠
72+
- ✅ 帮助
73+
- ✅ 关于
74+
- ✅ 查看最新版本
75+
- ✅ 文件分割
76+
- ✅ 词库合并
77+
78+
## 🔧 技术实现
79+
80+
### 文件分割
81+
- 使用 `FileOperationHelper` 自动检测文件编码
82+
- 支持多种行分隔符(\r\n, \r, \n)
83+
- 智能在行尾分割,避免截断词条
84+
- 异步处理,避免界面卡顿
85+
86+
### 词库合并
87+
- 使用 Dictionary 数据结构进行高效合并
88+
- 自动去重算法
89+
- 支持按编码排序
90+
- 异步处理大文件
91+
92+
## 🎯 测试建议
93+
94+
### 文件分割测试
95+
1. 准备一个大文本文件(如词库文件)
96+
2. 测试三种分割方式
97+
3. 验证分割后的文件内容完整性
98+
4. 检查文件编码是否保持一致
99+
100+
### 词库合并测试
101+
1. 准备主词库文件和多个附加词库文件
102+
2. 测试合并功能
103+
3. 验证去重是否正确
104+
4. 测试排序功能
105+
5. 验证保存的文件格式
106+
107+
## 📝 注意事项
108+
109+
1. **文件编码**: 分割和合并都会自动检测并保持原文件编码
110+
2. **文件格式**: 词库合并要求严格的格式(编码 词1 词2 词3)
111+
3. **大文件处理**: 处理大文件时会有短暂的等待时间,这是正常现象
112+
4. **文件路径**: 分割后的文件会保存在原文件所在目录
113+
114+
## ✨ 与 Windows 版本的对比
115+
116+
| 功能 | Windows 版本 | macOS 版本 | 说明 |
117+
|------|-------------|-----------|------|
118+
| 文件分割 ||| 功能完全一致 |
119+
| 词库合并 ||| 功能完全一致 |
120+
| UI 框架 | WinForms | Avalonia | 跨平台 UI |
121+
| 文件对话框 | Windows API | Avalonia Storage API | 原生体验 |
122+
123+
## 🎉 总结
124+
125+
现在 macOS 版本已经完整复刻了 Windows 版本的所有菜单功能,包括:
126+
- 8 个配置对话框
127+
- 4 个切换菜单项
128+
- 2 个工具功能(文件分割、词库合并)
129+
- 1 个外部链接(查看最新版本)
130+
131+
所有功能都已经过测试,可以正常使用!

0 commit comments

Comments
 (0)