UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SPropertyViewerImpl.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "Types/SlateEnums.h"
9#include "UObject/Field.h"
10#include "UObject/Object.h"
12
13class ITableRow;
14class SSearchBox;
15class STableViewBase;
16template <typename ItemType>
17class STreeView;
18template<typename ItemType>
20template<typename ItemType>
21class TTextFilter;
22
23namespace UE::PropertyViewer
24{
25class IFieldIterator;
26class IFieldExpander;
27class SFieldName;
28}
29
31{
32
37{
41
42public:
44 {
45 return Identifier;
46 }
47
48 void* GetBuffer() const
49 {
50 UObject* PinObjectInstance = ObjectInstance.Get();
51 return bIsObject ? reinterpret_cast<void*>(PinObjectInstance) : StructInstance;
52 }
53
55 {
56 return Container.Get();
57 }
58
59 bool CanEdit() const
60 {
61 return GetBuffer() != nullptr;
62 }
63
64 bool IsInstance() const
65 {
66 return GetBuffer() != nullptr;
67 }
68
69 bool IsObjectInstance() const
70 {
71 return bIsObject;
72 }
73
75 {
76 return ObjectInstance.Get();
77 }
78
80 {
81 return StructInstance != nullptr;
82 }
83
85 {
86 return StructInstance;
87 }
88
90 {
91 return DisplayName;
92 }
93
94 bool IsValid() const;
95
96private:
97 SPropertyViewer::FHandle Identifier;
99 TWeakObjectPtr<UObject> ObjectInstance;
100 void* StructInstance = nullptr;
101 TOptional<FText> DisplayName;
102 bool bIsObject = false;
103};
104
105
109struct FTreeNode : public TSharedFromThis<FTreeNode>
110{
111public:
115
116private:
117 TWeakPtr<FTreeNode> ParentNode;
118
119 //Either a container, property or function
120 TWeakPtr<FContainer> Container;
122 FName PropertyName;
123 FName FunctionName;
124 bool bIsStructProperty = false;
125 bool bIsObjectProperty = false;
126
127 TOptional<FText> OverrideDisplayName;
128
129public:
132 bool bChildGenerated = false;
133
134public:
135 bool IsContainer() const
136 {
137 return Container.IsValid();
138 }
139
141 {
142 return Container.Pin();
143 }
144
145 bool IsField() const
146 {
147 return !PropertyName.IsNone() || !FunctionName.IsNone();
148 }
149
150 FFieldVariant GetField() const;
151
153 {
154 return ParentNode.Pin();
155 }
156
159
161
163 {
164 return OverrideDisplayName;
165 }
166
168
179
180 // Returns the object node that was build
181 TArray<FNodeReference> BuildChildNodes(IFieldIterator& FieldIterator, IFieldExpander& FieldExpander, bool bSortChildNode);
183 {
184 ChildNodes.Reset();
185 bChildGenerated = false;
186 }
187
188private:
189 void BuildChildNodesRecursive(IFieldIterator& FieldIterator, IFieldExpander& FieldExpander, bool bSortChildNode, int32 RecursiveCount, TArray<FNodeReference>& OutTickReference);
190
191 static bool Sort(const TSharedPtr<FTreeNode>& NodeA, const TSharedPtr<FTreeNode>& NodeB);
192};
193
194
198class FPropertyViewerImpl : public TSharedFromThis<FPropertyViewerImpl>
199{
200public:
201 FPropertyViewerImpl(const SPropertyViewer::FArguments& InArgs);
205
206private:
209
210 TSharedPtr<SSearchBox> SearchBoxWidget;
213 TArray<TSharedPtr<FTreeNode>> FilteredTreeSource;
214
216 TSharedPtr<FTextFilter> SearchFilter;
218 TSharedPtr<FTreeFilter> FilterHandler;
219
220 SPropertyViewer::FGetFieldWidget OnGetPreSlot;
221 SPropertyViewer::FGetFieldWidget OnGetPostSlot;
222 SPropertyViewer::FOnContextMenuOpening OnContextMenuOpening;
223 SPropertyViewer::FOnSelectionChanged OnSelectionChanged;
224 SPropertyViewer::FOnDoubleClicked OnDoubleClicked;
225 SPropertyViewer::FOnDragDetected OnDragDetected;
226 SPropertyViewer::FOnGenerateContainer OnGenerateContainer;
227 SPropertyViewer::EPropertyVisibility PropertyVisibility;
228 TOptional<const FFieldColorSettings> OverrideIconColorSettings;
229 bool bSanitizeName = false;
230 bool bShowFieldIcon = false;
231 bool bUseRows = false;
232 bool bSortChildNode = false;
233
234 IFieldIterator* FieldIterator = nullptr;
235 IFieldExpander* FieldExpander = nullptr;
236 INotifyHook* NotifyHook = nullptr;
237 bool bOwnFieldIterator = false;
238 bool bOwnFieldExpander = false;
239
240public:
241 TSharedRef<SWidget> Construct(const SPropertyViewer::FArguments& InArgs);
242 void Tick();
243
248 void RemoveAll();
252
253private:
255
256 TSharedRef<SWidget> CreateSearch();
258
259 void HandleSearchChanged(const FText& InFilterText);
260 FText SetRawFilterTextInternal(const FText& InFilterText);
261 void SetHighlightTextRecursive(const TSharedPtr<FTreeNode>& OwnerNode, const FText& HighlightText);
262 void HandleGetFilterStrings(TSharedPtr<FTreeNode> Item, TArray<FString>& OutStrings);
263
264 TSharedRef<ITableRow> HandleGenerateRow(TSharedPtr<FTreeNode> Item, const TSharedRef<STableViewBase>& OwnerTable);
266
267 TSharedPtr<SWidget> HandleContextMenuOpening();
268 void HandleSelectionChanged(TSharedPtr<FTreeNode> Item, ESelectInfo::Type SelectionType);
269 void HandleDoubleClick(TSharedPtr<FTreeNode> Item);
270 FReply HandleDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, const TSharedPtr<FTreeNode> Item);
271
273
274#if WITH_EDITOR
277#endif //WITH_EDITOR
278};
279
280} //namespace
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Field.h:353
Definition NameTypes.h:617
FORCEINLINE bool IsNone() const
Definition NameTypes.h:827
Definition UnrealType.h:174
Definition Reply.h:24
Definition Text.h:385
Definition ITableRow.h:15
Definition SSearchBox.h:21
Definition STableViewBase.h:110
Definition STreeView.h:90
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition ContainerAllocationPolicies.h:894
Definition TextFilter.h:21
Definition SharedPointer.h:1295
UE_FORCEINLINE_HINT TSharedPtr< ObjectType, Mode > Pin() const &
Definition SharedPointer.h:1512
Definition TreeFilterHandler.h:12
Definition IFieldExpander.h:21
Definition IFieldIterator.h:19
Definition INotifyHook.h:13
Definition SPropertyViewerImpl.h:199
~FPropertyViewerImpl()
Definition SPropertyViewerImpl.cpp:497
void SetRawFilterText(const FText &InFilterText)
Definition SPropertyViewerImpl.cpp:818
TSharedRef< SWidget > Construct(const SPropertyViewer::FArguments &InArgs)
Definition SPropertyViewerImpl.cpp:517
void AddContainerInstance(SPropertyViewer::FHandle Identifier, TOptional< FText > DisplayName, UObject *Object)
Definition SPropertyViewerImpl.cpp:679
TArray< SPropertyViewer::FSelectedItem > GetSelectedItems() const
Definition SPropertyViewerImpl.cpp:781
void AddContainer(SPropertyViewer::FHandle Identifier, TOptional< FText > DisplayName, const UStruct *Struct)
Definition SPropertyViewerImpl.cpp:670
FPropertyViewerImpl(const FPropertyViewerImpl &)=delete
FPropertyViewerImpl & operator=(const FPropertyViewerImpl &)=delete
void Tick()
Definition SPropertyViewerImpl.cpp:624
void RemoveAll()
Definition SPropertyViewerImpl.cpp:753
void SetSelection(SPropertyViewer::FHandle Identifier, TArrayView< const FFieldVariant > FieldPath)
Definition SPropertyViewerImpl.cpp:864
Definition SPropertyViewer.h:33
EPropertyVisibility
Definition SPropertyViewer.h:57
Definition Class.h:2476
Definition Object.h:95
Definition Class.h:1720
Definition Class.h:480
Type
Definition SlateEnums.h:311
Type
Definition ITypedTableView.h:16
Definition FieldIconFinder.cpp:19
Definition FieldIconFinder.cpp:16
Definition Geometry.h:40
Definition Events.h:695
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132
Definition PropertyPath.h:27
Definition SPropertyViewerImpl.h:37
TOptional< FText > GetDisplayName() const
Definition SPropertyViewerImpl.h:89
void * GetBuffer() const
Definition SPropertyViewerImpl.h:48
bool IsInstance() const
Definition SPropertyViewerImpl.h:64
bool IsValid() const
Definition SPropertyViewerImpl.cpp:90
bool CanEdit() const
Definition SPropertyViewerImpl.h:59
SPropertyViewer::FHandle GetIdentifier() const
Definition SPropertyViewerImpl.h:43
bool IsObjectInstance() const
Definition SPropertyViewerImpl.h:69
const UStruct * GetStruct()
Definition SPropertyViewerImpl.h:54
bool IsScriptStructInstance() const
Definition SPropertyViewerImpl.h:79
void * GetScriptStructInstance() const
Definition SPropertyViewerImpl.h:84
UObject * GetObjectInstance() const
Definition SPropertyViewerImpl.h:74
Definition SPropertyViewerImpl.h:170
TWeakPtr< FTreeNode > Node
Definition SPropertyViewerImpl.h:172
TWeakObjectPtr< UObject > Previous
Definition SPropertyViewerImpl.h:171
FNodeReference(UObject *InPrevious, const TWeakPtr< FTreeNode > &InNode)
Definition SPropertyViewerImpl.h:174
Definition SPropertyViewerImpl.h:110
void RemoveChild()
Definition SPropertyViewerImpl.h:182
TSharedPtr< FContainer > GetOwnerContainer() const
Definition SPropertyViewerImpl.cpp:240
FPropertyPath GetPropertyPath() const
Definition SPropertyViewerImpl.cpp:162
void GetFilterStrings(TArray< FString > &OutStrings) const
Definition SPropertyViewerImpl.cpp:264
TWeakPtr< SFieldName > PropertyWidget
Definition SPropertyViewerImpl.h:130
TSharedPtr< FContainer > GetContainer() const
Definition SPropertyViewerImpl.h:140
TArray< FFieldVariant > GetFieldPath() const
Definition SPropertyViewerImpl.cpp:223
TOptional< FText > GetOverrideDisplayName() const
Definition SPropertyViewerImpl.h:162
static TSharedRef< FTreeNode > MakeField(TSharedPtr< FTreeNode > InParent, const FProperty *Property, TOptional< FText > InDisplayName)
Definition SPropertyViewerImpl.cpp:118
TArray< FNodeReference > BuildChildNodes(IFieldIterator &FieldIterator, IFieldExpander &FieldExpander, bool bSortChildNode)
Definition SPropertyViewerImpl.cpp:306
FFieldVariant GetField() const
Definition SPropertyViewerImpl.cpp:145
bool bChildGenerated
Definition SPropertyViewerImpl.h:132
bool IsField() const
Definition SPropertyViewerImpl.h:145
TSharedPtr< FTreeNode > GetParentNode() const
Definition SPropertyViewerImpl.h:152
static TSharedRef< FTreeNode > MakeContainer(const TSharedPtr< FContainer > &InContainer, TOptional< FText > InDisplayName)
Definition SPropertyViewerImpl.cpp:109
bool IsContainer() const
Definition SPropertyViewerImpl.h:135
TArray< TSharedPtr< FTreeNode >, TInlineAllocator< 1 > > ChildNodes
Definition SPropertyViewerImpl.h:131