Files
XCEngine/docs/api/XCEngine/Editor/Application/SwitchProject.md

55 lines
1.5 KiB
Markdown
Raw Normal View History

2026-04-04 00:41:13 +08:00
# Application::SwitchProject
**命名空间**: `XCEngine::Editor`
**类型**: `method`
**源文件**: `editor/src/Application.h`
## 签名
```cpp
bool SwitchProject(const std::string& projectPath);
```
## 作用
切换当前 Editor 宿主壳所绑定的项目根目录,并同步刷新布局会话、工作目录、资源根、脚本运行时和窗口标题。
## 当前实现行为
- 当前没有 `EditorContext` 或传入路径为空时直接返回 `false`
- 首先调用:
```cpp
const bool hasSavedDockLayout = m_imguiSession.SetProjectPath(projectPath);
```
- 然后把 `EditorContext` 中的项目路径更新为新路径。
- 接着尝试切换进程工作目录到该项目根,并输出日志。
- 随后执行:
- `ResourceManager::Get().SetResourceRoot(projectPath.c_str())`
- `InitializeScriptingRuntime(projectPath)`
- 最后清空 `m_lastWindowTitle` 并重新调用 `UpdateWindowTitle()`
- 若目标项目没有保存过 dock 布局,会通过 `EventBus` 发布 `DockLayoutResetRequestedEvent`
## 返回值
- `true`: 成功完成这次宿主级项目切换。
- `false`: 缺少 `EditorContext` 或传入路径为空。
## 设计含义
- 当前项目切换不是单纯改一条路径字符串,而是一次宿主级上下文切换。
- 它同时影响:
- ImGui 布局会话
- 资源根
- 脚本运行时
- 窗口标题
## 相关文档
- [Application](Application.md)
- [Initialize](Initialize.md)
- [ReloadScriptingRuntime](ReloadScriptingRuntime.md)