// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Widgets/SWidget.h" #include "UObject/StructOnScope.h" #include "PropertyHandle.h" #include "IDetailChildrenBuilder.h" #include "IDetailPropertyRow.h" #include "DetailCategoryBuilderImpl.h" class IDetailGroup; class FCustomChildrenBuilder : public IDetailChildrenBuilder { public: FCustomChildrenBuilder(TSharedRef InParentCategory, TSharedPtr InParentGroup = nullptr) : ParentCategory(InParentCategory) , ParentGroup(InParentGroup) {} virtual IDetailChildrenBuilder& AddCustomBuilder(TSharedRef InCustomBuilder) override; virtual IDetailGroup& AddGroup(FName GroupName, const FText& LocalizedDisplayName, const bool bStartExpanded = false) override; virtual FDetailWidgetRow& AddCustomRow(const FText& SearchString) override; virtual IDetailPropertyRow& AddProperty(TSharedRef PropertyHandle) override; UE_DEPRECATED(5.1, "Please use the overload that takes an FAddPropertyParams instead.") virtual IDetailPropertyRow* AddExternalObjects(const TArray& Objects, FName UniqueIdName) override; virtual IDetailPropertyRow* AddExternalObjects(const TArray& Objects, const FAddPropertyParams& Params) override; virtual IDetailPropertyRow* AddExternalObjectProperty(const TArray& Objects, FName PropertyName, const FAddPropertyParams& Params) override; virtual IDetailPropertyRow* AddExternalStructure(TSharedRef ChildStructure, FName UniqueIdName) override; virtual IDetailPropertyRow* AddExternalStructure(TSharedPtr ChildStructure, FName UniqueIdName) override; virtual IDetailPropertyRow* AddChildStructure(TSharedRef PropertyHandle, TSharedPtr ChildStructure, FName UniqueIdName, const FText& DisplayNameOverride = FText()) override; virtual IDetailPropertyRow* AddExternalStructureProperty(TSharedRef ChildStructure, FName PropertyName, const FAddPropertyParams& Params) override; virtual IDetailPropertyRow* AddExternalStructureProperty(TSharedPtr ChildStructure, FName PropertyName, const FAddPropertyParams& Params) override; virtual IDetailPropertyRow* AddChildStructureProperty(TSharedRef PropertyHandle, TSharedPtr ChildStructure, FName PropertyName, const FAddPropertyParams& Params = FAddPropertyParams(), const FText& DisplayNameOverride = FText()) override; virtual TArray> AddAllExternalStructureProperties(TSharedRef ChildStructure) override; virtual TArray> AddAllExternalStructureProperties(TSharedPtr ChildStructure) override; virtual TSharedRef GenerateStructValueWidget(TSharedRef StructPropertyHandle) override; virtual IDetailCategoryBuilder& GetParentCategory() const override; virtual IDetailGroup* GetParentGroup() const override; const TArray< FDetailLayoutCustomization >& GetChildCustomizations() const { return ChildCustomizations; } /** Set the user customized reset to default for the children of this builder */ FCustomChildrenBuilder& OverrideResetChildrenToDefault(const FResetToDefaultOverride& ResetToDefault); private: TArray< FDetailLayoutCustomization > ChildCustomizations; TWeakPtr ParentCategory; TWeakPtr ParentGroup; /** User customized reset to default on children */ TOptional CustomResetChildToDefault; IDetailPropertyRow* AddStructureProperty(const FAddPropertyParams& Params, TFunctionRef MakePropertyRowCustomization); template IDetailPropertyRow* AddExternalStructureProperty(const T& ChildStructure, FName PropertyName, const FAddPropertyParams& Params); };