#pragma once #include "Composition/EditorWindowWorkspaceStore.h" #include "Windowing/Frame/EditorWindowTransferRequests.h" #include "Windowing/System/EditorWindowSynchronizationPlan.h" #include #include #include namespace XCEngine::UI::Editor::App { class EditorWindowSystem final { public: explicit EditorWindowSystem(UIEditorPanelRegistry panelRegistry); const UIEditorPanelRegistry& GetPanelRegistry() const; bool BootstrapPrimaryWindow( std::string_view primaryWindowId, const UIEditorWorkspaceController& workspaceController, std::string& outError); bool ValidateWindowSet( const UIEditorWindowWorkspaceSet& windowSet, std::string& outError) const; bool IsPrimaryWindowId(std::string_view windowId) const; const UIEditorWindowWorkspaceSet& GetWindowSet() const; UIEditorWindowWorkspaceController BuildWorkspaceMutationController() const; bool CommitLiveWindowMutation( std::string_view windowId, const UIEditorWorkspaceController& workspaceController, std::string& outError); EditorWindowSynchronizationPlan BuildPlanForWindowSet( const UIEditorWindowWorkspaceSet& targetWindowSet, const std::vector& 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& hostWindows, std::wstring_view primaryWindowTitle, std::string& outError) const; EditorWindowSynchronizationPlan BuildPlanForWorkspaceMutationRequest( const EditorWindowWorkspaceMutationRequest& request, const std::vector& hostWindows, std::wstring_view primaryWindowTitle, std::string& outError) const; EditorWindowSynchronizationPlan BuildPlanForDestroyedWindow( std::string_view windowId, const std::vector& 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, std::string_view sourceNodeId, std::string_view panelId, UIEditorWindowWorkspaceController& outController) const; private: static bool RemoveWindowStateFromSet( UIEditorWindowWorkspaceSet& windowSet, std::string_view windowId); EditorWindowWorkspaceStore m_workspaceStore; }; } // namespace XCEngine::UI::Editor::App