void SCreateContainerImageSection::Construct()

in GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SCreateContainerImageSection.cpp [23:190]


void SCreateContainerImageSection::Construct(const FArguments& InArgs)
{
	OnContainersImageUpdateDelegate = InArgs._OnContainersImageUpdateDelegate;
	DockerFileTemplatePath = FPaths::Combine(*Paths::DefaultContainerImagePath(), TEXT("Dockerfile"));
	ChildSlot
		[
			SNew(SHorizontalBox)
			+ SHorizontalBox::Slot()
			.Padding(SPadding::Right2x)
			.AutoWidth()
			[
				SAssignNew(ProgressBar, SProgressBar)
			]

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

					+ SVerticalBox::Slot()
					.AutoHeight()
					.Padding(SPadding::Top3x)
					[
						SNew(STextBlock)
							.Text(FText::FromString(FString::Format(Menu::DeployContainers::kCreateContainerImageDescription, { DockerFileTemplatePath })))
							.AutoWrapText(true)
							.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
					]
					// External links
					+ SVerticalBox::Slot()
					.AutoHeight()
					.Padding(SPadding::Top2x)
					[
						SNew(SHorizontalBox)
							+ SHorizontalBox::Slot()
							.AutoWidth()
							.HAlign(HAlign_Left)
							[
								SNew(SOnlineHyperlink)
									.Text(Menu::DeployContainers::kWhatIsDockerLinkLabel)
									.Link(Url::kWhatIsDockerLinkUrl)
							]
							+ SHorizontalBox::Slot()
							.AutoWidth()
							.HAlign(HAlign_Center)
							[
								SNew(STextSeparator).Separator(TEXT("|"))
							]
							+ SHorizontalBox::Slot()
							.AutoWidth()
							.HAlign(HAlign_Left)
							[
								SNew(SOnlineHyperlink)
									.Text(Menu::DeployContainers::kDockerDocumentationLinkLabel)
									.Link(Url::kDockerInstallGuideLinkUrl)
							]
					]
					// Error text box
					+ SVerticalBox::Slot()
					.AutoHeight()
					.Padding(SPadding::Top2x)
					[
						CreateShowErrorUI()
					]
					// Game server build and executable rows
					+ SVerticalBox::Slot()
							.AutoHeight()
							.Padding(SPadding::Top2x)
							[
								SAssignNew(GameServerBuildRow, SNamedRow)
									.NameText(Menu::DeployContainers::kGameServerBuildLabel)
									.RowWidget(
										SAssignNew(GameServerBuildTextBlock, STextBlock)
										.AutoWrapText(true)
										.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
									)
							]
							+ SVerticalBox::Slot()
							.AutoHeight()
							.Padding(SPadding::Top2x)
							[
								SAssignNew(GameServerExecutableRow, SNamedRow)
									.NameText(Menu::DeployContainers::kGameServerExecutableLabel)
									.RowWidget(
										SAssignNew(GameServerExecutableTextBlock, STextBlock)
										.AutoWrapText(true)
										.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
									)
							]
					// View dockerfile template button
					+ SVerticalBox::Slot()
					.AutoHeight()
					.HAlign(HAlign_Left)
					.Padding(SPadding::Top3x)
					[
						SNew(SExternalLinkButton)
							.Text(Menu::DeployContainers::kViewDockerfileTemplateButtonLabel)
							.FilePath(DockerFileTemplatePath)
							.Visibility_Lambda([&]() -> EVisibility
								{
									UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
									return ContainersStatus->IsContainerFolderSetup ? EVisibility::Visible : EVisibility::Collapsed;
								})
					]
					// Retry button
					+ SVerticalBox::Slot()
					.AutoHeight()
					.HAlign(HAlign_Left)
					.Padding(SPadding::Top3x)
					[
						SNew(SButton)
							.OnClicked_Lambda([&]()
								{
									ResetUIToNotStarted();
									StartSectionWorkflow();
									return FReply::Handled();
								})
							.Visibility_Lambda([&]() -> EVisibility
								{
									UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
									return ContainersStatus->ErrorCreatingContainerImage ? 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)
											]
									]
							]
					]
			]
		];
	UpdateUIBasedOnCurrentState();
}