void SCreateContainerFleetSection::Construct()

in GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SCreateContainerFleetSection.cpp [18:265]


void SCreateContainerFleetSection::Construct(const FArguments& InArgs)
{
	OnRetryStepDelegate = InArgs._OnRetryStepDelegate;
	
	ChildSlot
		[
			SNew(SHorizontalBox)
				+ SHorizontalBox::Slot()
				.Padding(SPadding::Right2x)
				.AutoWidth()
				[
					SAssignNew(ProgressBar, SProgressBar)
						.IsLastComponent(true)
				]

				+ SHorizontalBox::Slot()
				.Padding(SPadding::Bottom5x + SPadding::Right2x)
				.FillWidth(1.0f)
				[
					SNew(SVerticalBox)
						+ SVerticalBox::Slot()
						.AutoHeight()
						.Padding(SPadding::SectionTitleTopPadding)
						[
							SNew(STextBlock)
								.Text(Menu::DeployContainers::kCreateContainerFleetHeader)
								.AutoWrapText(true)
								.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kTitleStyleName)
						]

						+ SVerticalBox::Slot()
						.AutoHeight()
						.Padding(SPadding::Top3x)
						[
							SNew(SVerticalBox)
							+ SVerticalBox::Slot()
								.AutoHeight()
								[
									SNew(STextBlock)
										.Text(Menu::DeployContainers::kCreateContainerFleetDescription)
										.AutoWrapText(true)
										.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
								]
								+ SVerticalBox::Slot()
								.AutoHeight()
								.Padding(SPadding::Top3x)
								[
									SNew(STextBlock)
										.Text(Menu::DeployContainers::kCreateContainerFleetDescriptionPart2)
										.AutoWrapText(true)
										.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
								]
						]
						// Error text box
						+ SVerticalBox::Slot()
						.AutoHeight()
						.Padding(SPadding::Top2x)
						[
							CreateShowErrorUI()
						]
						// Fleet status row
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Fill)
						.Padding(SPadding::Top2x)
						[
							SAssignNew(FleetStatusRow, SNamedRow)
								.NameText(Menu::DeployContainers::kContainerFleetStatusTitle)
								.RowWidget(
									SAssignNew(FleetStatusTextBlock, STextStatus)
										.StatusTextStyle(Style::Text::kFieldBold)
								)
								.SecondaryColumnLeftPadding(true)
								.Visibility_Lambda([&]() -> EVisibility
									{
										return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
									})
						]
						// Fleet id row
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Fill)
						.Padding(SPadding::Top2x)
						[
							SAssignNew(FleetIdRow, SNamedRow)
								.NameText(Menu::DeployContainers::kContainerFleetIdTitle)
								.RowWidget(
									SAssignNew(FleetIdTextBlock, STextBlock)
									.AutoWrapText(true)
									.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
								)
								.SecondaryColumnLeftPadding(true)
								.Visibility_Lambda([&]() -> EVisibility
									{
										return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
									})
						]
						// Fleet type row
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Fill)
						.Padding(SPadding::Top2x)
						[
							SAssignNew(FleetTypeRow, SNamedRow)
								.NameText(Menu::DeployContainers::kContainerFleetTypeTitle)
								.RowWidget(
									SAssignNew(FleetTypeTextBlock, STextBlock)
									.AutoWrapText(true)
									.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
								)
								.SecondaryColumnLeftPadding(true)
								.Visibility_Lambda([&]() -> EVisibility
									{
										return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
									})
						]
						// Instance type row
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Fill)
						.Padding(SPadding::Top2x)
						[
							SAssignNew(InstanceTypeRow, SNamedRow)
								.NameText(Menu::DeployContainers::kContainerInstanceTypeTitle)
								.RowWidget(
									SAssignNew(InstanceTypeTextBlock, STextBlock)
									.AutoWrapText(true)
									.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
								)
								.SecondaryColumnLeftPadding(true)
								.Visibility_Lambda([&]() -> EVisibility
									{
										return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
									})
						]
						// Retry button
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Left)
						.Padding(SPadding::Top3x)
						[
							SNew(SButton)
								.OnClicked_Lambda([&]()
									{
										ResetUIToNotStarted();
										OnRetryStepDelegate.ExecuteIfBound();
										return FReply::Handled();
									})
								.Visibility_Lambda([&]() -> EVisibility
									{
										UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
										return ContainersStatus->ErrorCreatingContainerFleet && ContainersStatus->IsCgdConfigurationFinished ? EVisibility::Visible : EVisibility::Collapsed;
									})
								.Content()
								[
									SNew(SBox)
										.HAlign(HAlign_Center)
										[
											SNew(SHorizontalBox)
												+ SHorizontalBox::Slot()
												.AutoWidth()
												.HAlign(HAlign_Left)
												.VAlign(VAlign_Center)
												.Padding(SPadding::Right)
												[
													SNew(SBox)
														.WidthOverride(Style::kResetIconSize)
														.HeightOverride(Style::kResetIconSize)
														[
															SNew(SImage)
																.Image(FGameLiftPluginStyle::Get().GetBrush(Style::Brush::kResetIconName))
														]
												]
												+ SHorizontalBox::Slot()
												.AutoWidth()
												.HAlign(HAlign_Center)
												.VAlign(VAlign_Center)
												[
													SNew(STextBlock)
														.Text(Menu::DeployContainers::kRetryButtonLabel)
														.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonNormal)
												]
										]
								]
						]
						// View in Gamelift Console button
						+ SVerticalBox::Slot()
						.AutoHeight()
						.HAlign(HAlign_Left)
						.Padding(SPadding::Top3x)
						[
							SNew(SButton)
								.ButtonStyle(FGameLiftPluginStyle::Get(), Style::Button::kNormalButtonStyleName)
								.Visibility_Lambda([&]() -> EVisibility
									{
										UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
										// On error, we will hide this because the error banner will have a button linking to CFN
										return !ContainersStatus->ErrorCreatingContainerFleet && ContainersStatus->IsCgdConfigurationFinished ? EVisibility::Visible : EVisibility::Collapsed;
									})
								.OnClicked_Lambda([]
									{
										UGameLiftSettings* Settings = GetMutableDefault<UGameLiftSettings>();
										FString CurrentAwsRegion = Settings->AwsRegion.ToString().IsEmpty() ? FString("us-west-2") : Settings->AwsRegion.ToString();
										FPlatformProcess::LaunchURL(*FString::Format(Url::kAWSConsoleUrlContainerFleetFormat, { CurrentAwsRegion }), nullptr, nullptr);
										return FReply::Handled();
									})
								.Content()
								[
									SNew(SBox)
										.HeightOverride(OverrideButtonHeight)
										.HAlign(HAlign_Center)
										[
											SNew(SHorizontalBox)
												+ SHorizontalBox::Slot()
												.AutoWidth()
												.HAlign(HAlign_Center)
												.VAlign(VAlign_Center)
												[
													SNew(STextBlock)
														.Text(Menu::DeployContainers::kAWSConsoleButtonText)
														.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonNormal)
												]
												+ SHorizontalBox::Slot()
												.AutoWidth()
												.Padding(SPadding::Left)
												.HAlign(HAlign_Left)
												.VAlign(VAlign_Center)
												[
													SNew(SBox)
														.WidthOverride(Style::kLinkIconSize)
														.HeightOverride(Style::kLinkIconSize)
														[
															SNew(SImage)
																.Image(FGameLiftPluginStyle::Get().GetBrush(Style::Brush::kExternalLinkIconName))
#if(ENGINE_MAJOR_VERSION == 4)
																.ColorAndOpacity(FColor::Black)
#endif
														]
												]
										]
								]
						]
				]
		];
	UpdateUIBasedOnCurrentState();
	SCreateContainerGroupSection::OnConfigureCgdMultiDelegate.AddSP(this, &SCreateContainerFleetSection::StartSectionWorkflow);
	SCreateContainerGroupSection::OnDeploymentCompleteMultiDelegate.AddSP(this, &SCreateContainerFleetSection::OnDeploymentComplete);
}