2.5 KiB
2.5 KiB
ProjectPanel::Render
命名空间: XCEngine::Editor
类型: method
源文件: editor/src/panels/ProjectPanel.h
签名
void Render() override;
作用
绘制完整的 Project Browser,并驱动目录树、搜索、资源网格、拖放移动和延迟上下文菜单动作。
当前实现行为
1. 建立面板与焦点路由
当前会先:
- 打开
UI::PanelWindowScope - 调用
Actions::ObserveFocusedActionRoute(*m_context, EditorActionRoute::Project)
这保证 Project 面板获得焦点时,项目相关动作和 Inspector 资源检查模式都能看到正确 route。
2. 初始化本帧拖放状态
每帧开始时会:
BeginAssetDragDropFrame()- 清空
m_deferredContextAction - 渲染顶部 toolbar
当前这个 toolbar 不只是搜索框,还会读取 ResourceManager::GetProjectAssetImportStatus(),在左侧显示 Library: ... 状态文案,并在 hover 时展开导入状态 tooltip。
拖放不是在单个 tile 里直接提交,而是作为整帧状态机统一收口。
3. 组织双栏主体布局
主体内容当前包括:
- 左侧目录树 pane
- 中间 splitter
- 右侧浏览区 pane
其中 m_navigationWidth 会在当前帧按:
- 最小导航宽度
- 最小浏览区宽度
进行夹取,避免 splitter 把任一侧拖到不可用。
4. 渲染目录树与浏览区
左侧目录树通过 RenderFolderTreePane(manager) 完成,右侧浏览区通过 RenderBrowserPane(manager) 完成。
浏览区内部进一步包括:
- 面包屑 header
- 搜索过滤后的资源卡片网格
- 行内重命名
- 右键上下文菜单
5. 统一提交拖放与 deferred action
当前渲染末尾会依次执行:
FinalizeAssetDragDrop(manager)- 若存在
m_deferredContextAction,则在本帧最后执行
这意味着:
- 资源移动不会在 UI 遍历过程中直接打断当前逻辑
- 创建资源、重命名、Show in Explorer 这类上下文菜单动作也会延后到本帧收尾阶段
设计含义
Render() 当前承担的是“项目浏览器壳层主流程”,而不是具体资源命令实现。真正的打开、创建、删除、重命名和移动语义仍下沉在:
Actions::*Commands::*IProjectManager