// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreTypes.h" #include "Containers/Array.h" #include "ITargetDeviceService.h" #include "Templates/SharedPointer.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/SListView.h" class FDeviceBrowserFilter; class FDeviceManagerModel; class FUICommandList; class ITargetDeviceServiceManager; /** * Delegate type for selection changes in the device browser. * * The first parameter is the newly selected device service (or nullptr if none was selected). */ DECLARE_DELEGATE_OneParam(FOnDeviceBrowserSelectionChanged, const ITargetDeviceServicePtr&) /** * Implements the device browser widget. */ class SDeviceBrowser : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SDeviceBrowser) { } SLATE_END_ARGS() public: /** * Constructs the widget. * * @param InArgs The construction arguments. * @param InModel The view model to use. * @param InDeviceServiceManager The target device service manager to use. * @param InUICommandList The UI command list to use. */ void Construct(const FArguments& InArgs, const TSharedRef& InModel, const TSharedRef& InDeviceServiceManager, const TSharedPtr& InUICommandList); public: //~ SCompoundWidget overrides virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override; protected: /** * Reloads the list of target device services. * * @param FullyReload Whether to fully reload the service entries, or only re-apply filtering. */ void ReloadDeviceServiceList(bool FullyReload); private: /** Holds the list of all available target device services. */ TArray> AvailableDeviceServices; /** Holds the list of filtered target device services for display. */ TArray> DeviceServiceList; /** Holds the list view for filtered target device services. */ TSharedPtr> DeviceServiceListView; /** Holds a pointer to the target device service manager. */ TSharedPtr DeviceServiceManager; /** Holds the filter model. */ TSharedPtr Filter; /** Holds a pointer the device manager's view model. */ TSharedPtr Model; /** Holds a flag indicating whether the list of target device services needs to be refreshed. */ bool NeedsServiceListRefresh; /** Holds a pointer to the command list for controlling the device. */ TSharedPtr UICommandList; };