Files
UnrealEngineUWP/Engine/Source/Editor/ConfigEditor/Private/SConfigEditor.cpp
marc audy cd4b7d3c78 Game user settings fix and rollback of 20905839, which was itself a rollback of 20029182
#rb [at]Josh.Adams
#preflight

#ROBOMERGE-OWNER: marc.audy
#ROBOMERGE-AUTHOR: mic.rooney
#ROBOMERGE-SOURCE: CL 20973575 via CL 20978259
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
#ROBOMERGE-CONFLICT from-shelf

[CL 20980862 by marc audy in ue5-main branch]
2022-07-07 01:55:35 -04:00

105 lines
3.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SConfigEditor.h"
#include "UObject/UnrealType.h"
#include "ConfigPropertyHelper.h"
#include "Misc/ConfigCacheIni.h"
#include "Modules/ModuleManager.h"
#include "Widgets/SBoxPanel.h"
#include "SlateOptMacros.h"
#include "IDetailsView.h"
#include "PropertyEditorModule.h"
#include "STargetPlatformSelector.h"
#define LOCTEXT_NAMESPACE "ConfigEditor"
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SConfigEditor::Construct(const FArguments& InArgs, TWeakFieldPtr<FProperty> InEditProperty)
{
TargetPlatformSelection = SNew(STargetPlatformSelector)
.OnTargetPlatformChanged(this, &SConfigEditor::HandleTargetPlatformChanged);
EditProperty = InEditProperty;
LocalConfigCache = MakeShareable(new FConfigCacheIni(EConfigCacheType::Temporary));
// initialize details view
FDetailsViewArgs DetailsViewArgs;
{
DetailsViewArgs.bAllowSearch = false;
DetailsViewArgs.bHideSelectionTip = true;
DetailsViewArgs.bLockable = false;
DetailsViewArgs.bSearchInitialKeyFocus = true;
DetailsViewArgs.bUpdatesFromSelection = false;
DetailsViewArgs.bShowOptions = false;
DetailsViewArgs.bShowModifiedPropertiesOption = false;
}
DetailsView = FModuleManager::GetModuleChecked<FPropertyEditorModule>("PropertyEditor").CreateDetailView(DetailsViewArgs);
CreateDisplayObjectForSelectedTargetPlatform();
////
// Our Widget setup is complete.
PropertyValueEditor = DetailsView.ToSharedRef();
ChildSlot
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
[
TargetPlatformSelection.ToSharedRef()
]
+ SVerticalBox::Slot()
[
PropertyValueEditor.ToSharedRef()
]
];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SConfigEditor::CreateDisplayObjectForSelectedTargetPlatform()
{
// Get the ini file and hierarchy linked with this property
FString SelectedTargetPlatform = *TargetPlatformSelection->GetSelectedTargetPlatform().Get();
FString ConfigHelperName(TEXT("ConfigEditorPropertyHelper_"));
ConfigHelperName += SelectedTargetPlatform;
PropHelper = FindObject<UConfigHierarchyPropertyView>(GetTransientPackage(), *ConfigHelperName);
if (!PropHelper.IsValid())
{
PropHelper = NewObject<UConfigHierarchyPropertyView>(GetTransientPackage(), *ConfigHelperName);
PropHelper->AddToRoot();
}
PropHelper->EditProperty = EditProperty.Get();
FString ClassConfigName = PropHelper->EditProperty->GetOwnerClass()->ClassConfigName.ToString();
FConfigFile PlatformIniFile;
LocalConfigCache->LoadLocalIniFile(PlatformIniFile, *ClassConfigName, true, *SelectedTargetPlatform);
for (const auto& IniFile : PlatformIniFile.SourceIniHierarchy)
{
UPropertyConfigFileDisplayRow* ConfigFilePropertyObj = NewObject<UPropertyConfigFileDisplayRow>(GetTransientPackage(), *IniFile.Value);
ConfigFilePropertyObj->InitWithConfigAndProperty(IniFile.Value, PropHelper->EditProperty.Get());
PropHelper->ConfigFilePropertyObjects.Add(ConfigFilePropertyObj);
}
DetailsView->SetObject(PropHelper.Get());
}
void SConfigEditor::HandleTargetPlatformChanged()
{
CreateDisplayObjectForSelectedTargetPlatform();
}
#undef LOCTEXT_NAMESPACE