#pragma once #include "Platform/Win32/Windowing/EditorWindowManager.h" #include #include #include #include #include namespace XCEngine::UI::Editor::App { class EditorContext; class EditorWindow; class EditorWindowContentController; class EditorWindowContentFactory; class EditorWindowLifecycleCoordinator; class EditorUtilityWindowCoordinator; class EditorWindowWorkspaceCoordinator; struct EditorUtilityWindowDescriptor; class EditorWindowHostRuntime final { public: using CreateParams = EditorWindowManager::CreateParams; EditorWindowHostRuntime( EditorWindowHostConfig hostConfig, std::filesystem::path repoRoot, EditorContext& editorContext, EditorWindowContentFactory& contentFactory); ~EditorWindowHostRuntime(); EditorWindow* CreateEditorWindow( std::unique_ptr contentController, const CreateParams& params); EditorWindow* CreateWorkspaceWindow( UIEditorWorkspaceController workspaceController, const CreateParams& params); EditorWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const CreateParams& params); void BindLifecycleCoordinator(EditorWindowLifecycleCoordinator& lifecycleCoordinator); void HandlePendingNativeWindowCreated(HWND hwnd); EditorWindow* FindWindow(HWND hwnd); const EditorWindow* FindWindow(HWND hwnd) const; EditorWindow* FindWindow(std::string_view windowId); const EditorWindow* FindWindow(std::string_view windowId) const; EditorWindow* FindPrimaryWindow(); const EditorWindow* FindPrimaryWindow() const; bool HasWindows() const; void RenderAllWindows( bool globalTabDragActive, EditorWindowWorkspaceCoordinator& workspaceCoordinator, EditorUtilityWindowCoordinator& utilityCoordinator); EditorContext& GetEditorContext() { return m_editorContext; } const EditorContext& GetEditorContext() const { return m_editorContext; } const EditorWindowHostConfig& GetHostConfig() const { return m_hostConfig; } const std::filesystem::path& GetRepoRoot() const { return m_repoRoot; } std::vector>& GetWindows() { return m_windows; } const std::vector>& GetWindows() const { return m_windows; } void LogRuntimeTrace(std::string_view channel, std::string_view message) const; private: friend class EditorWindowLifecycleCoordinator; EditorWindowHostConfig m_hostConfig = {}; std::filesystem::path m_repoRoot = {}; EditorContext& m_editorContext; EditorWindowContentFactory& m_contentFactory; std::vector> m_windows = {}; EditorWindow* m_pendingCreateWindow = nullptr; EditorWindowLifecycleCoordinator* m_lifecycleCoordinator = nullptr; }; } // namespace XCEngine::UI::Editor::App