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


#include "SettingKeyRowWidget.h"

#include "Components/Button.h"
#include "Components/TextBlock.h"

#define LOCTEXT_NAMESPACE "Reglages"

void USettingKeyRowWidget::NativeOnInitialized()
{
	Super::NativeOnInitialized();

	// Comme USettingRowWidget : l'onglet appelle Setup depuis SON NativeConstruct,
	// et rien ne garantit l'ordre entre le construct du parent et celui de ses
	// enfants. Initialize, lui, tourne une fois a la creation de l'arbre.
	if (KeyButton)
	{
		KeyButton->OnClicked.AddDynamic(this, &USettingKeyRowWidget::HandleKeyButtonClicked);
	}
}

void USettingKeyRowWidget::Setup(FName InMappingName, const FText& Label, const FKey& Key)
{
	MappingName = InMappingName;

	if (LabelText)
	{
		LabelText->SetText(Label);
	}

	SetKey(Key);
}

void USettingKeyRowWidget::SetKey(const FKey& Key)
{
	if (!KeyText)
	{
		return;
	}

	// Une touche invalide n'est pas une erreur : c'est l'etat normal d'une action
	// dont on vient de voler la touche. Le rouge est le signal qu'il reste
	// quelque chose a reparer avant de quitter l'ecran.
	const bool bBound = Key.IsValid();

	KeyText->SetText(bBound
		? Key.GetDisplayName()
		: LOCTEXT("ToucheNonAssignee", "Non assignée"));

	KeyText->SetColorAndOpacity(FSlateColor(bBound ? BoundColor : UnboundColor));
}

void USettingKeyRowWidget::HandleKeyButtonClicked()
{
	// On ne fait rien de plus que transmettre : la ligne ignore ce qu'est un
	// profil de touches, et c'est tres bien ainsi.
	OnRebindRequested.Broadcast(MappingName);
}

#undef LOCTEXT_NAMESPACE
