#pragma once #include "Platform/Win32/Windowing/EditorWindow.h" #include "Platform/Win32/Windowing/EditorWindowHostConfig.h" #include "Windowing/Host/EditorWindowHostInterfaces.h" #include #include #include #include #include namespace XCEngine::UI::Editor::App { class EditorContext; class EditorWindow; class EditorWindowContentController; class EditorWindowContentFactory; class EditorWindowLifecycleCoordinator; class EditorWindowSystem; class EditorUtilityWindowCoordinator; class EditorWindowWorkspaceCoordinator; struct EditorUtilityWindowDescriptor; class EditorWindowHostRuntime final : public EditorWindowHost { public: EditorWindowHostRuntime( EditorWindowHostConfig hostConfig, std::filesystem::path repoRoot, EditorContext& editorContext, EditorWindowSystem& windowSystem, EditorWindowContentFactory& contentFactory); ~EditorWindowHostRuntime(); EditorWindow* CreateEditorWindow( std::unique_ptr contentController, const EditorWindowCreateParams& params); EditorWindow* CreateWorkspaceWindow( UIEditorWorkspaceController workspaceController, const EditorWindowCreateParams& params) override; EditorWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const EditorWindowCreateParams& params) override; void BindLifecycleCoordinator(EditorWindowLifecycleCoordinator& lifecycleCoordinator); void HandlePendingNativeWindowCreated(HWND hwnd); EditorWindow* FindWindow(HWND hwnd); const EditorWindow* FindWindow(HWND hwnd) const; EditorHostWindow* FindWindowById(std::string_view windowId) override; const EditorHostWindow* FindWindowById(std::string_view windowId) const override; EditorWindow* FindPrimaryWindow(); const EditorWindow* FindPrimaryWindow() const; bool HasWindows() const; std::vector GetWindows() override; std::vector GetWindows() const override; std::wstring_view GetPrimaryWindowTitle() const override; bool TryGetCursorScreenPoint(EditorWindowScreenPoint& outPoint) const override; EditorWindowScreenRect ResolveFloatingPlacement( const EditorWindowScreenPoint& screenPoint, int preferredWidth, int preferredHeight) const override; EditorHostWindow* FindWindowFromScreenPoint( const EditorWindowScreenPoint& screenPoint) override; const EditorHostWindow* FindWindowFromScreenPoint( const EditorWindowScreenPoint& screenPoint) const override; void ReapDestroyedWindows() override; std::string DescribeWindows() const override; 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>& GetWindowStorage() { return m_windows; } const std::vector>& GetWindowStorage() const { return m_windows; } void LogRuntimeTrace(std::string_view channel, std::string_view message) const override; private: EditorWindow* FindWindowByIdImpl(std::string_view windowId); const EditorWindow* FindWindowByIdImpl(std::string_view windowId) const; EditorWindowHostConfig m_hostConfig = {}; std::filesystem::path m_repoRoot = {}; EditorContext& m_editorContext; EditorWindowSystem& m_windowSystem; EditorWindowContentFactory& m_contentFactory; std::vector> m_windows = {}; EditorWindow* m_pendingCreateWindow = nullptr; EditorWindowLifecycleCoordinator* m_lifecycleCoordinator = nullptr; }; } // namespace XCEngine::UI::Editor::App