5#include "Components/NativeWidgetHost.h"
6#include "CoreMinimal.h"
7#include "Launch/Resources/Version.h"
8#include "Slate/SObjectTableRow.h"
10template <
class ItemType>
11class SStreamListView :
public SListView<ItemType>
14 using FSuperArguments =
typename SListView<ItemType>::FArguments;
16 DECLARE_DELEGATE_RetVal_OneParam(UWidget*, FCreateListViewWidgetDelegate,
const ItemType&);
18 SLATE_BEGIN_ARGS(SStreamListView<ItemType>) : _ListItemsSource(nullptr), _CreateListViewWidget(), _OnListViewScrolled()
22 SLATE_ARGUMENT(
const TArray<ItemType>*, ListItemsSource)
23 SLATE_EVENT(FCreateListViewWidgetDelegate, CreateListViewWidget);
24 SLATE_EVENT(FOnTableViewScrolled, OnListViewScrolled)
28 void Construct(const FArguments& InArgs);
31 class SNullTableRow : public STableRow<ItemType>
34 virtual const FSlateBrush* GetBorder()
const override
40 virtual ESelectionMode::Type GetSelectionMode()
const override
42 return ESelectionMode::None;
46 TSharedRef<ITableRow> HandleGenerateRow(ItemType Item,
const TSharedRef<STableViewBase>& OwnerTable)
48 UWidget* EntryWidget = CreateItemWidget.Execute(Item);
49 const TSharedPtr<SWidget> CachedWidget = EntryWidget->TakeWidget();
50 return SNew(SNullTableRow, OwnerTable)[CachedWidget.ToSharedRef()];
53 FCreateListViewWidgetDelegate CreateItemWidget;
56template <
class ItemType>
57void SStreamListView<ItemType>::Construct(
const FArguments& InArgs)
59 SListView<ItemType>::Construct(FSuperArguments()
60#
if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 0
62 .ListViewStyle(&FTableViewStyle::GetDefault())
64 .OnGenerateRow(
this, &SStreamListView::HandleGenerateRow)
65 .ListItemsSource(InArgs._ListItemsSource)
66 .OnListViewScrolled(InArgs._OnListViewScrolled));
68 this->CreateItemWidget = InArgs._CreateListViewWidget;