Files
UnrealEngineUWP/Engine/Source/Editor/SourceControlWindows/Private/SSourceControlSubmit.h
julien lheureux 57426a7c27 Refactored changelist tree items to be shareable with the submit dialog (allows symmetrical display)
Added an exception to changelist validation for deleted files
Improved display of deleted & shelved objects in changelists & submit dialog - improvements related to OFPA in a subsequent change.

#rb sebastien.lussier
#jira UE-107677, UE-107768

[CL 15322858 by julien lheureux in ue5-main branch]
2021-02-04 17:41:41 -04:00

219 lines
6.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Layout/Visibility.h"
#include "Input/Reply.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/SWidget.h"
#include "Widgets/SCompoundWidget.h"
#include "Widgets/Views/SListView.h"
#include "Widgets/Views/STableViewBase.h"
#include "Widgets/Views/STableRow.h"
#include "ISourceControlState.h"
#include "SSourceControlCommon.h"
class SMultiLineEditableTextBox;
class SWindow;
//-------------------------------------
// Source Control Window Constants
//-------------------------------------
namespace ESubmitResults
{
enum Type
{
SUBMIT_ACCEPTED,
SUBMIT_CANCELED
};
}
//-----------------------------------------------
// Source Control Check in Helper Struct
//-----------------------------------------------
class FChangeListDescription
{
public:
TArray<FString> FilesForAdd;
TArray<FString> FilesForSubmit;
FText Description;
};
class SSourceControlSubmitWidget : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SSourceControlSubmitWidget)
: _ParentWindow()
, _Items()
, _Description()
, _ChangeValidationIcon()
, _ChangeValidationDescription()
, _AllowDescriptionChange(true)
, _AllowUncheckFiles(true)
, _AllowKeepCheckedOut(true)
{}
SLATE_ATTRIBUTE(TSharedPtr<SWindow>, ParentWindow)
SLATE_ATTRIBUTE(TArray<FSourceControlStateRef>, Items)
SLATE_ATTRIBUTE(FText, Description)
SLATE_ATTRIBUTE(FName, ChangeValidationIcon)
SLATE_ATTRIBUTE(FString, ChangeValidationDescription)
SLATE_ATTRIBUTE(bool, AllowDescriptionChange)
SLATE_ATTRIBUTE(bool, AllowUncheckFiles)
SLATE_ATTRIBUTE(bool, AllowKeepCheckedOut)
SLATE_END_ARGS()
~SSourceControlSubmitWidget();
/** Constructs the widget */
void Construct(const FArguments& InArgs);
/** Used to intercept Escape key press, and interpret it as cancel */
virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override;
/** Get dialog result */
ESubmitResults::Type GetResult() { return DialogResult; }
/** Returns a widget representing the item and column supplied */
TSharedRef<SWidget> GenerateWidgetForItemAndColumn(TSharedPtr<FFileTreeItem> Item, const FName ColumnID) const;
/** Gets the requested files and the change list description*/
void FillChangeListDescription(FChangeListDescription& OutDesc);
/** Does the user want to keep the files checked out */
bool WantToKeepCheckedOut();
/** Clears the current change list description */
void ClearChangeListDescription();
private:
/**
* @return the desired toggle state for the ToggleSelectedCheckBox.
* Returns Unchecked, unless all of the selected items are Checked.
*/
ECheckBoxState GetToggleSelectedState() const;
/**
* Toggles the highlighted items.
* If no items are explicitly highlighted, toggles all items in the list.
*/
void OnToggleSelectedCheckBox(ECheckBoxState InNewState);
/** Called when the settings of the dialog are to be accepted*/
FReply OKClicked();
/** Called when the settings of the dialog are to be ignored*/
FReply CancelClicked();
/** Called to check if the OK button is enabled or not. */
bool IsOKEnabled() const;
/** Check if the warning panel should be visible. */
EVisibility IsWarningPanelVisible() const;
/** Called when the Keep checked out Checkbox is changed */
void OnCheckStateChanged_KeepCheckedOut(ECheckBoxState InState);
/** Get the current state of the Keep Checked Out checkbox */
ECheckBoxState GetKeepCheckedOut() const;
/** Check if Provider can checkout files */
bool CanCheckOut() const;
/** Called by SListView to get a widget corresponding to the supplied item */
TSharedRef<ITableRow> OnGenerateRowForList(TSharedPtr<FFileTreeItem> SubmitItemData, const TSharedRef<STableViewBase>& OwnerTable);
/**
* Returns the current column sort mode (ascending or descending) if the ColumnId parameter matches the current
* column to be sorted by, otherwise returns EColumnSortMode_None.
*
* @param ColumnId Column ID to query sort mode for.
*
* @return The sort mode for the column, or EColumnSortMode_None if it is not known.
*/
EColumnSortMode::Type GetColumnSortMode(const FName ColumnId) const;
/**
* Callback for SHeaderRow::Column::OnSort, called when the column to sort by is changed.
*
* @param ColumnId The new column to sort by
* @param InSortMode The sort mode (ascending or descending)
*/
void OnColumnSortModeChanged(const EColumnSortPriority::Type SortPriority, const FName& ColumnId, const EColumnSortMode::Type InSortMode);
/**
* Requests that the source list data be sorted according to the current sort column and mode,
* and refreshes the list view.
*/
void RequestSort();
/**
* Sorts the source list data according to the current sort column and mode.
*/
void SortTree();
TSharedPtr<SWidget> OnCreateContextMenu();
bool CanDiffAgainstDepot() const;
void OnDiffAgainstDepot();
void OnDiffAgainstDepotSelected(TSharedPtr<FFileTreeItem> InSelectedItem);
private:
ESubmitResults::Type DialogResult;
/** ListBox for selecting which object to consolidate */
TSharedPtr<SListView<TSharedPtr<FFileTreeItem>>> ListView;
/** Collection of objects (Widgets) to display in the List View. */
TArray<TSharedPtr<FFileTreeItem>> ListViewItems;
/** Pointer to the parent modal window */
TWeakPtr<SWindow> ParentFrame;
/** Internal widgets to save having to get in multiple places*/
TSharedPtr<SMultiLineEditableTextBox> ChangeListDescriptionTextCtrl;
/** State of the "Keep checked out" checkbox */
ECheckBoxState KeepCheckedOut;
/** Specify which column to sort with */
FName SortByColumn;
/** Currently selected sorting mode */
EColumnSortMode::Type SortMode;
/** Submit Description saved when the widget is destroyed if canceled */
static FText SavedChangeListDescription;
};
class SSourceControlSubmitListRow : public SMultiColumnTableRow<TSharedPtr<FFileTreeItem>>
{
public:
SLATE_BEGIN_ARGS(SSourceControlSubmitListRow) {}
/** The SSourceControlSubmitWidget that owns the tree. We'll only keep a weak reference to it. */
SLATE_ARGUMENT(TSharedPtr<SSourceControlSubmitWidget>, SourceControlSubmitWidget)
/** The list item for this row */
SLATE_ARGUMENT(TSharedPtr<FFileTreeItem>, Item)
SLATE_END_ARGS()
/** Construct function for this widget */
void Construct(const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTableView);
/** Overridden from SMultiColumnTableRow. Generates a widget for this column of the list row. */
virtual TSharedRef<SWidget> GenerateWidgetForColumn(const FName& ColumnName) override;
private:
/** Weak reference to the SSourceControlSubmitWidget that owns our list */
TWeakPtr<SSourceControlSubmitWidget> SourceControlSubmitWidgetPtr;
/** The item associated with this row of data */
TSharedPtr<FFileTreeItem> Item;
};