// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "SettingsTabWidget.generated.h"

class USettingsMenuWidget;

/**
 * Base commune a tous les onglets de reglages.
 *
 * Deux verbes, rien de plus : l'ecran parent rafraichit ou reinitialise l'onglet
 * visible sans jamais savoir ce qu'il contient. Ajouter un onglet ne demande
 * donc aucune ligne dans USettingsMenuWidget.
 */
UCLASS(Abstract)
class EMBERWILD_API USettingsTabWidget : public UUserWidget
{
	GENERATED_BODY()

public:
	/** Relit les reglages et repositionne les lignes, sans rien diffuser. */
	virtual void RefreshFromSettings() {}

	/** Remet a l'usine les seuls reglages de cet onglet, puis se rafraichit. */
	virtual void ResetToDefaults() {}

	/**
	 * L'ecran se presente a ses onglets a la construction.
	 *
	 * Pointeur explicite plutot qu'un GetTypedOuter au moment de s'en servir :
	 * un onglet doit pouvoir demander une confirmation, et faire dependre ca de
	 * la forme de l'arbre de widgets casserait le jour ou on l'imbrique
	 * autrement.
	 *
	 * Defini dans le .cpp et non inline : TWeakObjectPtr exige un type complet
	 * pour s'assigner, et inclure l'en-tete de l'ecran ici ferait dependre tous
	 * les onglets de lui.
	 */
	void SetOwningMenu(USettingsMenuWidget* InMenu);

protected:
	UPROPERTY(Transient, BlueprintReadOnly, Category = "Reglages")
	TWeakObjectPtr<USettingsMenuWidget> OwningMenu;
};
