// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/SListView.h" class FTag; struct FJiraIssue; class FJiraService; class ITableRow; class STableViewBase; class SEditableTextBox; DECLARE_DELEGATE_OneParam(FOnJiraIssueSelected, FString) class FModelInterface; class SJiraWidget : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SJiraWidget) {} SLATE_ARGUMENT(FModelInterface*, ModelInterface) SLATE_ARGUMENT(TSharedPtr, ParentWindow) SLATE_END_ARGS() void Construct(const FArguments& InArgs); virtual ~SJiraWidget(); void Open(const FTag* InTargetTag); void ProcessIssueSelected(TSharedPtr InIssue); private: TSharedPtr BuildCredentialsWidget(); TSharedPtr BuildIssuesWidget(); FReply Login(); void JiraIssuesAvailable(bool bValidResponse); FReply OnListKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent); FReply OnSelectIssueClicked(); void OnJiraDoubleClicked(TSharedPtr InIssue); FReply OnCloseClicked(); FDelegateHandle PresubmitCallbackHandle; void OnSubmitCallback(); TSharedRef GenerateRow(TSharedPtr InItem, const TSharedRef& OwnerTable); void OnColumnSort(EColumnSortPriority::Type InSortPriority, const FName& InColumnId, EColumnSortMode::Type InSortDirection); TSharedPtr SelectedIssue; EColumnSortMode::Type GetSortMode(const FName ColumnId) const; FName SortByColumn; EColumnSortMode::Type SortMode; TSharedPtr MainWindow; TSharedPtr ParentWindow; TSharedPtr IssuesSection; TSharedPtr>> ListView; TSharedPtr CredentialSection; TSharedPtr UsernameField; TSharedPtr PasswordField; TArray> JiraIssues; TArray> JiraIssuesFiltered; TWeakPtr JiraService; FModelInterface* ModelInterface; const FTag* TargetTag; bool bIncludeClosedJira = false; FString FilterText; void ApplyFilter(const FString& InText); };