void FDetailItemNode::FilterNode( const FDetailFilter& InFilter ) { bShouldBeVisibleDueToFiltering = PassesAllFilters( Customization, InFilter ); bShouldBeVisibleDueToChildFiltering = false; // Filter each child for( int32 ChildIndex = 0; ChildIndex < Children.Num(); ++ChildIndex ) { TSharedRef<IDetailTreeNode>& Child = Children[ChildIndex]; Child->FilterNode( InFilter ); if( Child->GetVisibility() == ENodeVisibility::Visible ) { if( !InFilter.IsEmptyFilter() ) { // The child is visible due to filtering so we must also be visible bShouldBeVisibleDueToChildFiltering = true; } // Expand the child after filtering if it wants to be expanded ParentCategory.Pin()->RequestItemExpanded( Child, Child->ShouldBeExpanded() ); } } }
void FDetailItemNode::FilterNode( const FDetailFilter& InFilter ) { bShouldBeVisibleDueToFiltering = PassesAllFilters( Customization, InFilter, ParentCategory.Pin()->GetDisplayName().ToString() ); bShouldBeVisibleDueToChildFiltering = false; // Filter each child for( int32 ChildIndex = 0; ChildIndex < Children.Num(); ++ChildIndex ) { TSharedRef<IDetailTreeNode>& Child = Children[ChildIndex]; // If the parent is visible, we pass an empty filter to all children so that they resume their // default expansion. This is a lot safer method, otherwise customized details panels tend to be // filtered incorrectly because they have no means of discovering if their parents were filtered. if ( bShouldBeVisibleDueToFiltering ) { Child->FilterNode(FDetailFilter()); // The child should be visible, but maybe something else has it hidden, check if it's // visible just for safety reasons. if ( Child->GetVisibility() == ENodeVisibility::Visible ) { // Expand the child after filtering if it wants to be expanded ParentCategory.Pin()->RequestItemExpanded(Child, Child->ShouldBeExpanded()); } } else { Child->FilterNode(InFilter); if ( Child->GetVisibility() == ENodeVisibility::Visible ) { if ( !InFilter.IsEmptyFilter() ) { // The child is visible due to filtering so we must also be visible bShouldBeVisibleDueToChildFiltering = true; } // Expand the child after filtering if it wants to be expanded ParentCategory.Pin()->RequestItemExpanded(Child, Child->ShouldBeExpanded()); } } } }