Files
UnrealEngine/Engine/Source/Editor/StructUtilsEditor/Private/StructUtilsMetadata.cpp
2025-05-18 13:04:45 +08:00

86 lines
2.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "StructUtilsMetadata.h"
#include "StructUtils/PropertyBag.h"
namespace UE::StructUtils::Metadata
{
// For properties
const FLazyName EnableCategoriesName = "EnableCategories";
const FLazyName CategoryName = "Category";
// For the bag
const FLazyName HideInDetailPanelsName = "HideInDetailPanel";
const FLazyName ShowOnlyInnerPropertiesName = "ShowOnlyInnerProperties";
const FLazyName FixedLayoutName = "FixedLayout";
const FLazyName DefaultTypeName = "DefaultType";
const FLazyName AllowContainersName = "AllowContainers";
UE_DEPRECATED(5.6, "Use 'AllowContainers' instead.");
const FLazyName AllowArraysName = "AllowArrays";
const FLazyName IsPinTypeAcceptedName = "IsPinTypeAccepted";
const FLazyName CanRemovePropertyName = "CanRemoveProperty";
const FLazyName ChildRowFeaturesName = "ChildRowFeatures";
bool AreCategoriesEnabled(const FPropertyBagPropertyDesc& OutDesc)
{
return OutDesc.MetaData.ContainsByPredicate([](const FPropertyBagPropertyDescMetaData& MetaData) { return MetaData.Key == EnableCategoriesName; });
}
void EnableCategories(FPropertyBagPropertyDesc& OutDesc)
{
if (!AreCategoriesEnabled(OutDesc))
{
OutDesc.MetaData.Emplace(FPropertyBagPropertyDescMetaData(EnableCategoriesName, {}));
}
}
void DisableCategories(FPropertyBagPropertyDesc& OutDesc)
{
OutDesc.MetaData.RemoveAllSwap([](const FPropertyBagPropertyDescMetaData& MetaData)
{
return MetaData.Key == EnableCategoriesName;
});
}
void SetCategory(FPropertyBagPropertyDesc& OutDesc, const FString& InGroupLabel, const bool bAutoEnableCategories)
{
if (FPropertyBagPropertyDescMetaData* MetaData = OutDesc.MetaData.FindByPredicate([](const FPropertyBagPropertyDescMetaData& InMetaData) { return InMetaData.Key == CategoryName; }))
{
MetaData->Value = InGroupLabel;
}
else
{
OutDesc.MetaData.Emplace(FPropertyBagPropertyDescMetaData(CategoryName, InGroupLabel));
}
if (bAutoEnableCategories)
{
EnableCategories(OutDesc);
}
}
void RemoveCategory(FPropertyBagPropertyDesc& OutDesc, const bool bAutoDisableCategories)
{
OutDesc.MetaData.RemoveAllSwap([](const FPropertyBagPropertyDescMetaData& MetaData)
{
return MetaData.Key == CategoryName;
});
if (bAutoDisableCategories)
{
DisableCategories(OutDesc);
}
}
FString GetCategory(const FPropertyBagPropertyDesc& InDesc)
{
if (const FPropertyBagPropertyDescMetaData* MetaData = InDesc.MetaData.FindByPredicate([](const FPropertyBagPropertyDescMetaData& InMetaData) { return InMetaData.Key == CategoryName; }))
{
return MetaData->Value;
}
return FString("");
}
}