5#include "Components/NativeWidgetHost.h"
6#include "CoreMinimal.h"
7#include "Slate/SObjectTableRow.h"
9template <
class ItemType>
10class SStreamListView :
public SListView<ItemType>
13 using FSuperArguments =
typename SListView<ItemType>::FArguments;
15 DECLARE_DELEGATE_RetVal_OneParam(UWidget*, FCreateListViewWidgetDelegate,
const ItemType&);
17 SLATE_BEGIN_ARGS(SStreamListView<ItemType>) : _ListItemsSource(nullptr), _CreateListViewWidget(), _OnListViewScrolled()
21 SLATE_ARGUMENT(
const TArray<ItemType>*, ListItemsSource)
22 SLATE_EVENT(FCreateListViewWidgetDelegate, CreateListViewWidget);
23 SLATE_EVENT(FOnTableViewScrolled, OnListViewScrolled)
27 void Construct(const FArguments& InArgs);
30 class SNullTableRow : public STableRow<ItemType>
33 virtual const FSlateBrush* GetBorder()
const override
39 virtual ESelectionMode::Type GetSelectionMode()
const override
41 return ESelectionMode::None;
45 TSharedRef<ITableRow> HandleGenerateRow(ItemType Item,
const TSharedRef<STableViewBase>& OwnerTable)
47 UWidget* EntryWidget = CreateItemWidget.Execute(Item);
48 const TSharedPtr<SWidget> CachedWidget = EntryWidget->TakeWidget();
49 return SNew(SNullTableRow, OwnerTable)[CachedWidget.ToSharedRef()];
52 FCreateListViewWidgetDelegate CreateItemWidget;
55template <
class ItemType>
56void SStreamListView<ItemType>::Construct(
const FArguments& InArgs)
58 SListView<ItemType>::Construct(FSuperArguments()
60 .ListViewStyle(&FTableViewStyle::GetDefault())
61 .OnGenerateRow(
this, &SStreamListView::HandleGenerateRow)
62 .ListItemsSource(InArgs._ListItemsSource)
63 .OnListViewScrolled(InArgs._OnListViewScrolled));
65 this->CreateItemWidget = InArgs._CreateListViewWidget;