Refactor editor window synchronization flow

This commit is contained in:
2026-04-26 00:19:58 +08:00
parent 12b71a319f
commit 5b6c46d382
32 changed files with 1787 additions and 320 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "Composition/EditorWindowWorkspaceStore.h"
#include "Windowing/System/EditorWindowSynchronizationPlan.h"
#include <XCEditor/Workspace/UIEditorWorkspaceController.h>
@@ -23,18 +24,34 @@ public:
bool ValidateWindowSet(
const UIEditorWindowWorkspaceSet& windowSet,
std::string& outError) const;
bool TrySetWindowSet(
UIEditorWindowWorkspaceSet windowSet,
std::string& outError);
bool UpsertWindowState(
const UIEditorWindowWorkspaceState& windowState,
bool primary,
std::string& outError);
void RemoveWindowState(std::string_view windowId, bool primary);
bool IsPrimaryWindowId(std::string_view windowId) const;
const UIEditorWindowWorkspaceSet& GetWindowSet() const;
UIEditorWindowWorkspaceController BuildWorkspaceMutationController() const;
EditorWindowSynchronizationPlan BuildPlanForWindowSet(
const UIEditorWindowWorkspaceSet& targetWindowSet,
const std::vector<EditorWindowHostSnapshot>& hostWindows,
std::wstring_view primaryWindowTitle,
std::string_view preferredNewWindowId,
const EditorWindowSynchronizationPlacement& preferredPlacement,
std::string& outError) const;
EditorWindowSynchronizationPlan BuildPlanForLiveWindowMutation(
std::string_view windowId,
const UIEditorWorkspaceController& workspaceController,
const std::vector<EditorWindowHostSnapshot>& hostWindows,
std::wstring_view primaryWindowTitle,
std::string& outError) const;
EditorWindowSynchronizationPlan BuildPlanForDestroyedWindow(
std::string_view windowId,
const std::vector<EditorWindowHostSnapshot>& hostWindows,
std::wstring_view primaryWindowTitle,
std::string& outError) const;
EditorWindowSynchronizationPlan BuildSynchronizationPlan(
const EditorWindowSynchronizationPlannerInput& input,
std::string& outError) const;
bool CommitSynchronizationPlan(
const EditorWindowSynchronizationPlan& plan,
std::string& outError);
UIEditorWindowWorkspaceOperationResult EvaluateDetachPanelToNewWindow(
std::string_view sourceWindowId,
@@ -43,6 +60,10 @@ public:
UIEditorWindowWorkspaceController& outController) const;
private:
static bool RemoveWindowStateFromSet(
UIEditorWindowWorkspaceSet& windowSet,
std::string_view windowId);
EditorWindowWorkspaceStore m_workspaceStore;
};