86 lines
2.6 KiB
C++
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("");
|
|
}
|
|
}
|