// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "SlateCore.h" #include "HAL/Runnable.h" #include "HAL/RunnableThread.h" namespace UGSCore { class IModalTask; class FModalTaskResult; } class SModalTaskWindow : public SWindow, private FRunnable { public: SLATE_BEGIN_ARGS(SModalTaskWindow) {} SLATE_ARGUMENT(FText, Title) SLATE_ARGUMENT(FText, Message) SLATE_ARGUMENT(TSharedPtr, Task) SLATE_END_ARGS() TSharedPtr Result; SModalTaskWindow(); ~SModalTaskWindow(); void Construct(const FArguments& InArgs); EActiveTimerReturnType OnTickTimer(double CurrentTime, float DeltaTime); private: FEvent* AbortEvent; FEvent* CloseEvent; FRunnableThread* Thread; TSharedPtr Task; virtual uint32 Run() override; }; TSharedRef ExecuteModalTask(TSharedPtr Parent, TSharedRef Task, const FText& InTitle, const FText& InMessage);