#pragma once #ifndef NOMINMAX #define NOMINMAX #endif #include "UtilityWindows/EditorUtilityWindowRuntime.h" #include "Windowing/EditorFrameServices.h" #include "Windowing/EditorWorkspaceShellRuntime.h" #include "EditorWindowHostCoordinator.h" #include "EditorWindowHostInterfaces.h" #include "EditorWindowHostTypes.h" #include "EditorWindowInstance.h" #include #include #include namespace XCEngine::UI::Editor { class EditorWindowSystem; struct UIEditorWindowWorkspaceState; namespace Rendering::Host { class EditorWindowRenderRuntimeFactory; } } // namespace XCEngine::UI::Editor namespace XCEngine::UI::Editor::Host { class EditorHostResourceService; } // namespace XCEngine::UI::Editor::Host namespace XCEngine::UI::Editor::App { class EditorWindowContentFactory; class EditorWindowHostRuntimeServices; class EditorWindowLifecycleCoordinator; class EditorUtilityWindowCoordinator; class EditorWindowWorkspaceCoordinator; struct EditorUtilityWindowDescriptor; struct EditorWindowFrameTransferRequests; class EditorWindowManager final : public EditorWindowHostCoordinator { public: EditorWindowManager( EditorFrameServices& frameServices, EditorWindowSystem& windowSystem, Rendering::Host::EditorWindowRenderRuntimeFactory& renderRuntimeFactory, Host::EditorHostResourceService& resourceService, EditorWindowHostRuntimeServices& hostRuntime, EditorWorkspaceShellRuntimeFactory workspaceShellRuntimeFactory, EditorUtilityWindowPanelFactory utilityPanelFactory); ~EditorWindowManager(); EditorWindowManager(const EditorWindowManager&) = delete; EditorWindowManager& operator=(const EditorWindowManager&) = delete; EditorWindowManager(EditorWindowManager&&) = delete; EditorWindowManager& operator=(EditorWindowManager&&) = delete; EditorHostWindow* CreateWorkspaceWindow( const UIEditorWindowWorkspaceState& windowState, const EditorWindowCreateParams& params); EditorHostWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const EditorWindowCreateParams& params); void Shutdown(); bool RequestPrimaryWindowClose(); bool HasWindows() const; void DestroyClosedWindows(); void RenderAllWindows(); private: bool InitializeHostWindow( EditorHostWindow& window, const EditorHostWindowRuntimeInitializationParams& params) override; EditorWindowFrameTransferRequests DriveWindowFrame(EditorHostWindow& window) override; EditorWindowFrameTransferRequests DriveImmediateWindowFrame( EditorHostWindow& window) override; bool IsGlobalTabDragActive() const override; bool OwnsActiveGlobalTabDrag(std::string_view windowId) const override; bool HandleGlobalTabDragPointerMove(EditorHostWindow& window) override; bool HandleGlobalTabDragPointerButtonUp(EditorHostWindow& window) override; void EndGlobalTabDragSession() override; void RefreshWindowPresentation(EditorHostWindow& window) override; void DispatchWindowFrameTransferRequests( EditorHostWindow& sourceWindow, const EditorWindowFrameTransferRequests& transferRequests) override; void ExecuteCloseRequest(EditorHostWindow& window) override; void HandleNativeWindowDestroyed(EditorHostWindow& window) override; void AbortUnregisteredWindow(EditorHostWindow& window) override; void ReapDestroyedWindows() override; EditorWindowFrameTransferRequests DriveWindowFrameInternal( EditorHostWindow& window, bool requestSkipNextSteadyStateFrame); EditorFrameServices& m_frameServices; Rendering::Host::EditorWindowRenderRuntimeFactory& m_renderRuntimeFactory; Host::EditorHostResourceService& m_resourceService; EditorWindowHostRuntimeServices& m_hostRuntime; std::unique_ptr m_contentFactory = {}; std::unique_ptr m_lifecycleCoordinator = {}; std::unique_ptr m_utilityCoordinator = {}; std::unique_ptr m_workspaceCoordinator = {}; std::vector> m_windows = {}; }; } // namespace XCEngine::UI::Editor::App