Files
XCEngine/docs/api/XCEngine/Editor/panels/panels.md

122 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# panels
**命名空间**: `XCEngine::Editor`
**类型**: `submodule`
**描述**: 编辑器工作面板子模块,覆盖通用 `Panel` 生命周期、面板集合调度,以及 `Hierarchy``Project``Inspector``Scene/Game View``Console``MenuBar` 等主要工作窗口。
## 概览
`editor/src/panels` 是当前 Editor 工作区的直接承载层。
这些类型共同决定:
- 用户能看到哪些窗口
- 每个窗口如何接收 `IEditorContext`
- 哪些窗口只是展示层,哪些窗口还会参与动作路由
- Scene / Game 视口内容如何嵌入到普通面板生命周期里
按当前实现,这一层已经不是简单的“几个松散 ImGui 窗口”,而是统一挂在 `PanelCollection``EditorLayer` 之下的工作区系统。
## 当前面板集合
活跃文档当前覆盖:
- [Panel](Panel/Panel.md)
- [PanelCollection](PanelCollection/PanelCollection.md)
- [MenuBar](MenuBar/MenuBar.md)
- [HierarchyPanel](HierarchyPanel/HierarchyPanel.md)
- [ProjectPanel](ProjectPanel/ProjectPanel.md)
- [InspectorPanel](InspectorPanel/InspectorPanel.md)
- [ConsolePanel](ConsolePanel/ConsolePanel.md)
- [SceneViewPanel](SceneViewPanel/SceneViewPanel.md)
- [GameViewPanel](GameViewPanel/GameViewPanel.md)
- [ViewportPanelContent](ViewportPanelContent/ViewportPanelContent.md)
- [MaterialInspectorMaterialState](MaterialInspectorMaterialState/MaterialInspectorMaterialState.md)
- [MaterialInspectorMaterialStateIO](MaterialInspectorMaterialStateIO/MaterialInspectorMaterialStateIO.md)
## 分层关系
当前面板层可以粗分成三类。
### 工作区容器
- `Panel`
- `PanelCollection`
它们负责统一生命周期和上下文注入,不承担具体编辑业务。
### 资源 / 场景编辑面板
- `HierarchyPanel`
- `ProjectPanel`
- `InspectorPanel`
- `ConsolePanel`
这些面板主要负责采样用户交互、组织内容区和上下文菜单,再把动作导向 `Actions` / `Commands`
### 视口面板
- `SceneViewPanel`
- `GameViewPanel`
- `ViewportPanelContent`
这几页则更多承担“把视口请求嵌入面板”的职责,真正的渲染仍由 `ViewportHostService` 管理。
### Inspector 材质状态 helper
- `MaterialInspectorMaterialState`
- `MaterialInspectorMaterialStateIO`
这两页不是 panel 本体,而是挂在 `editor/src/panels` 目录下、服务 `InspectorPanel` 材质 authoring 流程的状态与 I/O helper。
## 当前实现特点
### 上下文统一注入
当前每个面板都通过 `IEditorContext*` 获取:
- 选择状态
- 场景状态
- 项目状态
- undo
- active action route
所以面板层没有自己 new 一套 manager而是共享同一个 editor context。
### 各面板职责
这轮源码和文档对齐后,几个关键面板的职责边界已经比较清晰:
- `HierarchyPanel` 主要负责树渲染,交互语义下沉到 `HierarchyActionRouter`
- `ProjectPanel` 主要负责目录树 / 面包屑 / 网格布局,编辑动作下沉到 `ProjectCommands`
- `InspectorPanel` 主要负责 subject 决策与 section 组织,具体字段 UI 下沉到 `ComponentEditors`
这说明当前 panel 层已经明显走向“薄面板 + 富命令 / 路由层”的结构。
### 视口面板不是 renderer
`SceneViewPanel``GameViewPanel` 不再应被理解成“自己持有独立渲染逻辑”的窗口。
更准确的描述是:
- 它们是普通面板
- 通过 `ViewportPanelContent``ViewportHostService` 请求并展示视口结果
## 设计说明
当前 panel 子模块的作用,是把编辑器工作区稳定成一组可组合窗口,而不是把所有逻辑都堆进 `EditorLayer`
这样做的收益很直接:
- 工作区增删窗口成本更低
- 不同窗口可以共享统一 chrome 和布局协议
- 动作路由和命令层可以围绕窗口上下文形成清晰边界
## 当前限制
- 当前工作区仍然围绕单主窗口 editor 组织
- panel 层没有独立多文档系统
- 某些窗口间协作仍依赖显式 route 和共享上下文,没有更复杂的 pane-level focus manager
## 相关文档
- [Editor](../Editor.md)
- [Layout](../Layout/Layout.md)
- [UI](../UI/UI.md)
- [Actions](../Actions/Actions.md)
- [Commands](../Commands/Commands.md)