#pragma once #include namespace XCEngine::UI::Editor::Detail { struct DockHostTabStripEventResult { bool consumed = false; bool commandRequested = false; bool reorderRequested = false; bool dragStarted = false; bool dragEnded = false; bool dragCanceled = false; bool requestPointerCapture = false; bool releasePointerCapture = false; UIEditorWorkspaceCommandKind commandKind = UIEditorWorkspaceCommandKind::ActivatePanel; std::size_t dropInsertionIndex = Widgets::UIEditorTabStripInvalidIndex; std::string panelId = {}; std::string nodeId = {}; std::string draggedTabId = {}; Widgets::UIEditorDockHostHitTarget hitTarget = {}; int priority = 0; }; bool ShouldUsePointerPosition(const ::XCEngine::UI::UIInputEvent& event); bool ShouldDispatchTabStripEvent( const ::XCEngine::UI::UIInputEvent& event, bool splitterActive); UIEditorWorkspaceLayoutOperationResult ApplySplitRatio( UIEditorWorkspaceController& controller, std::string_view nodeId, float splitRatio); UIEditorWorkspaceCommandResult DispatchPanelCommand( UIEditorWorkspaceController& controller, UIEditorWorkspaceCommandKind kind, std::string panelId); UIEditorDockHostTabStripInteractionEntry& FindOrCreateTabStripInteractionEntry( UIEditorDockHostInteractionState& state, std::string_view nodeId); void PruneTabStripInteractionEntries( UIEditorDockHostInteractionState& state, const Widgets::UIEditorDockHostLayout& layout); void SyncDockHostTabStripVisualStates(UIEditorDockHostInteractionState& state); bool HasFocusedTabStrip(const UIEditorDockHostInteractionState& state); const Widgets::UIEditorDockHostTabStackLayout* FindTabStackLayoutByNodeId( const Widgets::UIEditorDockHostLayout& layout, std::string_view nodeId); bool IsPointInsideRect( const ::XCEngine::UI::UIRect& rect, const ::XCEngine::UI::UIPoint& point); void ClearAllTabStripTransientInteractions(UIEditorDockHostInteractionState& state); void ClearTabDockDragState(UIEditorDockHostInteractionState& state); std::vector BuildTabStripItems( const Widgets::UIEditorDockHostTabStackLayout& tabStack); Widgets::UIEditorDockHostHitTarget MapTabStripHitTarget( const Widgets::UIEditorDockHostTabStackLayout& tabStack, const UIEditorTabStripInteractionResult& result); int ResolveTabStripPriority(const UIEditorTabStripInteractionResult& result); DockHostTabStripEventResult ProcessTabStripEvent( UIEditorDockHostInteractionState& state, const Widgets::UIEditorDockHostLayout& layout, const ::XCEngine::UI::UIInputEvent& event, const Widgets::UIEditorDockHostMetrics& metrics); std::size_t ResolveTabHeaderDropInsertionIndex( const Widgets::UIEditorDockHostTabStackLayout& tabStack, const ::XCEngine::UI::UIPoint& point); UIEditorWorkspaceDockPlacement ResolveDockPlacement( const Widgets::UIEditorDockHostTabStackLayout& tabStack, const ::XCEngine::UI::UIPoint& point); void SyncDockPreview( UIEditorDockHostInteractionState& state, const Widgets::UIEditorDockHostLayout& layout); void SyncHoverTarget( UIEditorDockHostInteractionState& state, const Widgets::UIEditorDockHostLayout& layout); } // namespace XCEngine::UI::Editor::Detail