55 lines
1.5 KiB
Markdown
55 lines
1.5 KiB
Markdown
|
|
# 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)
|