// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/SCompoundWidget.h" #include "Models/ModelInterface.h" #include "Widgets/Views/SListView.h" class SSelectSourceControlGroupWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SSelectSourceControlGroupWidget) {} SLATE_ATTRIBUTE(FText, ButtonText) SLATE_ATTRIBUTE(FModelInterface*, ModelInterface) SLATE_ATTRIBUTE(const FTag*, Tag) SLATE_END_ARGS() void Construct(const FArguments& InArgs); virtual ~SSelectSourceControlGroupWidget(); FReply OnListKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent); private: FReply OpenDialog(); TSharedPtr DialogWindow; FModelInterface* ModelInterface; const FTag* TargetTag; FDelegateHandle PresubmitCallbackHandle; void OnSubmitCallback(); TSharedPtr>> GroupListView; TSharedRef GenerateRow(TSharedPtr InGroup, const TSharedRef& InTableView); FString FilterText; void OnFilterTextChanged(const FString& InText); TArray> AllGroups; TArray> FilteredGroups; TArray> RecentGroups; FReply OnSelectGroupClicked(); TSharedPtr SelectedGroup; void OnSelectGroupDoubleClicked(TSharedPtr InGroup); void OnGetGroups(TArray>& Groups); bool bIsLoadingGroups = true; FReply OnCancelClicked(); void ProcessGroupSelected(TSharedPtr InGroup); FName SortByColumn; EColumnSortMode::Type SortMode; void OnColumnSort(EColumnSortPriority::Type InSortPriority, const FName& InColumnId, EColumnSortMode::Type InSortDirection); EColumnSortMode::Type GetSortMode(const FName ColumnId) const; };