// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IAutomationDriver.h" #include "WaitUntil.h" #include "Misc/Timespan.h" #include "InputCoreTypes.h" class FAutomatedApplication; class IElementLocator; class IAsyncDriverSequence; class IAsyncDriverElement; class IAsyncDriverElementCollection; class FDriverConfiguration; class FModifierKeysState; class FAsyncAutomationDriverFactory; class FAsyncAutomationDriver : public IAsyncAutomationDriver , public TSharedFromThis { public: virtual ~FAsyncAutomationDriver(); virtual TAsyncResult Wait(FTimespan Timespan) override; virtual TAsyncResult Wait(const FDriverWaitDelegate& Delegate) override; virtual TSharedRef CreateSequence() override; virtual TAsyncResult GetCursorPosition() const override; virtual TAsyncResult GetModifierKeys() const override; virtual TSharedRef FindElement(const TSharedRef& ElementLocator) override; virtual TSharedRef FindElements(const TSharedRef& ElementLocator) override; virtual TSharedRef GetConfiguration() const override; public: void TrackPress(int32 KeyCode, int32 CharCode); void TrackPress(EMouseButtons::Type Button); void TrackRelease(int32 KeyCode, int32 CharCode); void TrackRelease(EMouseButtons::Type Button); bool IsPressed(int32 KeyCode, int32 CharCode) const; bool IsPressed(EMouseButtons::Type Button) const; int32 ProcessCharacterForControlCodes(int32 CharCode) const; private: FAsyncAutomationDriver( FAutomatedApplication* const InApplication, const TSharedRef& InConfiguration) : Application(InApplication) , Configuration(InConfiguration) { } void Initialize(); private: FAutomatedApplication* const Application; const TSharedRef Configuration; TSet PressedModifiers; TSet PressedKeys; TSet PressedChars; TSet PressedButtons; TMap CharactersToControlCodes; friend FAsyncAutomationDriverFactory; }; class FAsyncAutomationDriverFactory { public: static TSharedRef Create( FAutomatedApplication* const AutomatedApplication); static TSharedRef Create( FAutomatedApplication* const AutomatedApplication, const TSharedRef& Configuration); }; class FAutomationDriverFactory; class FAutomationDriver : public IAutomationDriver , public TSharedFromThis { public: virtual ~FAutomationDriver(); virtual bool Wait(FTimespan Timespan) override; virtual bool Wait(const FDriverWaitDelegate& Delegate) override; virtual TSharedRef CreateSequence() override; virtual FVector2D GetCursorPosition() const override; virtual FModifierKeysState GetModifierKeys() const override; virtual TSharedRef FindElement(const TSharedRef& ElementLocator) override; virtual TSharedRef FindElements(const TSharedRef& ElementLocator) override; virtual TSharedRef GetConfiguration() const override; public: void TrackPress(int32 KeyCode, int32 CharCode); void TrackPress(EMouseButtons::Type Button); void TrackRelease(int32 KeyCode, int32 CharCode); void TrackRelease(EMouseButtons::Type Button); bool IsPressed(int32 KeyCode, int32 CharCode) const; bool IsPressed(EMouseButtons::Type Button) const; private: FAutomationDriver( FAutomatedApplication* const InApplication, const TSharedRef& InAsyncDriver) : Application(InApplication) , AsyncDriver(InAsyncDriver) { } private: FAutomatedApplication* const Application; const TSharedRef AsyncDriver; friend FAutomationDriverFactory; }; class FAutomationDriverFactory { public: static TSharedRef Create( FAutomatedApplication* const AutomatedApplication); static TSharedRef Create( FAutomatedApplication* const AutomatedApplication, const TSharedRef& Configuration); };