#pragma once #ifndef NOMINMAX #define NOMINMAX #endif #include "Platform/Win32/Windowing/EditorWindowHostConfig.h" #include "Windowing/Host/EditorWindowHostInterfaces.h" #include "Windowing/Host/EditorWindowHostTypes.h" #include #include #include #include #include #include namespace XCEngine::UI::Editor { class UIEditorWorkspaceController; class UIEditorWindowWorkspaceController; struct UIEditorWindowWorkspaceSet; struct UIEditorWindowWorkspaceState; } // namespace XCEngine::UI::Editor namespace XCEngine::UI::Editor::App { class EditorContext; class EditorWindowSystem; class EditorWindowContentController; class EditorWindowContentFactory; class EditorWindowHostRuntime; class EditorWindowLifecycleCoordinator; class EditorUtilityWindowCoordinator; class EditorWindowWorkspaceCoordinator; struct EditorUtilityWindowDescriptor; struct EditorWindowPanelTransferRequest; struct EditorWindowFrameTransferRequests; class EditorWindowManager final { public: EditorWindowManager( EditorWindowHostConfig hostConfig, std::filesystem::path repoRoot, EditorContext& editorContext, EditorWindowSystem& windowSystem); ~EditorWindowManager(); EditorWindowManager(const EditorWindowManager&) = delete; EditorWindowManager& operator=(const EditorWindowManager&) = delete; EditorWindowManager(EditorWindowManager&&) = delete; EditorWindowManager& operator=(EditorWindowManager&&) = delete; EditorHostWindow* CreateEditorWindow( std::unique_ptr contentController, const EditorWindowCreateParams& params); EditorHostWindow* CreateWorkspaceWindow( UIEditorWorkspaceController workspaceController, const EditorWindowCreateParams& params); EditorHostWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const EditorWindowCreateParams& params); void HandlePendingNativeWindowCreated(HWND hwnd); void Shutdown(); bool RequestPrimaryWindowClose(); bool TryDispatchWindowMessage( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT& outResult); EditorHostWindow* FindWindow(HWND hwnd); const EditorHostWindow* FindWindow(HWND hwnd) const; EditorHostWindow* FindWindow(std::string_view windowId); const EditorHostWindow* FindWindow(std::string_view windowId) const; EditorHostWindow* FindPrimaryWindow(); const EditorHostWindow* FindPrimaryWindow() const; bool HasWindows() const; void DestroyClosedWindows(); void RenderAllWindows(); private: std::unique_ptr m_contentFactory = {}; std::unique_ptr m_hostRuntime = {}; std::unique_ptr m_lifecycleCoordinator = {}; std::unique_ptr m_utilityCoordinator = {}; std::unique_ptr m_workspaceCoordinator = {}; }; } // namespace XCEngine::UI::Editor::App