UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TreeFilterHandler.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Misc/IFilter.h"
8
10template<typename ItemType>
12{
13public:
15
16public:
17
19 {
20 TreeView = nullptr;
21 Filter = nullptr;
22 RootItems = nullptr;
23 TreeRootItems = nullptr;
24 bIsEnabled = false;
25 bWasEnabled = false;
26 }
27
30 {
31 TreeView = InTreeView;
32 }
33
36 {
37 Filter = InFilter;
38 }
39
50
59
62 {
63 return bIsEnabled;
64 }
65
71 {
72 bIsEnabled = bInIsEnabled;
73 }
74
77 {
78 PrefilterExpandedItems.Remove(ItemToRemove);
79 }
80
87 {
88 if (TreeView && Filter && RootItems && TreeRootItems && GetChildrenDelegate.IsBound())
89 {
90 TreeRootItems->Empty();
91 ItemsPassingFilter.Empty();
92 if (bIsEnabled)
93 {
94 if (!bWasEnabled)
95 {
96 PrefilterExpandedItems.Empty();
97 TreeView->GetExpandedItems(PrefilterExpandedItems);
98 }
99 for (auto RootItem : *RootItems)
100 {
101 if (ExpandAndCacheMatches(RootItem))
102 {
103 TreeRootItems->Add(RootItem);
104 }
105 }
106 }
107 else
108 {
109 if (bWasEnabled)
110 {
111 TreeView->ClearExpandedItems();
112 for (auto PrefilterExpandedItem : PrefilterExpandedItems)
113 {
114 TreeView->SetItemExpansion(PrefilterExpandedItem, true);
115 }
116 PrefilterExpandedItems.Empty();
117 }
118 for (auto RootItem : *RootItems)
119 {
120 TreeRootItems->Add(RootItem);
121 }
122 }
123
124 TreeView->RequestTreeRefresh();
125 bWasEnabled = bIsEnabled;
126 }
127 }
128
135 {
136 if (bIsEnabled)
137 {
138 TArray<ItemType> AllChildren;
139 GetChildrenDelegate.Execute(Parent, AllChildren);
140 for (auto Child : AllChildren)
141 {
142 if (ItemsPassingFilter.Contains(Child))
143 {
145 }
146 }
147 }
148 else
149 {
150 GetChildrenDelegate.Execute(Parent, FilteredChildren);
151 }
152 }
153
154private:
159 bool ExpandAndCacheMatches(ItemType Parent)
160 {
161 bool bChildMatches = false;
162 TArray<ItemType> AllChildren;
163 GetChildrenDelegate.Execute(Parent, AllChildren);
164 for (auto Child : AllChildren)
165 {
166 bChildMatches |= ExpandAndCacheMatches(Child);
167 }
168
169 bool bParentMatches = Filter->PassesFilter(Parent);
170
172 {
173 TreeView->SetItemExpansion(Parent, true);
174 ItemsPassingFilter.Add(Parent);
175 return true;
176 }
177
178 return false;
179 }
180
181private:
183 STreeView<ItemType>* TreeView;
184
186 IFilter<ItemType>* Filter;
187
189 TArray<ItemType>* RootItems;
190
192 TArray<ItemType>* TreeRootItems;
193
195 FOnGetChildren GetChildrenDelegate;
196
198 TSet<ItemType> ItemsPassingFilter;
199
201 TSet<ItemType> PrefilterExpandedItems;
202
204 bool bIsEnabled;
205
207 bool bWasEnabled;
208};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition IFilter.h:13
virtual bool PassesFilter(TItemType InItem) const =0
Definition STreeView.h:90
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition SlateDelegates.h:134
Definition TreeFilterHandler.h:12
void SetRootItems(TArray< ItemType > *InRootItems, TArray< ItemType > *InTreeRootItems)
Definition TreeFilterHandler.h:45
void SetGetChildrenDelegate(FOnGetChildren InGetChildrenDelegate)
Definition TreeFilterHandler.h:55
bool GetIsEnabled()
Definition TreeFilterHandler.h:61
void OnGetFilteredChildren(ItemType Parent, TArray< ItemType > &FilteredChildren)
Definition TreeFilterHandler.h:134
TreeFilterHandler()
Definition TreeFilterHandler.h:18
void SetIsEnabled(bool bInIsEnabled)
Definition TreeFilterHandler.h:70
void SetTreeView(STreeView< ItemType > *InTreeView)
Definition TreeFilterHandler.h:29
void RefreshAndFilterTree()
Definition TreeFilterHandler.h:86
TSlateDelegates< ItemType >::FOnGetChildren FOnGetChildren
Definition TreeFilterHandler.h:14
void SetFilter(IFilter< ItemType > *InFilter)
Definition TreeFilterHandler.h:35
void RemoveCachedItem(ItemType ItemToRemove)
Definition TreeFilterHandler.h:76