2.1 KiB
2.1 KiB
HierarchyPanel::Render
命名空间: XCEngine::Editor
类型: method
源文件: editor/src/panels/HierarchyPanel.h
签名
void Render() override;
作用
绘制层级面板的完整 UI,包括搜索栏、实体树、空状态和上下文交互。
当前实现行为
1. 建立面板外壳
- 先压入
HierarchyInspectorPanelBackgroundColor()到ImGuiCol_WindowBg和ImGuiCol_ChildBg。 - 进入
UI::PanelWindowScope;若窗口当前关闭,则提前返回。 - 调用
Actions::ObserveFocusedActionRoute(*m_context, EditorActionRoute::Hierarchy)标记焦点路由。
2. 绘制工具栏搜索
- 用
UI::PanelToolbarScope创建顶部工具栏。 - 当前工具栏布局主要保留一个右侧固定宽度搜索框:
- widget id 为
"##HierarchySearch" - 占位文本为
"Search"
- widget id 为
- 搜索内容写入
m_searchBuffer。
3. 绘制实体树
- 用
UI::PanelContentScope打开主体内容区。 - 从
ISceneManager读取根实体数组。 - 以
m_searchBuffer构造UI::SearchQuery,然后逐个调用RenderEntity(...)递归绘制。 - 若搜索非空但没有任何可见实体,则显示
"No matching entities"empty state。
4. 处理背景与菜单
- 调用
Actions::DrawHierarchyBackgroundInteraction(*m_context, m_renameState)处理背景点击和根级 drop target。 - 调用
Actions::DrawHierarchyEntityContextPopup(*m_context, m_itemContextMenu)处理实体右键菜单。 - 若背景 surface 打开上下文菜单,则通过
Actions::DrawHierarchyContextActions(*m_context, nullptr, true)绘制背景菜单项。
当前实现边界
Render()只负责视图状态与交互编排,不直接修改场景数据。- 实体选择、重命名提交、拖放重挂接和上下文菜单动作主要仍由 HierarchyActionRouter 负责。