Files
XCEngine/editor/app/Windowing/Host/EditorWindowHostInterfaces.h

108 lines
4.4 KiB
C++

#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 <XCEditor/Workspace/UIEditorWorkspaceController.h>
#include <string>
#include <string_view>
#include <vector>
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<EditorHostWindow*> GetWindows() = 0;
virtual std::vector<const EditorHostWindow*> 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