// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "IPropertyTypeCustomization.h" #include "Templates/SharedPointer.h" #include "UObject/NameTypes.h" class FDetailWidgetRow; class IDetailChildrenBuilder; class IPropertyHandle; class IPropertyUtilities; class SWidget; /** * Implements a details panel customization for the FPerQualityLevel structures. */ template class FPerQualityLevelPropertyCustomization : public IPropertyTypeCustomization { public: FPerQualityLevelPropertyCustomization() {} // IPropertyTypeCustomization interface virtual void CustomizeHeader(TSharedRef StructPropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override {} /** * Creates a new instance. * * @return A new customization for FPerQualityLevel structs. */ static TSharedRef MakeInstance(); protected: TSharedRef GetWidget(FName InQualityLevelName, TSharedRef StructPropertyHandle) const; TArray GetOverrideNames(TSharedRef StructPropertyHandle) const; bool AddOverride(FName InQualityLevelName, TSharedRef StructPropertyHandle); bool RemoveOverride(FName InQualityLevelName, TSharedRef StructPropertyHandle); float CalcDesiredWidth(TSharedRef StructPropertyHandle); private: /** Cached utils used for resetting customization when layout changes */ TWeakPtr PropertyUtilities; };