// Copyright Epic Games, Inc. All Rights Reserved. #include "PropertyEditorDelegates.h" #include "ObjectPropertyNode.h" #include "PropertyHandle.h" #include "PropertyNode.h" FPropertyAndParent::FPropertyAndParent(const TSharedRef& InPropertyHandle) : Property(*InPropertyHandle->GetProperty()) { Initialize(InPropertyHandle->GetPropertyNode().ToSharedRef()); } FPropertyAndParent::FPropertyAndParent(const TSharedRef& InPropertyNode) : Property(*InPropertyNode->GetProperty()) { Initialize(InPropertyNode); } void FPropertyAndParent::Initialize(const TSharedRef& InPropertyNode) { checkf(InPropertyNode->GetProperty() != nullptr, TEXT("Creating an FPropertyAndParent with a null property!")); FObjectPropertyNode* ObjectNode = InPropertyNode->FindObjectItemParent(); if (ObjectNode) { for (int32 ObjectIndex = 0; ObjectIndex < ObjectNode->GetNumObjects(); ++ObjectIndex) { Objects.Add(ObjectNode->GetUObject(ObjectIndex)); } } ArrayIndex = InPropertyNode->GetArrayIndex(); TSharedPtr ParentNode = InPropertyNode->GetParentNodeSharedPtr(); while (ParentNode.IsValid()) { const FProperty* ParentProperty = ParentNode->GetProperty(); if (ParentProperty != nullptr) { ParentProperties.Add(ParentProperty); ParentArrayIndices.Add(ParentNode->GetArrayIndex()); } ParentNode = ParentNode->GetParentNodeSharedPtr(); } }