// 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); }