UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SMultipleOptionTable.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Misc/Attribute.h"
7#include "Layout/Visibility.h"
11#include "Widgets/SWidget.h"
13#include "Widgets/SBoxPanel.h"
14#include "Styling/SlateTypes.h"
17#include "Widgets/Layout/SBox.h"
24
25#define LOCTEXT_NAMESPACE "SMultipleOptionTable"
26
30template<typename OptionType>
32 : public SMultiColumnTableRow< TSharedPtr<OptionType> >
33{
34public:
37
41 SLATE_EVENT(FOnCheckStateChanged, OnCheckStateChanged)
43 SLATE_EVENT(FOnGenerateWidget, OnGenerateWidget)
45
46public:
47
53 void Construct( const FArguments& InArgs)
54 {
55 Option = InArgs._Option;
56 OnCheckStateChanged = InArgs._OnCheckStateChanged;
57 IsChecked = InArgs._IsChecked;
58 OnGenerateWidget= InArgs._OnGenerateWidget;
59
61 }
62
70 virtual TSharedRef<SWidget> GenerateWidgetForColumn( const FName& ColumnName ) override
71 {
72 if (ColumnName == "IsSelected")
73 {
75 .IsChecked(this, &SOptionTableRow::HandleCheckBoxIsChecked)
76 .OnCheckStateChanged(this, &SOptionTableRow::HandleCheckBoxCheckStateChanged)
77 [
78 OnGenerateWidget.Execute(Option)
79 ];
80 }
81
83 }
84
85private:
86 // Callback for changing the checked state of the check box.
87 void HandleCheckBoxCheckStateChanged( ECheckBoxState NewState )
88 {
89 OnCheckStateChanged.Execute(NewState);
90 }
91
92 // Callback for determining the checked state of the check box.
93 ECheckBoxState HandleCheckBoxIsChecked( ) const
94 {
95 return IsChecked.Get();
96 }
97
98public:
100
101private:
102 OptionType Option;
103 FOnCheckStateChanged OnCheckStateChanged;
105 FOnGenerateWidget OnGenerateWidget;
106};
107
108template<typename OptionType>
110{
111public:
113
114 // This callback will be used before selecting or deselecting all of the options. May be of use for optimization.
116
117 // This callback will be used after selecting or deselecting all of the options. May be of use for optimization.
119
122
124 SLATE_EVENT(FOnPreBatchSelect, OnPreBatchSelect)
125 SLATE_EVENT(FOnPostBatchSelect, OnPostBatchSelect)
126 SLATE_EVENT(FOnGenerateOptionWidget, OnGenerateOptionWidget)
127 SLATE_EVENT(FOnOptionSelectionChanged, OnOptionSelectionChanged)
128 SLATE_EVENT(FIsOptionSelected, IsOptionSelected)
129 SLATE_ATTRIBUTE(FOptionalSize, ListHeight)
131
132public:
133 void Construct(const FArguments& InArgs, const TArray< OptionType >* const InOptions);
134
135 // Refreshes the list view. Useful if the options array is modified.
136 void RequestTableRefresh();
137
138private:
139 // Generates the special row widget for this list view widget.
140 TSharedRef<class ITableRow> HandleOptionListViewGenerateRow(OptionType Option, const TSharedRef< class STableViewBase >& OwnerTableView);
141
142 // Calls the provided user callback to generate a widget to display the specified option.
143 TSharedRef<SWidget> GenerateWidgetForOption(OptionType Option);
144
145 // Calls the provided user callback to notify them that an option has been checked or unchecked.
146 void HandleCheckBoxCheckStateChanged(ECheckBoxState NewState, OptionType Option) const;
147
148 // Calls the provided user callback to be notified that an option is selected or unselected in some way.
149 ECheckBoxState HandleCheckBoxIsChecked(OptionType Option) const;
150
151 // Selects all options.
152 void HandleAllHyperlinkNavigate();
153
154 // Deselects all options.
155 void HandleNoneHyperlinkNavigate();
156
157 // Collapses hyperlinks for selecting/deselecting all options based on whether there are multiple options.
158 EVisibility HandleHyperlinkVisibility() const;
159
160private:
161 const TArray< OptionType >* Options;
162 FOnPreBatchSelect OnPreBatchSelect;
163 FOnPostBatchSelect OnPostBatchSelect;
164 FOnGenerateOptionWidget OnGenerateOptionWidget;
165 FOnOptionSelectionChanged OnOptionSelectionChanged;
166 FIsOptionSelected IsOptionSelected;
167 TAttribute<FOptionalSize> ListHeight;
168
169 TSharedPtr< SListView< OptionType > > OptionListView;
170};
171
173void SMultipleOptionTable<OptionType>::Construct(const FArguments& InArgs, const TArray< OptionType >* const InOptions)
174{
175 Options = InOptions;
176 OnPreBatchSelect = InArgs._OnPreBatchSelect;
177 OnPostBatchSelect = InArgs._OnPostBatchSelect;
178 OnGenerateOptionWidget = InArgs._OnGenerateOptionWidget;
179 OnOptionSelectionChanged = InArgs._OnOptionSelectionChanged;
180 IsOptionSelected = InArgs._IsOptionSelected;
181 ListHeight = InArgs._ListHeight;
182
184 [
186
188 .FillHeight(1.0)
189 .Padding(0.0f, 2.0f, 0.0f, 0.0f)
190 [
191 SNew(SBox)
192 .HeightOverride(ListHeight)
193 [
194 // Options menu
195 SAssignNew(OptionListView, SListView<OptionType>)
196 .HeaderRow
197 (
200
201 + SHeaderRow::Column("IsSelected")
202 .DefaultLabel(LOCTEXT("OptionListIsSelectedColumnHeader", "IsSelected"))
203 .FillWidth(1.0f)
204 )
205 .ListItemsSource(Options)
206 .OnGenerateRow(this, &SMultipleOptionTable::HandleOptionListViewGenerateRow)
207 .SelectionMode(ESelectionMode::None)
208 ]
209 ]
210
212 .AutoHeight()
213 .Padding(0.0f, 6.0f, 0.0f, 4.0f)
214 [
216 .Orientation(Orient_Horizontal)
217 ]
218
220 .AutoHeight()
221 [
223
225 .FillWidth(1.0f)
226 .HAlign(HAlign_Right)
227 [
229 .Text(LOCTEXT("SelectLabel", "Select:"))
230 ]
231
233 .AutoWidth()
234 .Padding(8.0f, 0.0f)
235 [
236 // Select all options hyper link
238 .OnNavigate(this, &SMultipleOptionTable::HandleAllHyperlinkNavigate)
239 .Text(LOCTEXT("AllHyperlinkLabel", "All"))
240 .ToolTipText(LOCTEXT("AllHyperlinkToolTip", "Select all options."))
241 .Visibility(this, &SMultipleOptionTable::HandleHyperlinkVisibility)
242 ]
243
245 .AutoWidth()
246 [
247 // Deselect all options hyper link
249 .OnNavigate(this, &SMultipleOptionTable::HandleNoneHyperlinkNavigate)
250 .Text(LOCTEXT("NoneHyperlinkLabel", "None"))
251 .ToolTipText(LOCTEXT("NoneHyperlinkToolTip", "Deselect all."))
252 .Visibility(this, &SMultipleOptionTable::HandleHyperlinkVisibility)
253 ]
254 ]
255 ];
256}
257
258template<typename OptionType>
263
264template<typename OptionType>
266{
268 .Option(Option)
269 .OwnerTableView(OwnerTableView)
270 .OnCheckStateChanged(this, &SMultipleOptionTable::HandleCheckBoxCheckStateChanged, Option)
271 .IsChecked(this, &SMultipleOptionTable::HandleCheckBoxIsChecked, Option)
272 .OnGenerateWidget(this, &SMultipleOptionTable::GenerateWidgetForOption);
273}
274
275template<typename OptionType>
277{
278 return OnGenerateOptionWidget.Execute(Option);
279}
280
281template<typename OptionType>
283{
284 OnOptionSelectionChanged.Execute(NewState == ECheckBoxState::Checked, Option);
285}
286
287template<typename OptionType>
289{
290 return IsOptionSelected.Execute(Option) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
291}
292
293template<typename OptionType>
295{
296 OnPreBatchSelect.ExecuteIfBound();
297 for (const OptionType& Option : *Options)
298 {
299 HandleCheckBoxCheckStateChanged(ECheckBoxState::Checked, Option);
300 }
301 OnPostBatchSelect.ExecuteIfBound();
302}
303
304template<typename OptionType>
306{
307 OnPreBatchSelect.ExecuteIfBound();
308 for (const OptionType& Option : *Options)
309 {
310 HandleCheckBoxCheckStateChanged(ECheckBoxState::Unchecked, Option);
311 }
312 OnPostBatchSelect.ExecuteIfBound();
313}
314
315template<typename OptionType>
317{
318 if (Options->Num() > 1)
319 {
321 }
322
324}
325
326#undef LOCTEXT_NAMESPACE
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SAssignNew(ExposeAs, WidgetType,...)
Definition DeclarativeSyntaxSupport.h:41
#define SNew(WidgetType,...)
Definition DeclarativeSyntaxSupport.h:37
#define SLATE_ATTRIBUTE(AttrType, AttrName)
Definition DeclarativeSyntaxSupport.h:192
#define SLATE_EVENT(DelegateName, EventName)
Definition DeclarativeSyntaxSupport.h:458
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:208
#define LOCTEXT(InKey, InTextLiteral)
Definition Internationalization.h:295
ECheckBoxState
Definition SlateTypes.h:65
Definition NameTypes.h:617
Definition ITableRow.h:15
Definition SBox.h:29
Definition SCheckBox.h:30
Definition SCompoundWidget.h:22
FCompoundWidgetOneChildSlot ChildSlot
Definition SCompoundWidget.h:113
Definition SHeaderRow.h:103
static FColumn::FArguments Column(const FName &InColumnId)
Definition SHeaderRow.h:308
Definition SBoxPanel.h:171
static FSlot::FSlotArguments Slot()
Definition SBoxPanel.h:272
Definition SListView.h:66
Definition STableRow.h:1316
Definition SMultipleOptionTable.h:110
SLATE_BEGIN_ARGS(SMultipleOptionTable< OptionType >)
Definition SMultipleOptionTable.h:123
DECLARE_DELEGATE_RetVal_OneParam(bool, FIsOptionSelected, OptionType)
DECLARE_DELEGATE_TwoParams(FOnOptionSelectionChanged, bool, OptionType)
DECLARE_DELEGATE(FOnPostBatchSelect)
void Construct(const FArguments &InArgs, const TArray< OptionType > *const InOptions)
Definition SMultipleOptionTable.h:173
void RequestTableRefresh()
Definition SMultipleOptionTable.h:259
DECLARE_DELEGATE(FOnPreBatchSelect)
TSlateDelegates< OptionType >::FOnGenerateWidget FOnGenerateOptionWidget
Definition SMultipleOptionTable.h:112
static SLATECORE_API TSharedRef< class SWidget > NullWidget
Definition SNullWidget.h:22
Definition SMultipleOptionTable.h:33
virtual TSharedRef< SWidget > GenerateWidgetForColumn(const FName &ColumnName) override
Definition SMultipleOptionTable.h:70
TSlateDelegates< OptionType >::FOnGenerateWidget FOnGenerateWidget
Definition SMultipleOptionTable.h:35
TSharedPtr< SCheckBox > CheckBox
Definition SMultipleOptionTable.h:99
STableRow< TSharedPtr< OptionType > >::FArguments FOptionTableRowArgs
Definition SMultipleOptionTable.h:36
SLATE_BEGIN_ARGS(SOptionTableRow)
Definition SMultipleOptionTable.h:38
void Construct(const FArguments &InArgs)
Definition SMultipleOptionTable.h:53
Definition SSeparator.h:18
Definition STableRow.h:87
Definition STableViewBase.h:110
virtual SLATE_API void RequestListRefresh()
Definition STableViewBase.cpp:837
Definition STextBlock.h:45
Definition SBoxPanel.h:322
static FSlot::FSlotArguments Slot()
Definition SBoxPanel.h:424
Definition SWidget.h:165
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition Attribute.h:17
const ObjectType & Get() const
Definition Attribute.h:241
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SlateDelegates.h:134
@ None
Definition ITypedTableView.h:18
Definition Visibility.h:12
static SLATECORE_API const EVisibility Visible
Definition Visibility.h:14
static SLATECORE_API const EVisibility Collapsed
Definition Visibility.h:17
Definition SlateStructs.h:13