12template<
typename ArgType>
20#define SLATE_ITEMS_SOURCE_ARGUMENT( ArgType, ArgName ) \
22 const TArray<ArgType>* _##ArgName##_ArrayPointer = nullptr; \
23 ::UE::Slate::Containers::TObservableArray<ArgType>* _##ArgName##_ObservableArrayPointer = nullptr; \
24 TSharedPtr<::UE::Slate::Containers::TObservableArray<ArgType>> _##ArgName##_SharedObservableArray; \
25 void _Reset##ArgName() \
27 _##ArgName##_ArrayPointer = nullptr; \
28 _##ArgName##_ObservableArrayPointer = nullptr; \
29 _##ArgName##_SharedObservableArray.Reset(); \
32 WidgetArgsType& ArgName(const TArray<ArgType>* InArg) \
35 _##ArgName##_ArrayPointer = InArg; \
36 return static_cast<WidgetArgsType*>(this)->Me(); \
38 WidgetArgsType& ArgName(::UE::Slate::Containers::TObservableArray<ArgType>* InArg) \
41 _##ArgName##_ObservableArrayPointer = InArg; \
42 return static_cast<WidgetArgsType*>(this)->Me(); \
44 WidgetArgsType& ArgName(TSharedPtr<::UE::Slate::Containers::TObservableArray<ArgType>> InArg) \
47 _##ArgName##_SharedObservableArray = InArg; \
48 return static_cast<WidgetArgsType*>(this)->Me(); \
50 WidgetArgsType& ArgName(TSharedRef<::UE::Slate::Containers::TObservableArray<ArgType>> InArg) \
53 _##ArgName##_SharedObservableArray = InArg; \
54 return static_cast<WidgetArgsType*>(this)->Me(); \
56 WidgetArgsType& ArgName(::UE::Slate::ItemsSource::ForwardedSlateItemsSourceArgument<ArgType> InArg) \
59 _##ArgName##_ArrayPointer = InArg.ArrayPointer; \
60 _##ArgName##_ObservableArrayPointer = InArg.ObservableArrayPointer; \
61 _##ArgName##_SharedObservableArray = InArg.SharedObservableArray; \
62 return static_cast<WidgetArgsType*>(this)->Me(); \
64 ::UE::Slate::ItemsSource::ForwardedSlateItemsSourceArgument<ArgType> Get##ArgName() const \
66 return {_##ArgName##_ArrayPointer, _##ArgName##_ObservableArrayPointer, _##ArgName##_SharedObservableArray}; \
68 TUniquePtr<::UE::Slate::ItemsSource::IItemsSource<ArgType>> Make##ArgName(TSharedRef<STableViewBase> InWidget) const \
70 if (_##ArgName##_ArrayPointer) \
72 return MakeUnique<::UE::Slate::ItemsSource::FArrayPointer<ArgType>>(_##ArgName##_ArrayPointer); \
74 else if (_##ArgName##_ObservableArrayPointer) \
76 return MakeUnique<::UE::Slate::ItemsSource::FObservableArrayPointer<ArgType>>(InWidget, _##ArgName##_ObservableArrayPointer); \
78 else if (_##ArgName##_SharedObservableArray) \
80 return MakeUnique<::UE::Slate::ItemsSource::FSharedObservableArray<ArgType>>(InWidget, _##ArgName##_SharedObservableArray.ToSharedRef()); \
82 return TUniquePtr<::UE::Slate::ItemsSource::IItemsSource<ArgType>>(); \
89 template <
typename ItemType>
97 virtual bool IsSame(
const void* RawPointer)
const = 0;
104template <
typename ItemType>
118 virtual bool IsSame(
const void* RawPointer)
const override
120 return RawPointer ==
reinterpret_cast<const void*
>(ItemsSource);
131template<
typename InItemType>
142 ArrayChangedHandle =
InItemsSource->OnArrayChanged().AddRaw(
this, &FObservableArrayPointer::HandleArrayChanged);
166 checkf(ListViewOwner.IsValid(),
TEXT(
"The View widget has a source needed to be released to prevent bad memory access."));
175 virtual bool IsSame(
const void* RawPointer)
const override
177 return RawPointer ==
reinterpret_cast<const void*
>(&ItemsSource);
181 void HandleArrayChanged(typename ::UE::Slate::Containers::TObservableArray<ItemType>::ObservableArrayChangedArgsType Args)
198template<
typename InItemType>
209 ArrayChangedHandle =
InItemsSource->OnArrayChanged().AddRaw(
this, &FSharedObservableArray::HandleArrayChanged);
222 virtual bool IsSame(
const void* RawPointer)
const override
225 return RawPointer ==
reinterpret_cast<const void*
>(
ValueToTest);
229 void HandleArrayChanged(typename ::UE::Slate::Containers::TObservableArray<ItemType>::ObservableArrayChangedArgsType Args)
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition IDelegateInstance.h:14
Definition STableViewBase.h:110
Definition ArrayView.h:139
Definition SharedPointer.h:692
Definition SharedPointer.h:153
ObjectType & Get() const
Definition SharedPointer.h:474
Definition SharedPointer.h:1295
Definition IItemsSource.h:106
FArrayPointer(const TArray< ItemType > *InItemsSource)
Definition IItemsSource.h:108
virtual bool IsSame(const void *RawPointer) const override
Definition IItemsSource.h:118
virtual const TArrayView< const ItemType > GetItems() const override
Definition IItemsSource.h:113
Definition IItemsSource.h:133
InItemType ItemType
Definition IItemsSource.h:136
FObservableArrayPointer(TSharedRef< WidgetType > InListView, ::UE::Slate::Containers::TObservableArray< ItemType > *InItemsSource)
Definition IItemsSource.h:138
virtual ~FObservableArrayPointer()
Definition IItemsSource.h:145
virtual const TArrayView< const ItemType > GetItems() const override
Definition IItemsSource.h:170
virtual bool IsSame(const void *RawPointer) const override
Definition IItemsSource.h:175
Definition IItemsSource.h:200
FSharedObservableArray(TSharedRef< WidgetType > InListView, TSharedRef<::UE::Slate::Containers::TObservableArray< ItemType > > InItemsSource)
Definition IItemsSource.h:205
InItemType ItemType
Definition IItemsSource.h:203
virtual bool IsSame(const void *RawPointer) const override
Definition IItemsSource.h:222
virtual ~FSharedObservableArray()
Definition IItemsSource.h:212
virtual const TArrayView< const ItemType > GetItems() const override
Definition IItemsSource.h:217
Definition IItemsSource.h:91
virtual ~IItemsSource()=default
virtual bool IsSame(const void *RawPointer) const =0
virtual const TArrayView< const ItemType > GetItems() const =0
Definition IItemsSource.h:11
Definition ObservableArray.h:187
FArrayChangedDelegate & OnArrayChanged()
Definition ObservableArray.h:238
int32 Num() const
Definition ObservableArray.h:457
ElementType * GetData()
Definition ObservableArray.h:477
Definition IItemsSource.h:14
const TArray< ArgType > * ArrayPointer
Definition IItemsSource.h:15
::UE::Slate::Containers::TObservableArray< ArgType > * ObservableArrayPointer
Definition IItemsSource.h:16
TSharedPtr<::UE::Slate::Containers::TObservableArray< ArgType > > SharedObservableArray
Definition IItemsSource.h:17