#pragma once #include "Composition/EditorShellRuntime.h" #include "Windowing/Content/EditorWindowContentController.h" #include "Windowing/Frame/EditorWindowFrameOrchestrator.h" #include #include namespace XCEngine::UI::Editor::App { class EditorWindowSystem; class EditorWorkspaceWindowContentController final : public EditorWindowContentController , public EditorWindowWorkspaceBinding , public EditorWindowDockHostBinding , public EditorWindowInputFeedbackBinding , public EditorWindowTitleBarBinding { public: EditorWorkspaceWindowContentController( std::string windowId, UIEditorWorkspaceController workspaceController, EditorWindowSystem& windowSystem); ~EditorWorkspaceWindowContentController() override; EditorWindowContentCapabilities GetCapabilities() const override; EditorWindowWorkspaceBinding* TryGetWorkspaceBinding() override; const EditorWindowWorkspaceBinding* TryGetWorkspaceBinding() const override; EditorWindowDockHostBinding* TryGetDockHostBinding() override; const EditorWindowDockHostBinding* TryGetDockHostBinding() const override; const EditorWindowInputFeedbackBinding* TryGetInputFeedbackBinding() const override; const EditorWindowTitleBarBinding* TryGetTitleBarBinding() const override; const UIEditorWorkspaceController* TryGetWorkspaceController() const override; const EditorWorkspaceWindowProjection* TryGetWorkspaceProjection() const override; void RefreshWorkspaceProjection(EditorWorkspaceWindowProjection projection) override; void Initialize(const EditorWindowContentInitializationContext& context) override; void Shutdown() override; void ResetInteractionState() override; void SetViewportSurfacePresentationEnabled(bool enabled) override; EditorWindowFrameTransferRequests UpdateAndAppend( const EditorWindowContentFrameContext& context, ::XCEngine::UI::UIDrawData& drawData) override; void RenderRequestedViewports( const ::XCEngine::Rendering::RenderContext& renderContext) override; const UIEditorShellInteractionFrame& GetShellFrame() const override; const UIEditorShellInteractionState& GetShellInteractionState() const override; void SetExternalDockHostDropPreview( const Widgets::UIEditorDockHostDropPreviewState& preview) override; void ClearExternalDockHostDropPreview() override; bool TryResolveDockTabDragHotspot( std::string_view nodeId, std::string_view panelId, const ::XCEngine::UI::UIPoint& point, ::XCEngine::UI::UIPoint& outHotspot) const override; UIEditorDockHostTabDropTarget ResolveDockTabDropTarget( const ::XCEngine::UI::UIPoint& point) const override; bool HasHostedContentCapture() const override; bool HasShellInteractiveCapture() const override; bool HasInteractiveCapture() const override; EditorWindowContentCursorKind GetHostedContentCursorKind() const override; EditorWindowContentCursorKind GetDockCursorKind() const override; ::XCEngine::UI::UISize ResolveMinimumOuterSize() const override; bool ShouldUseDetachedTitleBarTabStrip() const override; std::string ResolveTabStripTitleText(std::string_view fallbackTitle) const override; std::string ResolveDetachedWindowTitleText( std::string_view fallbackWindowTitle) const override; private: void RefreshProjectionFromWorkspaceController(bool primary = false); void RestoreWorkspaceControllerFromProjection(); std::string m_windowId = {}; UIEditorWorkspaceController m_workspaceController = {}; EditorWindowSystem& m_windowSystem; EditorWorkspaceWindowProjection m_projection = {}; EditorShellRuntime m_shellRuntime = {}; EditorWindowFrameOrchestrator m_frameOrchestrator = {}; }; std::unique_ptr CreateEditorWorkspaceWindowContentController( std::string_view windowId, UIEditorWorkspaceController workspaceController, EditorWindowSystem& windowSystem); } // namespace XCEngine::UI::Editor::App