- 数据模型: ToolItem 新增 IsGroup(bool) + SubToolIds(List<string>) 字段
- 执行逻辑: ProcessExecutionService 改为 ExecuteAsync, 组合卡片遍历子工具逐一启动(500ms延迟), 孤儿ID跳过并打印警告
- 组合编辑: GroupEditViewModel + GroupEditWindow, 复选框列表勾选非组合工具
- 主界面: 标题栏新增 '+添加组合' 按钮(蓝色), 组合卡片右下角显示 📦 角标
- 右键菜单: 区分 '编辑工具' (普通) 和 '编辑组合' (IsGroup=true)
- 快捷键: HotKeyManager 适配 ExecuteAsync 异步调用
- 测试: 82 tests total (ProcessExecution 4->6, GroupEdit 5 new)
61 lines
1.5 KiB
C#
61 lines
1.5 KiB
C#
using System.Text.Json.Serialization;
|
||
|
||
namespace PersonalToolBox.Models;
|
||
|
||
/// <summary>
|
||
/// 工具项模型,表示用户添加的一个可执行工具
|
||
/// </summary>
|
||
public class ToolItem
|
||
{
|
||
/// <summary>
|
||
/// 工具唯一标识 (UUID)
|
||
/// </summary>
|
||
public string Id { get; set; } = Guid.NewGuid().ToString();
|
||
|
||
/// <summary>
|
||
/// 工具显示名称
|
||
/// </summary>
|
||
public string Name { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 内置图标库的字符编码
|
||
/// </summary>
|
||
public string IconCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 可执行文件路径或 URL
|
||
/// </summary>
|
||
public string ExecutablePath { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 运行参数(选填)
|
||
/// </summary>
|
||
public string Arguments { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 所属分类 ID
|
||
/// </summary>
|
||
public string CategoryId { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 全局快捷键(如 Ctrl+Alt+T),选填
|
||
/// </summary>
|
||
public string HotKey { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 路径是否有效(仅运行时计算,不存入 JSON)
|
||
/// </summary>
|
||
[JsonIgnore]
|
||
public bool IsValid { get; set; } = true;
|
||
|
||
/// <summary>
|
||
/// 是否为组合卡片(一键多开)
|
||
/// </summary>
|
||
public bool IsGroup { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当 IsGroup 为 true 时,存储需批量启动的子工具 ID 列表
|
||
/// </summary>
|
||
public List<string> SubToolIds { get; set; } = new();
|
||
}
|