RealtimeStyleTransferRuntime/Source/LyraGame/UI/Foundation/LyraConfirmationScreen.cpp

99 lines
2.8 KiB
C++
Raw Normal View History

2022-05-23 18:41:30 +00:00
// 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>([](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<ULyraButtonBase>();
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