Route editor actions by active target

This commit is contained in:
2026-03-26 22:10:43 +08:00
parent 5c8042775c
commit 5735e769b0
21 changed files with 609 additions and 104 deletions

View File

@@ -2,7 +2,7 @@
## 当前判断
截至 2026-03-26Editor 的 UI 架构重构如果只计算“架构层整理”,不计算 Viewport/RHI 和 Scene/Game 真正内容开发,整体进度大约在 **90%**
截至 2026-03-26Editor 的 UI 架构重构如果只计算“架构层整理”,不计算 Viewport/RHI 和 Scene/Game 真正内容开发,整体进度大约在 **92%**
如果把“编辑器整体可用度”也算进去,则大约在 **65%** 左右,因为 `Scene` / `Game` 面板目前仍然只是占位壳Viewport 仍未回归,且部分编辑语义与回归验证还未补齐。
@@ -75,6 +75,7 @@
- shortcut 文本
- enabled 状态
- 文本输入时是否允许触发
- shortcut 触发上下文
- menu 与 shortcut 的统一绑定
- button / toolbar / inspector action 的统一接线
@@ -93,6 +94,15 @@
这一层已经不再只是 `MenuBar + Hierarchy` 的试点,而是开始成为 editor 范围内的统一动作定义入口。
当前新增结果:
- 已补 shared shortcut context
- `Global``FocusedWindow` 两种快捷键路由开始统一
- `Hierarchy``Project` 已接入同一套 shortcut 分发
- 已补 active action route
- `MenuBar Edit` 已开始跟随 `Hierarchy / Project` 切换动作目标
- `Rename` 这类依赖 panel 内联状态的动作,开始通过 `EventBus` 请求而不是直接耦合 panel 实现
### 5. Dock / Layout 层
`Dock / Layout` 已从 `EditorLayer::setupDockspace()` 中抽出,形成独立 layout controller
@@ -121,6 +131,20 @@
- panel 的 attach / detach / render 顺序有了统一入口
- 后续继续拆 panel 或补 panel 时,不需要再改一大片壳层代码
### 7. Application / ImGui Session 层
`Application` 中原先混在一起的 ImGui context 创建、字体加载、ini 路径配置、layout 持久化,已经开始抽成独立 session
- `editor/src/UI/ImGuiSession.h`
- `editor/src/UI/ImGuiBackendBridge.h`
这一层的意义是:
- `Application` 更接近窗口 / 设备 / layer host
- ImGui 生命周期不再继续堆在 `Application.cpp`
- Win32 / DX12 backend API 不再散落在 `Application.cpp``main.cpp`
- 后续继续清理 backend 初始化边界时,有稳定落点
## 主要面板状态
### MenuBar
@@ -134,6 +158,7 @@
- `Reset Layout` 已接入事件驱动行为
- `About` 已接入真实 modal popup
- `Exit` 已通过事件驱动关闭 editor
- `Edit` 菜单已开始跟随 active action route 在 `Hierarchy / Project` 之间切换
仍待完成:
@@ -148,6 +173,7 @@
- 快捷键已接 action 层
- 重命名状态已收成 `Begin / Commit / Cancel`
- 重命名交互已从 panel 局部字段收口到 shared inline edit state
- `Rename` 请求已能从 `MenuBar -> EventBus -> Hierarchy inline edit` 触发
仍待完成:
@@ -162,6 +188,7 @@
- 上下文菜单、返回按钮、创建文件夹对话框已接 action 层
- 资源图标绘制与图标配色已下沉到 shared UI token / widget
- 创建文件夹弹窗已改成 shared popup state 驱动
- `Back / Open / Delete` 已接 panel-focused keyboard action
仍待完成:
@@ -209,13 +236,12 @@
### 高优先级
1. 整理 `Application.cpp``EditorLayer.cpp` 中剩余的 UI 壳逻辑
包括字体初始化、主 dock host 初始化、部分样式 push / pop 的收口。
包括 backend 初始化边界、主循环中剩余 ImGui / render 壳逻辑、部分样式 push / pop 的收口。
### 中优先级
2. 继续将 panel 的本地状态机抽离
包括:
- inspector component popup state
- console filter state
- 其他仍散落在 panel 内的临时交互状态
@@ -224,9 +250,10 @@
4. 统一 editor 范围内的编辑语义
例如:
- 哪些 panel 消费 Copy / Paste / Delete
- 哪些 panel 消费 Copy / Paste / Delete / Open / Back
- 哪些动作受 selection 驱动
- 哪些动作在文本输入时必须屏蔽
- 哪些动作通过 command哪些动作通过 event 请求 panel 内联状态
### 低优先级