RealtimeStyleTransferRuntime/Plugins/GameSettings/Source/Private/Widgets/GameSettingListView.cpp

89 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Widgets/GameSettingListView.h"
#include "Widgets/GameSettingListEntry.h"
#include "Widgets/GameSettingVisualData.h"
#include "Engine/Engine.h"
#include "GameSetting.h"
#include "GameSettingRegistry.h"
#include "GameSettingCollection.h"
#if WITH_EDITOR
#include "Editor/WidgetCompilerLog.h"
#endif
#define LOCTEXT_NAMESPACE "GameSetting"
UGameSettingListView::UGameSettingListView(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
#if WITH_EDITOR
void UGameSettingListView::ValidateCompiledDefaults(IWidgetCompilerLog& InCompileLog) const
{
Super::ValidateCompiledDefaults(InCompileLog);
if (!VisualData)
{
InCompileLog.Error(FText::Format(FText::FromString("{0} has no VisualData defined."), FText::FromString(GetName())));
}
}
#endif
UUserWidget& UGameSettingListView::OnGenerateEntryWidgetInternal(UObject* Item, TSubclassOf<UUserWidget> DesiredEntryClass, const TSharedRef<STableViewBase>& OwnerTable)
{
UGameSetting* SettingItem = Cast<UGameSetting>(Item);
TSubclassOf<UGameSettingListEntryBase> SettingEntryClass = TSubclassOf<UGameSettingListEntryBase>(DesiredEntryClass);
if (VisualData)
{
if (const TSubclassOf<UGameSettingListEntryBase> EntryClassSetting = VisualData->GetEntryForSetting(SettingItem))
{
SettingEntryClass = EntryClassSetting;
}
else
{
//UE_LOG(LogGameSettings, Error, TEXT("UGameSettingListView: No Entry Class Found!"));
}
}
else
{
//UE_LOG(LogGameSettings, Error, TEXT("UGameSettingListView: No VisualData Defined!"));
}
UGameSettingListEntryBase& EntryWidget = GenerateTypedEntry<UGameSettingListEntryBase>(SettingEntryClass, OwnerTable);
if (!IsDesignTime())
{
if (const FText* Override = NameOverrides.Find(SettingItem->GetDevName()))
{
EntryWidget.SetDisplayNameOverride(*Override);
}
EntryWidget.SetSetting(SettingItem);
}
return EntryWidget;
}
bool UGameSettingListView::OnIsSelectableOrNavigableInternal(UObject* SelectedItem)
{
if (const UGameSettingCollection* CollectionItem = Cast<UGameSettingCollection>(SelectedItem))
{
return CollectionItem->IsSelectable();
}
return true;
}
void UGameSettingListView::AddNameOverride(const FName& DevName, const FText& OverrideName)
{
NameOverrides.Add(DevName, OverrideName);
}
#undef LOCTEXT_NAMESPACE