203 lines
6.0 KiB
C++
203 lines
6.0 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "SBuildActivity.h"
|
|
#include "Internationalization/FastDecimalFormat.h"
|
|
#include "Math/BasicMathExpressionEvaluator.h"
|
|
#include "Math/UnitConversion.h"
|
|
#include "Misc/ExpressionParser.h"
|
|
#include "Styling/StyleColors.h"
|
|
#include "Widgets/Images/SImage.h"
|
|
#include "Widgets/Input/SButton.h"
|
|
#include "Widgets/Input/SHyperlink.h"
|
|
#include "Widgets/Layout/SGridPanel.h"
|
|
#include "Widgets/SBoxPanel.h"
|
|
#include "Widgets/Text/STextBlock.h"
|
|
#include "Widgets/Views/SListView.h"
|
|
#include "ZenServiceInstanceManager.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "StorageServerBuild"
|
|
|
|
namespace UE::BuildActivity::Internal
|
|
{
|
|
namespace FBuildActivityIds
|
|
{
|
|
const FName ColStatus = TEXT("Status");
|
|
const FName ColName = TEXT("Name");
|
|
const FName ColPlatform = TEXT("Platform");
|
|
const FName ColDescription = TEXT("Description");
|
|
}
|
|
}
|
|
|
|
void SBuildActivity::Construct(const FArguments& InArgs)
|
|
{
|
|
ZenServiceInstance = InArgs._ZenServiceInstance;
|
|
BuildServiceInstance = InArgs._BuildServiceInstance;
|
|
|
|
this->ChildSlot
|
|
[
|
|
SNew(SVerticalBox)
|
|
|
|
+ SVerticalBox::Slot()
|
|
.AutoHeight()
|
|
.Padding(0, 0, 0, 0)
|
|
.Expose(GridSlot)
|
|
[
|
|
GetGridPanel()
|
|
]
|
|
];
|
|
}
|
|
|
|
TSharedRef<ITableRow> SBuildActivity::GenerateBuildActivityRow(FBuildActivityPtr InItem, const TSharedRef<STableViewBase>& InOwningTable)
|
|
{
|
|
return SNew(SBuildActivityTableRow, InOwningTable, InItem, BuildServiceInstance.Get());
|
|
}
|
|
|
|
TSharedRef<SWidget> SBuildActivity::GetGridPanel()
|
|
{
|
|
using namespace UE::BuildActivity::Internal;
|
|
|
|
TSharedRef<SVerticalBox> Panel = SNew(SVerticalBox)
|
|
.Visibility_Lambda([this]()
|
|
{
|
|
return BuildActivities.IsEmpty() ? EVisibility::Collapsed : EVisibility::Visible;
|
|
});
|
|
|
|
const float RowMargin = 0.0f;
|
|
const float ColumnMargin = 10.0f;
|
|
const FSlateColor TitleColor = FStyleColors::AccentWhite;
|
|
const FSlateFontInfo TitleFont = FCoreStyle::GetDefaultFontStyle("Bold", 10);
|
|
|
|
Panel->AddSlot()
|
|
.AutoHeight()
|
|
[
|
|
SNew(STextBlock)
|
|
.Margin(FMargin(ColumnMargin, RowMargin))
|
|
.ColorAndOpacity(TitleColor)
|
|
.Font(TitleFont)
|
|
.Text(LOCTEXT("BuildActivity_Activity", "Activity"))
|
|
];
|
|
|
|
Panel->AddSlot()
|
|
.AutoHeight()
|
|
.Padding(FMargin(ColumnMargin, RowMargin))
|
|
[
|
|
SNew(SListView<FBuildActivityPtr>)
|
|
.ListItemsSource(&BuildActivities)
|
|
.OnGenerateRow(this, &SBuildActivity::GenerateBuildActivityRow)
|
|
.HeaderRow
|
|
(
|
|
SNew(SHeaderRow)
|
|
.Visibility(EVisibility::Collapsed)
|
|
+ SHeaderRow::Column(FBuildActivityIds::ColStatus).DefaultLabel(LOCTEXT("BuildActivity_ActivityStatus", "Status"))
|
|
.FillWidth(0.1f)
|
|
+ SHeaderRow::Column(FBuildActivityIds::ColName).DefaultLabel(LOCTEXT("BuildActivity_ActivityName", "Name"))
|
|
.FillWidth(0.2f).HAlignCell(HAlign_Left).HAlignHeader(HAlign_Left).VAlignCell(VAlign_Center)
|
|
+ SHeaderRow::Column(FBuildActivityIds::ColPlatform).DefaultLabel(LOCTEXT("BuildActivity_ActivityPlatform", "Platform"))
|
|
.FillWidth(0.1f).HAlignCell(HAlign_Left).HAlignHeader(HAlign_Left).VAlignCell(VAlign_Center)
|
|
+ SHeaderRow::Column(FBuildActivityIds::ColDescription).DefaultLabel(LOCTEXT("BuildActivity_ActivityDescription", "Description"))
|
|
.FillWidth(0.6f).HAlignCell(HAlign_Left).HAlignHeader(HAlign_Center).VAlignCell(VAlign_Center)
|
|
)
|
|
];
|
|
|
|
|
|
return Panel;
|
|
}
|
|
|
|
void
|
|
SBuildActivityTableRow::Construct(const FArguments& InArgs,
|
|
const TSharedRef<STableViewBase>& InOwnerTableView,
|
|
const FBuildActivityPtr InBuildActivity,
|
|
TSharedPtr<UE::Zen::Build::FBuildServiceInstance> InBuildServiceInstance)
|
|
{
|
|
BuildActivity = InBuildActivity;
|
|
BuildServiceInstance = InBuildServiceInstance;
|
|
|
|
SMultiColumnTableRow<FBuildActivityPtr>::Construct(FSuperRowType::FArguments(), InOwnerTableView);
|
|
}
|
|
|
|
TSharedRef<SWidget>
|
|
SBuildActivityTableRow::GenerateWidgetForColumn(const FName& ColumnName)
|
|
{
|
|
using namespace UE::Zen::Build;
|
|
using namespace UE::BuildActivity::Internal;
|
|
|
|
if (ColumnName == FBuildActivityIds::ColStatus)
|
|
{
|
|
return SNew(SHorizontalBox)
|
|
+ SHorizontalBox::Slot()
|
|
[
|
|
SNew(STextBlock).Text_Lambda([this]()
|
|
{
|
|
FString Status;
|
|
if (BuildServiceInstance)
|
|
{
|
|
switch(BuildActivity->Transfer.GetStatus())
|
|
{
|
|
case FBuildServiceInstance::EBuildTransferStatus::Invalid:
|
|
return LOCTEXT("BuildActivity_TransferStatusInvalid", "Invalid");
|
|
case FBuildServiceInstance::EBuildTransferStatus::Queued:
|
|
return LOCTEXT("BuildActivity_TransferStatusQueued", "Queued");
|
|
case FBuildServiceInstance::EBuildTransferStatus::Active:
|
|
return LOCTEXT("BuildActivity_TransferStatusActive", "Active");
|
|
case FBuildServiceInstance::EBuildTransferStatus::Failed:
|
|
return LOCTEXT("BuildActivity_TransferStatusFailed", "Failed");
|
|
case FBuildServiceInstance::EBuildTransferStatus::Canceled:
|
|
return LOCTEXT("BuildActivity_TransferStatusCanceled", "Canceled");
|
|
case FBuildServiceInstance::EBuildTransferStatus::Succeeded:
|
|
return LOCTEXT("BuildActivity_TransferStatusSucceeded", "Succeeded");
|
|
}
|
|
}
|
|
return LOCTEXT("BuildActivity_TransferStatusUnknown", "Unknown");
|
|
})
|
|
];
|
|
}
|
|
else if (ColumnName == FBuildActivityIds::ColName)
|
|
{
|
|
return SNew(SHorizontalBox)
|
|
+ SHorizontalBox::Slot()
|
|
[
|
|
SNew(STextBlock).Text(FText::FromString(BuildActivity->Name))
|
|
];
|
|
}
|
|
else if (ColumnName == FBuildActivityIds::ColPlatform)
|
|
{
|
|
return SNew(SHorizontalBox)
|
|
+ SHorizontalBox::Slot()
|
|
[
|
|
SNew(STextBlock).Text(FText::FromString(BuildActivity->Platform))
|
|
];
|
|
}
|
|
else if (ColumnName == FBuildActivityIds::ColDescription)
|
|
{
|
|
return SNew(SHorizontalBox)
|
|
+ SHorizontalBox::Slot()
|
|
[
|
|
SNew(STextBlock).Text_Lambda([this]()
|
|
{
|
|
FString Description;
|
|
if (BuildServiceInstance)
|
|
{
|
|
Description = BuildActivity->Transfer.GetDescription();
|
|
}
|
|
return FText::FromString(Description);
|
|
})
|
|
];
|
|
}
|
|
|
|
return SNullWidget::NullWidget;
|
|
}
|
|
|
|
const FSlateBrush*
|
|
SBuildActivityTableRow::GetBorder() const
|
|
{
|
|
return STableRow<FBuildActivityPtr>::GetBorder();
|
|
}
|
|
|
|
FReply
|
|
SBuildActivityTableRow::OnBrowseClicked()
|
|
{
|
|
return FReply::Unhandled();
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|