in GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SUpdateDeploymentModal.cpp [19:305]
void SUpdateDeploymentModal::Construct(const FArguments& InArgs)
{
OwnerWindow = InArgs._OwnerWindow;
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
SAssignNew(ImageTagInput, SEditableTextBox)
.OnTextCommitted_Raw(this, &SUpdateDeploymentModal::OnImageTagInputCommitted);
ImageTagInput->SetText(ContainersStatus->ImageTag);
SAssignNew(ConnectionPortRangeInput, SEditableTextBox)
.HintText(Menu::DeployContainers::kConnectionPortRangeTextHint)
.OnTextCommitted_Raw(this, &SUpdateDeploymentModal::OnConnectionPortRangeInputCommitted);
ConnectionPortRangeInput->SetText(ContainersStatus->ConnectionPortRange);
SAssignNew(TotalMemoryLimitInput, SEditableTextBox)
.HintText(Menu::DeployContainers::kTotalMemoryLimitTextHint)
.OnTextCommitted_Raw(this, &SUpdateDeploymentModal::OnTotalMemoryLimitInputCommitted);
TotalMemoryLimitInput->SetText(ContainersStatus->TotalMemoryLimit);
SAssignNew(TotalVCPULimitInput, SEditableTextBox)
.HintText(Menu::DeployContainers::kTotalVCPULimitTextHint)
.OnTextCommitted_Raw(this, &SUpdateDeploymentModal::OnTotalVCPULimitInputCommitted);
TotalVCPULimitInput->SetText(ContainersStatus->TotalVCPULimit);
SAssignNew(ImageIDInput, SEditableTextBox)
.HintText(Menu::DeployContainers::kImageIDTextHint)
.OnTextCommitted_Raw(this, &SUpdateDeploymentModal::OnImageIDInputCommitted);
ImageIDInput->SetText(ContainersStatus->ImageID);
ChildSlot
[
SNew(SVerticalBox)
// Modal title and close button
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Left4x + SPadding::Right4x + SPadding::Top2x_Bottom2x)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.FillWidth(1.0f)
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kUpdateFleetDeploymentTitle)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kTitleStyleName)
]
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Right)
.VAlign(VAlign_Center)
[
SNew(SButton)
.OnClicked(this, &SUpdateDeploymentModal::OnCloseButtonClicked)
.ButtonStyle(FGameLiftPluginStyle::Get(), Style::Button::kCloseButtonStyleName)
]
]
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SBorder)
.BorderBackgroundColor(FColor::Black)
.BorderImage(FGameLiftPluginStyle::Get().GetBrush(Style::Brush::kBorderImageName))
.Padding(SPadding::Left4x + SPadding::Right4x + SPadding::Top2x_Bottom2x)
[
// Update deployment description
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kUpdateFleetDeploymentDescription)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
.AutoWrapText(true)
]
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(SOnlineHyperlink)
.Text(Settings::AwsAccount::kAWSFreeTierLinkText)
.Link(Settings::AwsAccount::kAWSFreeTierLinkUrl)
]
// Update deployment setup message warning
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top2x_Bottom2x)
[
CreateUpdateFleetDeploymentWarningMessage()
]
// deployment details title
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kDeploymentDetailsTitle)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kTitleStyleName)
.AutoWrapText(true)
]
// Game server directory and game server executable input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(SBox)
.Visibility_Lambda([&]()
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return ContainersStatus->DeploymentScenario == (int)EContainersDeploymentScenario::NoContainerImageNoExistingEcrRepo || ContainersStatus->DeploymentScenario == (int)EContainersDeploymentScenario::NoContainerImageUseExistingEcrRepo ? EVisibility::Visible : EVisibility::Collapsed;
})
[
CreateGameServerPathInput()
]
]
// Image id input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(SNamedRow)
.NameText(Menu::DeployContainers::kImageIDText)
.Visibility_Lambda([&]()
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return ContainersStatus->DeploymentScenario == (int)EContainersDeploymentScenario::HaveContainerImageInDocker ? EVisibility::Visible : EVisibility::Collapsed;
})
.RowWidget(
ImageIDInput.ToSharedRef()
)
]
// Select ecr repo input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
CreateExistingECRRepoDropdown()
]
// Select image from ecr repo input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
CreateExistingECRImageDropdown()
]
// Deployment scenario choice input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
CreateDeploymentScenarioChoice()
]
// Connection port range input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom)
[
SNew(SNamedRow)
.NameText(Menu::DeployContainers::kConnectionPortRangeText)
.RowWidget(
ConnectionPortRangeInput.ToSharedRef()
)
]
// Total memory limit input
+ SVerticalBox::Slot()
.Padding(SPadding::Top_Bottom)
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Right2x)
[
SNew(SNamedRow)
.NameText(Menu::DeployContainers::kTotalMemoryLimitText)
.SecondaryColumnWidthOverride(OverrideSecondaryColumnWidth)
.RowWidget(
TotalMemoryLimitInput.ToSharedRef()
)
]
+ SHorizontalBox::Slot()
.AutoWidth()
.VAlign(VAlign_Center)
.Padding(SPadding::Right2x)
[
SNew(STextBlock).Text(Menu::DeployContainers::kTotalMemoryLimitUnit)
]
]
// Total cpu limit input
+ SVerticalBox::Slot()
.Padding(SPadding::Top_Bottom)
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Right2x)
[
SNew(SNamedRow)
.NameText(Menu::DeployContainers::kTotalVCPULimitText)
.SecondaryColumnWidthOverride(OverrideSecondaryColumnWidth)
.RowWidget(
TotalVCPULimitInput.ToSharedRef()
)
]
+ SHorizontalBox::Slot()
.AutoWidth()
.VAlign(VAlign_Center)
.Padding(SPadding::Right2x)
[
SNew(STextBlock).Text(Menu::DeployContainers::kTotalVCPULimitUnit)
]
]
// Image tag input
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top_Bottom2x)
[
SNew(SNamedRow)
.NameText(Menu::DeployContainers::kImageTagText)
.RowWidget(
ImageTagInput.ToSharedRef()
)
.Visibility_Lambda([&]()
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return ContainersStatus->DeploymentScenario == (int)EContainersDeploymentScenario::HaveContainerImageInEcr ? EVisibility::Collapsed : EVisibility::Visible;
})
]
// Buttons
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top2x_Bottom2x)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Left)
[
CreateAWSConsoleButton()
]
+ SHorizontalBox::Slot()
.FillWidth(1)
.HAlign(HAlign_Right)
.VAlign(VAlign_Center)
.Padding(SPadding::Right2x)
[
SNew(SButton)
.Text(Settings::AwsAccount::kCancelButtonText)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonLight)
.ButtonStyle(FGameLiftPluginStyle::Get(), Style::Button::kNormalButtonStyleName)
.ContentPadding(SPadding::LaunchBarButtonPadding)
.OnClicked_Lambda([&]
{
OnCloseButtonClicked();
return FReply::Handled();
})
]
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Right)
.VAlign(VAlign_Center)
[
SNew(SButton)
.Text(Menu::DeployContainers::kUpdateButtonText)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonNormal)
.ButtonStyle(FGameLiftPluginStyle::Get(), Style::Button::kSuccessButtonStyleName)
.ContentPadding(SPadding::LaunchBarButtonPadding)
.OnClicked_Lambda([this]
{
OnUpdateDeploymentClicked();
return FReply::Handled();
})
]
]
]
]
];
ResetAllUpdateFields();
SetDeploymentRegionChoice();
SGameLiftSettingsAwsAccountMenu::OnProfileSelectionChangedMultiDelegate.AddSP(this, &SUpdateDeploymentModal::OnBootstrapStatusChanged);
if (CanLoadECRRepoDropDown()) {
LoadRepoInfoAsync();
}
if (CanLoadECRImageDropDown()) {
LoadImageInfoAsync();
}
}