// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IPropertyTypeCustomization.h" class FStructOnScope; class SWidget; namespace ESelectInfo { enum Type : int; } class FDetailWidgetRow; class IDetailChildrenBuilder; class IPropertyUtilities; struct FInterchangeTestFunction; class FInterchangeTestFunctionLayout : public IPropertyTypeCustomization { public: /** Makes a new instance of this layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); FInterchangeTestFunctionLayout(); virtual ~FInterchangeTestFunctionLayout(); // IPropertyTypeCustomization interface virtual void CustomizeHeader(TSharedRef StructPropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; private: FInterchangeTestFunction* GetStruct() const; void GetFunctionsForClass(UClass* Class); TSharedRef OnGenerateClassComboWidget(UClass* InClass); void OnClassComboSelectionChanged(UClass* InSelectedItem, ESelectInfo::Type SelectInfo); TSharedRef OnGenerateFunctionComboWidget(UFunction* InFunction); void OnFunctionComboSelectionChanged(UFunction* InSelectedItem, ESelectInfo::Type SelectInfo); void OnParameterChanged(TSharedPtr PropertyHandle); void OnParameterResetToDefault(TSharedPtr PropertyHandle); void RefreshLayout(); /** List of all the asset classes supported by the testing framework */ TArray AssetClasses; /** List of all the test functions supported by the current asset class */ TArray Functions; /** Bound parameter data stored as a binary blob */ TSharedPtr ParamData; TSharedPtr StructProperty; TSharedPtr AssetClassProperty; TSharedPtr OptionalAssetNameProperty; TSharedPtr CheckFunctionProperty; TSharedPtr ParametersProperty; TSharedPtr PropertyUtilities; };