// Copyright Epic Games, Inc.All Rights Reserved. #pragma once #include "Containers/Array.h" #include "HAL/Platform.h" #include "IPropertyTypeCustomization.h" #include "Internationalization/Text.h" #include "Templates/SharedPointer.h" #include "UObject/NameTypes.h" #define UE_API BEHAVIORTREEEDITOR_API namespace ESelectInfo { enum Type : int; } class IPropertyHandle; class IPropertyUtilities; class SWidget; class UBlackboardData; struct FValueOrBlackboardKeyBase; class FValueOrBBKeyDetails : public IPropertyTypeCustomization { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static UE_API TSharedRef MakeInstance(); UE_API virtual void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; UE_API virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; UE_API bool CanEditDefaultValue() const; protected: TSharedPtr StructProperty; TSharedPtr KeyProperty; TSharedPtr DefaultValueProperty; TSharedPtr CachedUtils; TArray MatchingKeys; UE_API virtual void ValidateData(); UE_API virtual TSharedRef CreateDefaultValueWidget(); UE_API void GetMatchingKeys(TArray& OutNames); UE_API bool HasAccessToBlackboard() const; UE_API TSharedRef OnGetKeyNames(); UE_API void OnKeyChanged(int32 Index); UE_API FText GetKeyDesc() const; UE_API const FValueOrBlackboardKeyBase* GetDataPtr() const; }; class FValueOrBBKeyDetails_Class : public FValueOrBBKeyDetails { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); virtual void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; protected: TSharedPtr BaseClassProperty; virtual void ValidateData() override; virtual TSharedRef CreateDefaultValueWidget() override; void OnBaseClassChanged(); void OnSetClass(const UClass* NewClass); const UClass* OnGetSelectedClass() const; void BrowseToClass() const; }; class FValueOrBBKeyDetails_Enum : public FValueOrBBKeyDetails { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); virtual void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; protected: TSharedPtr EnumTypeProperty; TSharedPtr NativeEnumTypeNameProperty; virtual void ValidateData() override; virtual TSharedRef CreateDefaultValueWidget() override; void OnEnumSelectionChanged(int32 NewValue, ESelectInfo::Type); void OnEnumTypeChanged(); void OnNativeEnumTypeNameChanged(); int32 GetEnumValue() const; bool CanEditEnumType() const; }; class FValueOrBBKeyDetails_Object : public FValueOrBBKeyDetails { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); virtual void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; protected: TSharedPtr BaseClassProperty; virtual void ValidateData() override; virtual TSharedRef CreateDefaultValueWidget() override; void OnBaseClassChanged(); void OnObjectChanged(const FAssetData& AssetData); FString OnGetObjectPath() const; void BrowseToObject() const; }; class FValueOrBBKeyDetails_Struct : public FValueOrBBKeyDetails { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static TSharedRef MakeInstance(); virtual void CustomizeHeader(TSharedRef StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; protected: TSharedPtr EditDefaultsOnlyProperty; }; class FValueOrBBKeyDetails_WithChild : public FValueOrBBKeyDetails { public: /** Makes a new instance of this detail layout class for a specific detail view requesting it */ static UE_API TSharedRef MakeInstance(); UE_API virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; }; #undef UE_API