Skip to content

File SFSettingEntryWidget.h

File List > Public > UI > SettingEntries > SFSettingEntryWidget.h

Go to the documentation of this file

// Copyright 2026 Anh Pham. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "CommonUserWidget.h"
#include "GameplayTagContainer.h"
#include "Core/SFCoreTypes.h"
#include "SFSettingEntryWidget.generated.h"

UCLASS(Abstract, BlueprintType, Blueprintable)
class SETTINGSFRAMEWORK_API USFSettingEntryWidget : public UCommonUserWidget
{
    GENERATED_BODY()

#pragma region Initialization
public:
    virtual void NativeConstruct() override;
    virtual void InitializeSettingEntry(const class USFSettingDefinition* InSettingDefinition);

protected:
    UFUNCTION(BlueprintImplementableEvent, Category = "SFSettingEntryWidget|Initialization", meta = (DisplayName = "Initialize Setting Entry"))
    void BP_InitializeSettingEntry(const class USFSettingDefinition* InSettingDefinition);

    UFUNCTION()
    void HandleOnSettingValueChanged(const FGameplayTag& ChangedSettingTag, class USFSettingValue* NewValue);
#pragma endregion

#pragma region Widgets
protected:
    UPROPERTY(BlueprintReadOnly, Category = "SFSettingEntryWidget|Widgets", meta = (BindWidgetOptional))
    TObjectPtr<class UCommonTextBlock> SettingLabel;
#pragma endregion

#pragma region Setting Data
public:
    UFUNCTION(BlueprintPure, Category = "SFSettingEntryWidget|Setting Data")
    FGameplayTag GetSettingTag() const { return SettingTag; }

    UFUNCTION(BlueprintPure, Category = "SFSettingEntryWidget|Setting Data")
    class USFSettingDefinition* GetSettingDefinition() const;

    UPROPERTY(BlueprintAssignable, Category = "SFSettingEntryWidget|Setting Data")
    FOnSettingEntryFocused OnSettingFocused;

protected:
    UPROPERTY(BlueprintReadOnly, Category = "SFSettingEntryWidget|Setting Data")
    FGameplayTag SettingTag;
#pragma endregion

#pragma region Setting Value & State
protected:
    UFUNCTION(BlueprintCallable, Category = "SFSettingEntryWidget|Setting Value & State")
    void OnUserChangedValue(class USFSettingValue* NewValue);

    UFUNCTION(BlueprintNativeEvent, Category = "SFSettingEntryWidget|Setting Value & State")
    void UpdateVisualValue(const class USFSettingValue* NewValue);

    virtual void UpdateVisualValue_Implementation(const class USFSettingValue* NewValue) {};

    void UpdateWidgetState();
#pragma endregion

#pragma region Navigation
public:
    UFUNCTION(BlueprintNativeEvent, Category = "SFSettingEntryWidget|Navigation")
    UWidget* GetPrimaryFocusTarget() const;
    virtual UWidget* GetPrimaryFocusTarget_Implementation() const;

protected:
    virtual void NativeOnAddedToFocusPath(const FFocusEvent& InFocusEvent) override;
    virtual void NativeOnMouseEnter(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
#pragma endregion
};