NS_IMETHODIMP nsMsgGroupThread::RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer) { uint32_t flags; nsMsgKey key; if (!child) return NS_ERROR_NULL_POINTER; child->GetFlags(&flags); child->GetMessageKey(&key); // if this was the newest msg, clear the newest msg date so we'll recalc. uint32_t date; child->GetDateInSeconds(&date); if (date == m_newestMsgDate) SetNewestMsgDate(0); if (!(flags & nsMsgMessageFlags::Read)) ChangeUnreadChildCount(-1); nsMsgViewIndex threadIndex = FindMsgHdr(child); bool wasFirstChild = threadIndex == 0; nsresult rv = RemoveChildAt(threadIndex); // if we're deleting the root of a dummy thread, need to update the threadKey // and the dummy header at position 0 if (m_dummy && wasFirstChild && m_keys.Length() > 1) { nsIMsgDBHdr *newRootChild; GetChildHdrAt(1, &newRootChild); SetMsgHdrAt(0, newRootChild); } return rv; }
void UPanelWidget::ClearChildren() { int32 Children = GetChildrenCount(); for ( int32 ChildIndex = 0; ChildIndex < Children; ChildIndex++ ) { RemoveChildAt(0); } }
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(); }
bool UPanelWidget::RemoveChild(UWidget* Content) { int32 ChildIndex = GetChildIndex(Content); if ( ChildIndex != -1 ) { return RemoveChildAt(ChildIndex); } return false; }