Files

74 lines
2.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "InputCoreTypes.h"
#include "SettingKeyRowWidget.generated.h"
class UButton;
class UTextBlock;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSettingKeyRebindRequested, FName, MappingName);
/**
* Une ligne de remappage : un libelle, et un bouton portant la touche actuelle.
*
* Widget distinct de USettingRowWidget et non un mode de plus : une touche n'est
* pas un index dans une liste de paliers, il n'y a ni fleches ni curseur, et
* l'interaction est d'une autre nature -- on ouvre un voile de capture.
*
* Elle ne sait pas remapper. Elle previent via OnRebindRequested et c'est
* l'onglet qui pilote, comme partout ailleurs dans les reglages.
*
* Classe Abstract : on cree un WBP_SettingKeyRow qui en herite.
*/
UCLASS(Abstract)
class EMBERWILD_API USettingKeyRowWidget : public UUserWidget
{
GENERATED_BODY()
public:
virtual void NativeOnInitialized() override;
UPROPERTY(BlueprintAssignable, Category = "Reglages")
FOnSettingKeyRebindRequested OnRebindRequested;
/** Pose le libelle et la touche. Le nom de mapping est renvoye tel quel au clic. */
UFUNCTION(BlueprintCallable, Category = "Reglages")
void Setup(FName InMappingName, const FText& Label, const FKey& Key);
/** Met a jour la seule touche affichee. */
UFUNCTION(BlueprintCallable, Category = "Reglages")
void SetKey(const FKey& Key);
UFUNCTION(BlueprintPure, Category = "Reglages")
FName GetMappingName() const { return MappingName; }
protected:
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> LabelText;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UButton> KeyButton;
UPROPERTY(meta = (BindWidget))
TObjectPtr<UTextBlock> KeyText;
/** Couleur du texte quand l'action n'a plus aucune touche. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
FLinearColor UnboundColor = FLinearColor(0.9f, 0.2f, 0.2f);
/** Couleur normale. Reprise telle quelle a la premiere affectation valide. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
FLinearColor BoundColor = FLinearColor::White;
private:
UFUNCTION()
void HandleKeyButtonClicked();
/** Identifiant Enhanced Input du mapping, pas le libelle affiche. */
FName MappingName = NAME_None;
};