### Problem to solve / 要解决的问题 Viva 重构 PR #1799 已有公共折叠树列表 `desktop/internal/treelist`,项目树和 Git Log 提交详情的改动文件都用它绘制行、缩进、展开箭头、选择高亮,并处理方向键导航。Git Log 左侧的分支面板(本地分支、远端、标签)仍是另一套手写树: - [`drawLogSection`](https://github.com/1lck/Lithe-IDEA/blob/72c2a92da/desktop/internal/workbench/gitlog_view.go#L433)、[`drawLogNodes`](https://github.com/1lck/Lithe-IDEA/blob/72c2a92da/desktop/internal/workbench/gitlog_view.go#L452)、[`drawLogRefRow`](https://github.com/1lck/Lithe-IDEA/blob/72c2a92da/desktop/internal/workbench/gitlog_view.go#L504) 和 [`logTreeRow`](https://github.com/1lck/Lithe-IDEA/blob/72c2a92da/desktop/internal/workbench/gitlog_view.go#L524) 递归声明行,自己计算缩进,自己画 12px 的箭头。 - 行的标识是 `logRefRows.At(*n)`,`n` 是可见行序号,不是稳定键。展开或收起上方的分组后,同一个分支的标识会变,焦点和按下状态会跟着行号而不是分支走。 - 行的无障碍角色是 `RoleButton`,不报告 `Selected`、`Expandable`、`Expanded`、`Level`;`treelist` 的行报告这些属性。 - 面板没有键盘处理:`logRefRows` 只在声明行时出现,不能用方向键移动或展开收起。 - 选中行只有一种底色,不区分列表是否有键盘焦点;`treelist` 区分两种。 保留两套实现的代价:树的外观和交互在同一个窗口里不一致;以后修 `treelist`(例如多选、右键选择)时分支面板不会跟着改,需要再写一遍。 判定依据:在 #1799 分支上全仓库搜索 `logTreeRow`、`drawLogNodes`、`logRefRows`,只有 `desktop/internal/workbench/gitlog_view.go` 使用;`treelist.List` 的使用方是 `filetree.go` 和 `gitlog_view.go` 的改动文件列表。 ### Proposed solution / 建议方案 把分支面板改成 `treelist.List`: 1. 为分组标题、文件夹和引用分配稳定键(例如按分组种类和 Core `ReferenceTreeNode.Path` 编号),每帧把可见行投影成 `[]treelist.Row`。 2. 引用行的图标、颜色和 ahead/behind 文字在 `content` 回调里画;分组标题和文件夹用 `Branch`/`Expanded`。 3. 用 `List.Key` 和 `List.DoubleClicked` 接入键盘和双击;Enter 在引用行上等同单击(切换日志查看的引用)。 4. 搜索过滤后的平铺结果同样走 `treelist`,深度为 1。 5. 删除 `logTreeRow`、`drawLogNodes` 中被替代的部分和 `logIndent` 等只剩它使用的常量。 风险:分支面板的行高、缩进与当前不同,需要对照截图确认;键盘焦点要与提交列表、改动文件列表之间的切换保持一致。引用树结构仍由 Core `git.referenceTree`(#1753)提供,本项只改界面层。 ### Target platform / 目标平台 Cross-platform / 跨平台 ### Area / 模块 Git ### Priority / 优先级 P2 / 后续考虑:目前不着急,可安排到后续版本 ### Alternatives considered / 已考虑的替代方案 只给 `logTreeRow` 补无障碍属性和键盘处理,改动更小,但仍然保留第二套树,以后 `treelist` 的改进需要重复实现。 ### Additional context / 补充信息 - 相关:#1794、#1799;项目树可见行下沉 Core 见 #1800。 - `treelist` 由 #1799 分支上“Git Log 改动文件文件夹折叠”和“项目树标题栏按钮”这次提交加入。 - 这是静态代码核对,没有声称发生了运行时故障。 ### Checklist / 提交前检查 - [x] I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。
Activity
feat(desktop): #1794 公共折叠树列表、Git Log 改动文件折叠与项目树标题栏按钮