// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/SCompoundWidget.h" #include "Models/ModelInterface.h" #include "Widgets/Views/SListView.h" class SSelectSourceControlUserWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SSelectSourceControlUserWidget) {} SLATE_ATTRIBUTE(FText, ButtonText) SLATE_ATTRIBUTE(FModelInterface*, ModelInterface) SLATE_ATTRIBUTE(FString*, TargetText) SLATE_ATTRIBUTE(FString, TargetName) SLATE_ATTRIBUTE(const FTag*, Tag) SLATE_END_ARGS() void Construct(const FArguments& InArgs); virtual ~SSelectSourceControlUserWidget(); FReply OnListKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent); private: FReply OpenDialog(); TSharedPtr DialogWindow; FModelInterface* ModelInterface; const FTag* TargetTag; FString* TargetText; FString TargetName; FDelegateHandle PresubmitCallbackHandle; void OnSubmitCallback(); TSharedPtr>> UserListView; TSharedRef GenerateRow(TSharedPtr InUser, const TSharedRef& InTableView); FString FilterText; void OnFilterTextChanged(const FString& InText); TArray> AllUsers; TArray> FilteredUsers; TArray> RecentUsers; FReply OnSelectUserClicked(); TSharedPtr SelectedUser; void OnSelectUserDoubleClicked(TSharedPtr InUser); void OnGetUsers(TArray>& Users); bool bIsLoadingUsers = true; bool bFilterUsers = true; FReply OnCancelClicked(); void ProcessUserSelected(TSharedPtr InUser); FName SortByColumn; EColumnSortMode::Type SortMode; void OnColumnSort(EColumnSortPriority::Type InSortPriority, const FName& InColumnId, EColumnSortMode::Type InSortDirection); EColumnSortMode::Type GetSortMode(const FName ColumnId) const; };