void SUpdateDeploymentModal::Construct()

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();
    }
}