// Copyright Epic Games, Inc. All Rights Reserved. #include "LyraConfirmationScreen.h" #if WITH_EDITOR #include "Editor/WidgetCompilerLog.h" #endif #include "CommonBorder.h" #include "CommonRichTextBlock.h" #include "CommonTextBlock.h" #include "Components/DynamicEntryBox.h" #include "ICommonInputModule.h" #include "Input/Reply.h" #include "CommonButtonBase.h" #include "LyraButtonBase.h" void ULyraConfirmationScreen::SetupDialog(UCommonGameDialogDescriptor* Descriptor, FCommonMessagingResultDelegate ResultCallback) { Super::SetupDialog(Descriptor, ResultCallback); Text_Title->SetText(Descriptor->Header); RichText_Description->SetText(Descriptor->Body); EntryBox_Buttons->Reset([](ULyraButtonBase& Button) { Button.OnClicked().Clear(); }); for (const FConfirmationDialogAction& Action : Descriptor->ButtonActions) { FDataTableRowHandle ActionRow; switch(Action.Result) { case ECommonMessagingResult::Confirmed: ActionRow = ICommonInputModule::GetSettings().GetDefaultClickAction(); break; case ECommonMessagingResult::Declined: ActionRow = ICommonInputModule::GetSettings().GetDefaultBackAction(); break; case ECommonMessagingResult::Cancelled: ActionRow = CancelAction; break; default: ensure(false); continue; } ULyraButtonBase* Button = EntryBox_Buttons->CreateEntry(); Button->SetTriggeringInputAction(ActionRow); Button->OnClicked().AddUObject(this, &ThisClass::CloseConfirmationWindow, Action.Result); Button->SetButtonText(Action.OptionalDisplayText); } OnResultCallback = ResultCallback; } void ULyraConfirmationScreen::KillDialog() { Super::KillDialog(); } void ULyraConfirmationScreen::NativeOnInitialized() { Super::NativeOnInitialized(); Border_TapToCloseZone->OnMouseButtonDownEvent.BindDynamic(this, &ULyraConfirmationScreen::HandleTapToCloseZoneMouseButtonDown); } void ULyraConfirmationScreen::CloseConfirmationWindow(ECommonMessagingResult Result) { DeactivateWidget(); OnResultCallback.ExecuteIfBound(Result); } FEventReply ULyraConfirmationScreen::HandleTapToCloseZoneMouseButtonDown(FGeometry MyGeometry, const FPointerEvent& MouseEvent) { FEventReply Reply; Reply.NativeReply = FReply::Unhandled(); if (MouseEvent.IsTouchEvent() || MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton) { CloseConfirmationWindow(ECommonMessagingResult::Declined); Reply.NativeReply = FReply::Handled(); } return Reply; } #if WITH_EDITOR void ULyraConfirmationScreen::ValidateCompiledDefaults(IWidgetCompilerLog& CompileLog) const { if (CancelAction.IsNull()) { CompileLog.Error(FText::Format(FText::FromString(TEXT("{0} has unset property: CancelAction.")), FText::FromString(GetName()))); } } #endif