// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "PCGDataVisualization.h" #include "Metadata/PCGMetadataCommon.h" class UPCGData; namespace PCGDataVisualizationConstants { /** Names of the columns in the attribute list. */ const FName NAME_Index = FName(TEXT("$Index")); } namespace PCGDataVisualizationHelpers { struct FColumnInfoOverrides { FText LabelOverride; FText TooltipOverride; bool bAddTypeToTooltip = true; EPCGMetadataTypes TypeOverride = EPCGMetadataTypes::Unknown; TFunction()> CreateAccessorFuncOverride; TFunction()> CreateAccessorKeysFuncOverride; }; /** * Add a new column to the VisualizerInfo, using the Data and Selector. * By default, it will create a column with the label extracted from the selector, with accessor and keys created from the data and selector, but you can provide overrides. * @param OutInfo * @param Data * @param InSelector * @param Overrides */ PCGEDITOR_API void AddColumnInfo(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides = {}); PCGEDITOR_API void CreateMetadataColumnInfos(const UPCGData* Data, FPCGTableVisualizerInfo& OutInfo, const FPCGMetadataDomainID& DomainID = PCGMetadataDomainID::Default); PCGEDITOR_API FPCGTableVisualizerInfo CreateDefaultMetadataColumnInfos(const UPCGData* Data, const FPCGMetadataDomainID& DomainID = PCGMetadataDomainID::Default); template void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides = {}) { AddColumnInfo(OutInfo, Data, InSelector, Overrides); } template void AddTypedColumnInfo(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides = {}) { const FColumnInfoOverrides* OverridesToUse = &Overrides; FColumnInfoOverrides CopyOverrides; if (Overrides.TypeOverride == EPCGMetadataTypes::Unknown && Overrides.bAddTypeToTooltip && PCG::Private::IsPCGType()) { CopyOverrides = Overrides; CopyOverrides.TypeOverride = static_cast(PCG::Private::MetadataTypes::Id); OverridesToUse = &CopyOverrides; } AddTypedColumnInfo_Impl(OutInfo, Data, InSelector, *OverridesToUse); } template void AddPropertyEnumColumnInfo(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const UEnum* EnumClass, int64 EnumValue, const FColumnInfoOverrides& Overrides = {}) { check(Data && EnumClass); int32 EnumIndex = EnumClass->GetIndexByValue(EnumValue); check(EnumIndex != INDEX_NONE); const FColumnInfoOverrides* OverridesToUse = &Overrides; FColumnInfoOverrides CopyOverrides; if (Overrides.TooltipOverride.IsEmpty()) { CopyOverrides = Overrides; CopyOverrides.TooltipOverride = EnumClass->GetToolTipTextByIndex(EnumIndex); OverridesToUse = &CopyOverrides; } const FString InvariantName = EnumClass->GetNameStringByIndex(EnumIndex); // Use string version as it strips out the namespace. FPCGAttributePropertySelector Selector = FPCGAttributePropertySelector::CreatePropertySelector(*InvariantName); static const FString EnumMetadataDomain_MetadataFlag = PCGObjectMetadata::EnumMetadataDomain.ToString(); if (EnumClass->HasMetaData(*EnumMetadataDomain_MetadataFlag, EnumIndex)) { const FString MetadataDomain = EnumClass->GetMetaData(*EnumMetadataDomain_MetadataFlag, EnumIndex); Selector.SetDomainName(*MetadataDomain); } AddTypedColumnInfo(OutInfo, Data, Selector, *OverridesToUse); } template void AddPropertyEnumColumnInfo(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, EnumType EnumValue, const FColumnInfoOverrides& Overrides = {}) { const UEnum* EnumClass = StaticEnum(); check(EnumClass); AddPropertyEnumColumnInfo(OutInfo, Data, EnumClass, static_cast(EnumValue)); } template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); template <> PCGEDITOR_API void AddTypedColumnInfo_Impl(FPCGTableVisualizerInfo& OutInfo, const UPCGData* Data, const FPCGAttributePropertySelector& InSelector, const FColumnInfoOverrides& Overrides); }