// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Widgets/SWidget.h" #include "UnrealClient.h" #include "IPropertyTypeCustomization.h" #include "PerQualityLevelProperties.h" class FDetailWidgetDecl; /** * 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; };