Refactor new editor state ownership model

This commit is contained in:
2026-04-19 04:36:52 +08:00
parent 48bfde28e3
commit f45b34a03a
46 changed files with 1979 additions and 217 deletions

View File

@@ -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 {