89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "CustomizationOptionWidget.h"
|
|
|
|
#include "Components/Border.h"
|
|
#include "Components/Button.h"
|
|
#include "Components/Image.h"
|
|
#include "Components/TextBlock.h"
|
|
#include "Engine/Texture2D.h"
|
|
|
|
void UCustomizationOptionWidget::NativeOnInitialized()
|
|
{
|
|
Super::NativeOnInitialized();
|
|
|
|
if (OptionButton)
|
|
{
|
|
OptionButton->OnClicked.AddDynamic(this, &UCustomizationOptionWidget::HandleButtonClicked);
|
|
}
|
|
|
|
SetSelected(false);
|
|
}
|
|
|
|
void UCustomizationOptionWidget::SetupAsPart(int32 InIndex, UTexture2D* Icon)
|
|
{
|
|
OptionIndex = InIndex;
|
|
|
|
if (OptionImage)
|
|
{
|
|
// Le blanc et pas la couleur d'origine : SetupAsColor a pu teinter
|
|
// cette image lors d'un passage precedent, et la case est recyclee.
|
|
// Sans cette remise a plat, une vignette heriterait de la teinte de la
|
|
// pastille qui occupait la meme case avant elle.
|
|
OptionImage->SetColorAndOpacity(FLinearColor::White);
|
|
OptionImage->SetBrushFromTexture(Icon);
|
|
OptionImage->SetVisibility(Icon ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
|
|
}
|
|
|
|
if (IndexText)
|
|
{
|
|
// Le numero ne sert que de repli. Affiche a cote d'une vignette, il la
|
|
// salirait ; affiche seul, il rend la case utilisable.
|
|
IndexText->SetText(FText::AsNumber(InIndex + 1));
|
|
IndexText->SetVisibility(Icon ? ESlateVisibility::Collapsed : ESlateVisibility::HitTestInvisible);
|
|
}
|
|
}
|
|
|
|
void UCustomizationOptionWidget::SetupAsColor(int32 InIndex, const FLinearColor& Color)
|
|
{
|
|
OptionIndex = InIndex;
|
|
|
|
if (OptionImage)
|
|
{
|
|
// Aucune texture assignee : le pinceau par defaut d'une UImage est un
|
|
// aplat blanc, que la teinte suffit a colorer. C'est ce qui permet a
|
|
// une pastille de n'avoir besoin d'aucun asset.
|
|
OptionImage->SetBrushFromTexture(nullptr);
|
|
OptionImage->SetColorAndOpacity(Color);
|
|
OptionImage->SetVisibility(ESlateVisibility::Visible);
|
|
}
|
|
|
|
if (IndexText)
|
|
{
|
|
IndexText->SetVisibility(ESlateVisibility::Collapsed);
|
|
}
|
|
}
|
|
|
|
void UCustomizationOptionWidget::SetSelected(bool bInSelected)
|
|
{
|
|
if (SelectionBorder)
|
|
{
|
|
SelectionBorder->SetBrushColor(bInSelected ? SelectedBorderColor : UnselectedBorderColor);
|
|
}
|
|
|
|
// La case deja choisie n'est plus cliquable : re-cliquer une option active
|
|
// ne ferait rien, et un bouton qui ne fait rien laisse croire que le clic
|
|
// n'a pas ete pris. Le style Disabled du bouton la marque au passage --
|
|
// c'est un second signal de selection, gratuit, en plus du cadre.
|
|
if (OptionButton)
|
|
{
|
|
OptionButton->SetIsEnabled(!bInSelected);
|
|
}
|
|
}
|
|
|
|
void UCustomizationOptionWidget::HandleButtonClicked()
|
|
{
|
|
OnOptionClicked.Broadcast(OptionIndex);
|
|
}
|