#pragma once #include "Windowing/EditorWindowShared.h" #include "Windowing/EditorWorkspaceWindowProjection.h" #include "Windowing/Host/EditorWindowHostTypes.h" #include "Windowing/Host/EditorWindowPointerCapture.h" #include "Windowing/Host/EditorWindowTypes.h" #include #include #include #include namespace XCEngine::UI { struct UIPoint; } // namespace XCEngine::UI namespace XCEngine::UI::Editor { struct UIEditorDockHostTabDropTarget; } // namespace XCEngine::UI::Editor namespace XCEngine::UI::Editor::App { class EditorWindowDockHostBinding; struct EditorUtilityWindowDescriptor; class EditorHostWindow { public: virtual ~EditorHostWindow() = default; virtual std::string_view GetWindowId() const = 0; virtual EditorWindowLifecycleState GetLifecycleState() const = 0; virtual bool IsPrimary() const = 0; virtual bool IsWorkspaceWindow() const = 0; virtual bool IsUtilityWindow() const = 0; virtual bool IsClosing() const = 0; virtual bool IsDestroyed() const = 0; virtual bool HasLiveHostWindow() const = 0; virtual const std::wstring& GetTitle() const = 0; virtual const UIEditorWorkspaceController* TryGetWorkspaceController() const = 0; virtual const EditorWorkspaceWindowProjection* TryGetWorkspaceProjection() const = 0; virtual EditorWindowDockHostBinding* TryGetDockHostBinding() = 0; virtual const EditorWindowDockHostBinding* TryGetDockHostBinding() const = 0; virtual ::XCEngine::UI::UIPoint ConvertScreenPixelsToClientDips( const EditorWindowScreenPoint& screenPoint) const = 0; virtual bool TryResolveDockTabDragHotspot( std::string_view nodeId, std::string_view panelId, const EditorWindowScreenPoint& screenPoint, EditorWindowScreenPoint& outHotspot) const = 0; virtual bool TryResolveDockTabDropTarget( const EditorWindowScreenPoint& screenPoint, UIEditorDockHostTabDropTarget& outTarget) const = 0; virtual void InvalidateHostWindow() const = 0; virtual void SetPrimary(bool primary) = 0; virtual void SetTitle(std::wstring title) = 0; virtual void ApplyHostWindowTitle() = 0; virtual void RefreshWorkspaceProjection(EditorWorkspaceWindowProjection projection) = 0; virtual void ResetInteractionState() = 0; virtual void AcquirePointerCapture(EditorWindowPointerCaptureOwner owner) = 0; virtual void ReleasePointerCapture(EditorWindowPointerCaptureOwner owner) = 0; virtual void MarkClosing() = 0; virtual void MarkDestroyed() = 0; virtual bool IsRenderReady() const = 0; virtual void Shutdown() = 0; virtual bool TryGetHostScreenRect(EditorWindowScreenRect& outRect) const = 0; virtual void SetHostScreenPosition(const EditorWindowScreenPoint& screenPoint) = 0; virtual void FocusHostWindow() = 0; virtual void PostCloseToHost() = 0; virtual void DestroyHostWindow() = 0; }; class EditorWindowHost { public: virtual ~EditorWindowHost() = default; virtual EditorHostWindow* CreateWorkspaceWindow( UIEditorWorkspaceController workspaceController, const EditorWindowCreateParams& params) = 0; virtual EditorHostWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const EditorWindowCreateParams& params) = 0; virtual EditorHostWindow* FindWindowById(std::string_view windowId) = 0; virtual const EditorHostWindow* FindWindowById(std::string_view windowId) const = 0; virtual std::vector GetWindows() = 0; virtual std::vector GetWindows() const = 0; virtual std::wstring_view GetPrimaryWindowTitle() const = 0; virtual bool TryGetCursorScreenPoint(EditorWindowScreenPoint& outPoint) const = 0; virtual EditorWindowScreenRect ResolveFloatingPlacement( const EditorWindowScreenPoint& screenPoint, int preferredWidth, int preferredHeight) const = 0; virtual EditorHostWindow* FindWindowFromScreenPoint( const EditorWindowScreenPoint& screenPoint) = 0; virtual const EditorHostWindow* FindWindowFromScreenPoint( const EditorWindowScreenPoint& screenPoint) const = 0; virtual void ReapDestroyedWindows() = 0; virtual std::string DescribeWindows() const = 0; virtual void LogRuntimeTrace(std::string_view channel, std::string_view message) const = 0; }; } // namespace XCEngine::UI::Editor::App