84 lines
2.5 KiB
C
84 lines
2.5 KiB
C
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "CoreMinimal.h"
|
||
|
#include "UObject/ObjectKey.h"
|
||
|
#include "CommonActivatableWidget.h"
|
||
|
#include "GameSettingRegistryChangeTracker.h"
|
||
|
|
||
|
#include "GameSettingScreen.generated.h"
|
||
|
|
||
|
class UGameSettingListView;
|
||
|
class UCommonRichTextBlock;
|
||
|
class UCommonTextBlock;
|
||
|
class UGameSettingDetailView;
|
||
|
class UGameSetting;
|
||
|
class UGameSettingRegistry;
|
||
|
class UGameSettingPanel;
|
||
|
class UGameSettingCollection;
|
||
|
enum class EGameSettingChangeReason : uint8;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
UCLASS(Abstract, meta = (Category = "Settings", DisableNativeTick))
|
||
|
class GAMESETTINGS_API UGameSettingScreen : public UCommonActivatableWidget
|
||
|
{
|
||
|
GENERATED_BODY()
|
||
|
public:
|
||
|
|
||
|
protected:
|
||
|
virtual void NativeOnInitialized() override;
|
||
|
virtual void NativeOnActivated() override;
|
||
|
virtual void NativeOnDeactivated() override;
|
||
|
virtual UWidget* NativeGetDesiredFocusTarget() const override;
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
void NavigateToSetting(FName SettingDevName);
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
void NavigateToSettings(const TArray<FName>& SettingDevNames);
|
||
|
|
||
|
UFUNCTION(BlueprintNativeEvent)
|
||
|
void OnSettingsDirtyStateChanged(bool bSettingsDirty);
|
||
|
virtual void OnSettingsDirtyStateChanged_Implementation(bool bSettingsDirty) { }
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
bool AttemptToPopNavigation();
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
UGameSettingCollection* GetSettingCollection(FName SettingDevName, bool& HasAnySettings);
|
||
|
|
||
|
protected:
|
||
|
virtual UGameSettingRegistry* CreateRegistry() PURE_VIRTUAL(, return nullptr;);
|
||
|
|
||
|
template <typename GameSettingRegistryT = UGameSettingRegistry>
|
||
|
GameSettingRegistryT* GetRegistry() const { return Cast<GameSettingRegistryT>(const_cast<UGameSettingScreen*>(this)->GetOrCreateRegistry()); }
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
virtual void CancelChanges();
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
virtual void ApplyChanges();
|
||
|
|
||
|
UFUNCTION(BlueprintCallable)
|
||
|
bool HaveSettingsBeenChanged() const { return ChangeTracker.HaveSettingsBeenChanged(); }
|
||
|
|
||
|
void ClearDirtyState();
|
||
|
|
||
|
void HandleSettingChanged(UGameSetting* Setting, EGameSettingChangeReason Reason);
|
||
|
|
||
|
FGameSettingRegistryChangeTracker ChangeTracker;
|
||
|
|
||
|
private:
|
||
|
UGameSettingRegistry* GetOrCreateRegistry();
|
||
|
|
||
|
private: // Bound Widgets
|
||
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
|
||
|
UGameSettingPanel* Settings_Panel;
|
||
|
|
||
|
UPROPERTY(Transient)
|
||
|
mutable UGameSettingRegistry* Registry;
|
||
|
};
|