Files
UnrealEngine/Engine/Source/Developer/SettingsEditor/Private/Customizations/PerPlatformSettingsCustomization.cpp
2025-05-18 13:04:45 +08:00

72 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PerPlatformSettingsCustomization.h"
#include "DetailWidgetRow.h"
#include "Widgets/SBoxPanel.h"
#include "Widgets/Images/SImage.h"
#include "Styling/AppStyle.h"
#include "Engine/PlatformSettings.h"
#include "IDetailGroup.h"
#include "IDetailChildrenBuilder.h"
TSharedRef<IPropertyTypeCustomization> FPerPlatformSettingsCustomization::MakeInstance()
{
return MakeShareable(new FPerPlatformSettingsCustomization);
}
FPerPlatformSettingsCustomization::FPerPlatformSettingsCustomization()
{
}
void FPerPlatformSettingsCustomization::CustomizeHeader(TSharedRef<IPropertyHandle> PropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& CustomizationUtils)
{
HeaderRow
.WholeRowContent()
.MaxDesiredWidth(TOptional<float>())
.MaxDesiredWidth(TOptional<float>())
[
PropertyHandle->CreatePropertyNameWidget()
];
}
void FPerPlatformSettingsCustomization::CustomizeChildren(TSharedRef<IPropertyHandle> PropertyHandle, IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& CustomizationUtils)
{
TSharedPtr<IPropertyHandle> SettingsProperty = PropertyHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FPerPlatformSettings, Settings));
TSharedPtr<IPropertyHandleArray> SettingsPropertyArray = SettingsProperty->AsArray();
uint32 NumSettings;
SettingsPropertyArray->GetNumElements(NumSettings);
for (uint32 Index = 0; Index < NumSettings; ++Index)
{
TSharedPtr<IPropertyHandle> PlatformSettingsProperty = SettingsPropertyArray->GetElement(Index);
if (PlatformSettingsProperty->IsValidHandle())
{
UObject* PlatformSettingsObject;
FPropertyAccess::Result Result = PlatformSettingsProperty->GetValue(PlatformSettingsObject);
if (Result == FPropertyAccess::Success)
{
if (UPlatformSettings* PlatformSettings = Cast<UPlatformSettings>(PlatformSettingsObject))
{
FAddPropertyParams Params = FAddPropertyParams()
.UniqueId(PlatformSettings->GetFName())
.AllowChildren(true)
.CreateCategoryNodes(false);
IDetailGroup& PlatformGroup = ChildBuilder.AddGroup(PlatformSettings->GetFName(), FText::FromName(PlatformSettings->GetPlatformIniName()));
TSharedPtr<IPropertyHandle> PlatformSettingsPropertyArrayEntry = PlatformSettingsProperty->GetChildHandle(0);
//FDetailWidgetRow& PlatformGroup = ChildBuilder.AddCustomRow(FText::FromString(PlatformSettings->GetPlatformIniName()));
uint32 PlatformPropertiesChildHandleCount;
PlatformSettingsPropertyArrayEntry->GetNumChildren(PlatformPropertiesChildHandleCount);
for (uint32 PlatformPropertyIndex = 0; PlatformPropertyIndex < PlatformPropertiesChildHandleCount; PlatformPropertyIndex++)
{
TSharedPtr<IPropertyHandle> PlatformPropertyHandle = PlatformSettingsPropertyArrayEntry->GetChildHandle(PlatformPropertyIndex);
PlatformGroup.AddPropertyRow(PlatformPropertyHandle.ToSharedRef());
}
}
}
}
}
}