void SDockingArea::OnDragLeave( const FDragDropEvent& DragDropEvent ) { if ( DragDropEvent.GetOperationAs<FDockingDragOperation>().IsValid() ) { HideCross(); } }
void SDockingArea::OnDragLeave( const FDragDropEvent& DragDropEvent ) { if ( DragDrop::IsTypeMatch<FDockingDragOperation>(DragDropEvent.GetOperation()) ) { HideCross(); } }
FReply SDockingArea::OnDrop( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) { if ( DragDropEvent.GetOperationAs<FDockingDragOperation>().IsValid() ) { HideCross(); } return FReply::Unhandled(); }
FReply SDockingArea::OnDrop( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) { if ( DragDrop::IsTypeMatch<FDockingDragOperation>(DragDropEvent.GetOperation()) ) { HideCross(); } return FReply::Unhandled(); }
void SDockingArea::DockFromOutside(SDockingNode::RelativeDirection Direction, const FDragDropEvent& DragDropEvent) { TSharedPtr<FDockingDragOperation> DragDropOperation = StaticCastSharedPtr<FDockingDragOperation>(DragDropEvent.GetOperation()); // // Dock from outside. // const bool bDirectionMatches = DoesDirectionMatchOrientation( Direction, this->Splitter->GetOrientation() ); if (!bDirectionMatches && Children.Num() > 1) { // We have multiple children, but the user wants to add a new node that's perpendicular to their orientation. // We need to nest our children into a child splitter so that we can re-orient ourselves. { // Create a new, re-oriented splitter and copy all the children into it. TSharedRef<SDockingSplitter> NewSplitter = SNew(SDockingSplitter, FTabManager::NewSplitter()->SetOrientation(Splitter->GetOrientation()) ); for( int32 ChildIndex=0; ChildIndex < Children.Num(); ++ChildIndex ) { NewSplitter->AddChildNode( Children[ChildIndex], INDEX_NONE ); } // Remove all our children. while( Children.Num() > 0 ) { RemoveChildAt(Children.Num()-1); } AddChildNode( NewSplitter ); } // Re-orient ourselves const EOrientation NewOrientation = (this->Splitter->GetOrientation() == Orient_Horizontal) ? Orient_Vertical : Orient_Horizontal; this->SetOrientation( NewOrientation ); } // Add the new node. { TSharedRef<SDockingTabStack> NewStack = SNew(SDockingTabStack, FTabManager::NewStack()); if ( Direction == LeftOf || Direction == Above ) { this->PlaceNode( NewStack, Direction, Children[0] ); } else { this->PlaceNode( NewStack, Direction, Children.Last() ); } NewStack->OpenTab( DragDropOperation->GetTabBeingDragged().ToSharedRef() ); } HideCross(); }
void SDockingArea::OnTabFoundNewHome( const TSharedRef<SDockTab>& RelocatedTab, const TSharedRef<SWindow>& NewOwnerWindow ) { HideCross(); // The last tab has been successfully relocated elsewhere. // Destroy this window. TSharedPtr<SWindow> ParentWindow = ParentWindowPtr.Pin(); if ( bManageParentWindow && bCleanUpUponTabRelocation && ParentWindow != NewOwnerWindow ) { ParentWindow->SetRequestDestroyWindowOverride( FRequestDestroyWindowOverride() ); ParentWindow->RequestDestroyWindow(); } }