RealtimeStyleTransferRuntime/Plugins/GameSettings/Source/Public/Widgets/GameSettingScreen.h

84 lines
2.5 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// 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;
};