// Copyright Epic Games, Inc. All Rights Reserved. #include "GameSettingCollection.h" #include "Framework/Text/ITextDecorator.h" #include "Framework/Text/RichTextMarkupProcessing.h" #define LOCTEXT_NAMESPACE "GameSetting" //-------------------------------------- // UGameSettingCollection //-------------------------------------- UGameSettingCollection::UGameSettingCollection() { } void UGameSettingCollection::AddSetting(UGameSetting* Setting) { #if !UE_BUILD_SHIPPING ensureAlwaysMsgf(Setting->GetSettingParent() == nullptr, TEXT("This setting already has a parent!")); ensureAlwaysMsgf(!Settings.Contains(Setting), TEXT("This collection already includes this setting!")); #endif Settings.Add(Setting); Setting->SetSettingParent(this); if (LocalPlayer) { Setting->Initialize(LocalPlayer); } } TArray UGameSettingCollection::GetChildCollections() const { TArray CollectionSettings; for (UGameSetting* ChildSetting : Settings) { if (UGameSettingCollection* ChildCollection = Cast(ChildSetting)) { CollectionSettings.Add(ChildCollection); } } return CollectionSettings; } void UGameSettingCollection::GetSettingsForFilter(const FGameSettingFilterState& FilterState, TArray& InOutSettings) const { for (UGameSetting* ChildSetting : Settings) { // If the child setting is a collection, only add it to the set if it has any visible children. if (Cast(ChildSetting)) { if (FilterState.DoesSettingPassFilter(*ChildSetting)) { InOutSettings.Add(ChildSetting); } } else if (UGameSettingCollection* ChildCollection = Cast(ChildSetting)) { TArray ChildSettings; ChildCollection->GetSettingsForFilter(FilterState, ChildSettings); if (ChildSettings.Num() > 0) { // Don't add the root setting to the returned items, it's the container of N-possible // other settings and containers we're actually displaying right now. if (!FilterState.IsSettingInRootList(ChildSetting)) { InOutSettings.Add(ChildSetting); } InOutSettings.Append(ChildSettings); } } else { if (FilterState.DoesSettingPassFilter(*ChildSetting)) { InOutSettings.Add(ChildSetting); } } } } //-------------------------------------- // UGameSettingCollectionPage //-------------------------------------- UGameSettingCollectionPage::UGameSettingCollectionPage() { } void UGameSettingCollectionPage::OnInitialized() { Super::OnInitialized(); #if !UE_BUILD_SHIPPING ensureAlwaysMsgf(!NavigationText.IsEmpty(), TEXT("You must provide a NavigationText for this setting.")); ensureAlwaysMsgf(!DescriptionRichText.IsEmpty(), TEXT("You must provide a description for new page collections.")); #endif } void UGameSettingCollectionPage::GetSettingsForFilter(const FGameSettingFilterState& FilterState, TArray& InOutSettings) const { // If we're including nested pages, call the super and dump them all, otherwise, we pretend we have none for the filtering. // because our settings are displayed on another page. if (FilterState.bIncludeNestedPages || FilterState.IsSettingInRootList(this)) { Super::GetSettingsForFilter(FilterState, InOutSettings); } } void UGameSettingCollectionPage::ExecuteNavigation() { OnExecuteNavigationEvent.Broadcast(this); } #undef LOCTEXT_NAMESPACE