Refactor new editor state ownership model
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
|
||||
#include "Composition/EditorShellAssetBuilder.h"
|
||||
#include "Scene/EditorSceneRuntime.h"
|
||||
#include "State/EditorSelectionStamp.h"
|
||||
|
||||
#include "Composition/EditorPanelIds.h"
|
||||
|
||||
@@ -53,11 +52,18 @@ bool EditorContext::Initialize(const std::filesystem::path& repoRoot) {
|
||||
m_session = {};
|
||||
m_session.repoRoot = repoRoot;
|
||||
m_session.projectRoot = (repoRoot / "project").lexically_normal();
|
||||
m_commandFocusService = {};
|
||||
m_selectionService = {};
|
||||
m_projectRuntime = {};
|
||||
m_projectRuntime.Initialize(repoRoot);
|
||||
m_projectRuntime.BindSelectionService(&m_selectionService);
|
||||
m_sceneRuntime = {};
|
||||
m_sceneRuntime.Initialize(m_session.projectRoot);
|
||||
m_sceneRuntime.BindSelectionService(&m_selectionService);
|
||||
SyncSessionFromSelectionService();
|
||||
m_hostCommandBridge.BindSession(m_session);
|
||||
m_hostCommandBridge.BindCommandFocusService(m_commandFocusService);
|
||||
SyncSessionFromCommandFocusService();
|
||||
m_shortcutManager = BuildEditorShellShortcutManager(m_shellAsset);
|
||||
m_shortcutManager.SetHostCommandHandler(&m_hostCommandBridge);
|
||||
m_shellServices = {};
|
||||
@@ -91,6 +97,7 @@ void EditorContext::SetExitRequestHandler(std::function<void()> handler) {
|
||||
void EditorContext::SyncSessionFromWorkspace(
|
||||
const UIEditorWorkspaceController& workspaceController) {
|
||||
SyncEditorSessionFromWorkspace(m_session, workspaceController);
|
||||
SyncSessionFromCommandFocusService();
|
||||
}
|
||||
|
||||
bool EditorContext::IsValid() const {
|
||||
@@ -109,6 +116,14 @@ const EditorSession& EditorContext::GetSession() const {
|
||||
return m_session;
|
||||
}
|
||||
|
||||
EditorCommandFocusService& EditorContext::GetCommandFocusService() {
|
||||
return m_commandFocusService;
|
||||
}
|
||||
|
||||
const EditorCommandFocusService& EditorContext::GetCommandFocusService() const {
|
||||
return m_commandFocusService;
|
||||
}
|
||||
|
||||
EditorProjectRuntime& EditorContext::GetProjectRuntime() {
|
||||
return m_projectRuntime;
|
||||
}
|
||||
@@ -126,17 +141,22 @@ const EditorSceneRuntime& EditorContext::GetSceneRuntime() const {
|
||||
}
|
||||
|
||||
void EditorContext::SetSelection(EditorSelectionState selection) {
|
||||
selection.stamp = GenerateEditorSelectionStamp();
|
||||
m_session.selection = std::move(selection);
|
||||
m_selectionService.SetSelection(std::move(selection));
|
||||
SyncSessionFromSelectionService();
|
||||
}
|
||||
|
||||
void EditorContext::ClearSelection() {
|
||||
m_session.selection = {};
|
||||
m_session.selection.stamp = GenerateEditorSelectionStamp();
|
||||
m_selectionService.ClearSelection();
|
||||
SyncSessionFromSelectionService();
|
||||
}
|
||||
|
||||
void EditorContext::SyncSessionFromProjectRuntime() {
|
||||
m_session.selection = m_projectRuntime.GetSelection();
|
||||
void EditorContext::SyncSessionFromSelectionService() {
|
||||
m_session.selection = m_selectionService.GetSelection();
|
||||
}
|
||||
|
||||
void EditorContext::SyncSessionFromCommandFocusService() {
|
||||
m_session.activeRoute = m_commandFocusService.ResolveRoute(
|
||||
ResolveEditorActionRoute(m_session.activePanelId));
|
||||
}
|
||||
|
||||
UIEditorWorkspaceController EditorContext::BuildWorkspaceController() const {
|
||||
|
||||
Reference in New Issue
Block a user