A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
SDialogueTextPropertyPickList.h
Go to the documentation of this file.
1// Copyright Csaba Molnar, Daniel Butum. All Rights Reserved.
2#pragma once
3
4#include "Widgets/DeclarativeSyntaxSupport.h"
5#include "Widgets/Input/SSearchBox.h"
6#include "Widgets/Layout/SScrollBorder.h"
7#include "Widgets/Views/SListView.h"
8#include "Widgets/Input/SComboButton.h"
9#include "Widgets/Input/SCheckBox.h"
10
11class IPropertyHandle;
12
18{
19 typedef TSharedPtr<FName> TextListItem;
22
23public:
25 : _PropertyHandle()
26 , _HasContextCheckbox(false)
27 , _IsContextCheckBoxChecked(false)
28 , _ContextCheckBoxText(NSLOCTEXT("SDialogueTextPropertyPickList", "ContextCheckBoxText", "Local Search"))
29 , _ContextCheckBoxToolTipText(NSLOCTEXT("SDialogueTextPropertyPickList", "ContextCheckBoxToolTipText",
30 "Should the search be local? If not checked the search is global."))
31 , _ToolTipText(NSLOCTEXT("SDialogueTextPropertyPickList", "DefaultToolTip", "REPLACE ME"))
32 , _HintText(NSLOCTEXT("SDialogueTextPropertyPickList", "SearchBoxHint", "Search Names"))
33 , _CurrentContextAvailableSuggestions(TArray<FName>())
34 , _AvailableSuggestions(TArray<FName>())
35 , _OnTextChanged()
36 , _OnTextCommitted()
37 , _OnKeyDownHandler()
38 , _DelayChangeNotificationsWhileTyping(true)
39 {}
41 SLATE_ARGUMENT(TSharedPtr<IPropertyHandle>, PropertyHandle)
42
43
44 SLATE_ARGUMENT(bool, HasContextCheckbox)
45
46
47 SLATE_ARGUMENT(bool, IsContextCheckBoxChecked)
48
49
50 SLATE_ATTRIBUTE(FText, ContextCheckBoxText)
51
52
53 SLATE_ATTRIBUTE(FText, ContextCheckBoxToolTipText)
54
55
56 SLATE_ATTRIBUTE(FText, ToolTipText)
57
58
59 SLATE_ATTRIBUTE(FText, HintText)
60
61
66 SLATE_ATTRIBUTE(TArray<FName>, CurrentContextAvailableSuggestions)
67
68
69 SLATE_ATTRIBUTE(TArray<FName>, AvailableSuggestions)
70
71
72 SLATE_EVENT(FOnTextChanged, OnTextChanged)
73
74
75 SLATE_EVENT(FOnTextCommitted, OnTextCommitted)
76
77
78 SLATE_EVENT(FOnKeyDown, OnKeyDownHandler)
79
80
81 SLATE_ARGUMENT(bool, DelayChangeNotificationsWhileTyping)
82 SLATE_END_ARGS()
83
84
88 void Construct(const FArguments& InArgs);
89
90 // SWidget implementation
102 FReply OnPreviewKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) override;
103
108 bool SupportsKeyboardFocus() const override { return true; }
109
114 bool HasKeyboardFocus() const override { return InputTextWidget->HasKeyboardFocus(); }
115
123 FReply OnFocusReceived(const FGeometry& MyGeometry, const FFocusEvent& InFocusEvent) override
124 {
125 // Forward keyboard focus to our editable text widget
126 if (IsEnabled() && ComboButtonWidget.IsValid() && ComboButtonWidget->IsEnabled())
127 {
128 return FReply::Handled().SetUserFocus(InputTextWidget.ToSharedRef(), InFocusEvent.GetCause());
129 }
130
131 return Super::OnFocusReceived(MyGeometry, InFocusEvent);
132 }
133
134 // Own functions
136 void SetText(const TAttribute<FText>& InNewText);
137
139 void SetToolTipAttribute(const TAttribute<FText>& InNewText);
140
142 void SetPropertyHandle(const TSharedPtr<IPropertyHandle>& InPropertyHandle);
143
144private:
146 TSharedRef<SWidget> GetMenuWidget();
147
149 TSharedRef<SWidget> GetContextCheckBoxWidget();
150
152 TSharedRef<SWidget> GetSearchBoxWidget();
153
155 TSharedRef<SWidget> GetListViewWidget();
156
158 TSharedRef<ITableRow> HandleListGenerateRow(TextListItem Text, const TSharedRef<STableViewBase>& OwnerTable);
159
161 FText GetHighlightText() const { return InputTextWidget->GetText(); }
162
164 TSharedRef<SWidget> CreateShadowOverlay(TSharedRef<STableViewBase> Table) const
165 {
166 return SNew(SScrollBorder, Table)
167 [
168 Table
169 ];
170 }
171
173 void HandleMenuOpenChanged(bool bOpen);
174
177
179 void HandleTextChanged(const FText& InSearchText);
180
182 void HandleTextCommitted(const FText& InSearchText, ETextCommit::Type CommitInfo);
183
185 FReply HandleKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent);
186
188 void HandleListSelectionChanged(TextListItem NewValue, ESelectInfo::Type SelectInfo);
189
191 void HandleContextCheckboxChanged(ECheckBoxState CheckState);
192
194 ECheckBoxState IsContextCheckBoxChecked() const
195 {
196 return bIsContextCheckBoxChecked ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
197 }
198
201
204
206 void FocusSearchBox() const;
207
208private:
210 TSharedPtr<IPropertyHandle> PropertyHandle;
211
213 TAttribute<TArray<FName>> SuggestionAttributes;
214
216 TAttribute<TArray<FName>> CurrentContextSuggestionAttributes;;
217
219 TAttribute<FText> TextAttribute;
220
222 TAttribute<FText> ToolTipAttribute;
223
225 TAttribute<FText> HintTextAttribute;
226
229
232
234 FOnTextChanged OnTextChanged;
235
237 FOnTextCommitted OnTextCommitted;
238
241
243 TSharedPtr<SBorder> ListViewContainerWidget;
244
246 TSharedPtr<SListView<TextListItem>> ListViewWidget;
247
249 TSharedPtr<SComboButton> ComboButtonWidget;
250
252 TSharedPtr<STextBlock> ComboButtonTextWidget;
253
255 TSharedPtr<SCheckBox> ContextCheckBoxWidget;
256
258 TSharedPtr<SVerticalBox> MenuWidget;
259
261 TSharedPtr<SSearchBox> InputTextWidget;
262
268 TArray<TextListItem> Suggestions;
269
272
275
278};
void HandleTextChanged(const FText &InSearchText)
TAttribute< TArray< FName > > CurrentContextSuggestionAttributes
void SetText(const TAttribute< FText > &InNewText)
void HandleListSelectionChanged(TextListItem NewValue, ESelectInfo::Type SelectInfo)
TSharedPtr< SListView< TextListItem > > ListViewWidget
TSharedPtr< IPropertyHandle > PropertyHandle
TSharedRef< ITableRow > HandleListGenerateRow(TextListItem Text, const TSharedRef< STableViewBase > &OwnerTable)
FReply OnPreviewKeyDown(const FGeometry &MyGeometry, const FKeyEvent &InKeyEvent) override
void HandleTextCommitted(const FText &InSearchText, ETextCommit::Type CommitInfo)
void SetPropertyHandle(const TSharedPtr< IPropertyHandle > &InPropertyHandle)
void Construct(const FArguments &InArgs)
FReply OnFocusReceived(const FGeometry &MyGeometry, const FFocusEvent &InFocusEvent) override
TAttribute< TArray< FName > > SuggestionAttributes
TSharedRef< SWidget > CreateShadowOverlay(TSharedRef< STableViewBase > Table) const
void HandleContextCheckboxChanged(ECheckBoxState CheckState)
FReply HandleKeyDown(const FGeometry &MyGeometry, const FKeyEvent &InKeyEvent)
void SetToolTipAttribute(const TAttribute< FText > &InNewText)