GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SIntakeQuestionnaireSection.cpp (234 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#include "SIntakeQuestionnaireSection.h"
#include <Types/EContainersDeploymentScenario.h>
#include <GameLiftPluginConstants.h>
#define LOCTEXT_NAMESPACE "SIntakeQuestionnaireSection"
FDeploymentScenarioState SIntakeQuestionnaireSection::OnDeploymentScenarioStateChangedMultiDelegate;
void SIntakeQuestionnaireSection::Construct(const FArguments& InArgs)
{
TSharedRef<SVerticalBox> VerticalBox = SNew(SVerticalBox);
// Question 1
VerticalBox->AddSlot()
.AutoHeight()
.Padding(SPadding::Top_Bottom2x)
[
CreateFirstQuestion()
];
// Question 2
VerticalBox->AddSlot()
.AutoHeight()
[
CreateSecondQuestion()
];
ChildSlot
.Padding(SPadding::Top_Bottom)
[
VerticalBox
];
}
TSharedRef<SWidget> SIntakeQuestionnaireSection::CreateFirstQuestion()
{
return SNew(SVerticalBox)
+ SVerticalBox::Slot()
.Padding(SPadding::Bottom)
.AutoHeight()
[
SNew(STextBlock).Text(Menu::DeployContainers::kExistingContainerImageQuestion)
]
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Right2x)
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EHasExistingContainerImageChoice::HasExistingContainerImage)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EHasExistingContainerImageChoice::HasExistingContainerImage)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerYes)
]
]
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EHasExistingContainerImageChoice::NoExistingContainerImage)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EHasExistingContainerImageChoice::NoExistingContainerImage)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerNo)
]
]
];
}
TSharedRef<SWidget> SIntakeQuestionnaireSection::CreateSecondQuestion()
{
return SNew(SWidgetSwitcher)
.WidgetIndex_Lambda([&]()
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return ContainersStatus->HasExistingContainerImage;
})
+ SWidgetSwitcher::Slot()
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Bottom)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kECRRepositoryQuestion)
]
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Right2x)
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EUseExistingECRRepoChoice::UseExistingECRRepo)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EUseExistingECRRepoChoice::UseExistingECRRepo)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerYes)
]
]
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EUseExistingECRRepoChoice::NoExistingECRRepo)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EUseExistingECRRepoChoice::NoExistingECRRepo)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerNo)
]
]
]
]
+ SWidgetSwitcher::Slot()
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Bottom)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kWhereIsContainerImageQuestion)
]
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Right2x)
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EContainerImageChoice::Docker)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EContainerImageChoice::Docker)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerDocker)
]
]
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SCheckBox)
.Style(FCoreStyle::Get(), "RadioButton")
.IsChecked(this, &SIntakeQuestionnaireSection::IsRadioChecked, EContainerImageChoice::AmazonECR)
.OnCheckStateChanged(this, &SIntakeQuestionnaireSection::OnRadioChanged, EContainerImageChoice::AmazonECR)
.Content()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAnswerAmazonECR)
]
]
]
];
}
ECheckBoxState SIntakeQuestionnaireSection::IsRadioChecked(EHasExistingContainerImageChoice RadioButtonChoice) const
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return (ContainersStatus->HasExistingContainerImage == (int)RadioButtonChoice) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SIntakeQuestionnaireSection::OnRadioChanged(ECheckBoxState NewRadioState, EHasExistingContainerImageChoice RadioButtonChoice)
{
if (NewRadioState == ECheckBoxState::Checked)
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
ContainersStatus->HasExistingContainerImage = (int)RadioButtonChoice;
ContainersStatus->SaveConfig();
}
UpdateDeploymentScenarioState();
}
ECheckBoxState SIntakeQuestionnaireSection::IsRadioChecked(EUseExistingECRRepoChoice RadioButtonChoice) const
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return (ContainersStatus->UseExistingECRRepo == (int)RadioButtonChoice) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SIntakeQuestionnaireSection::OnRadioChanged(ECheckBoxState NewRadioState, EUseExistingECRRepoChoice RadioButtonChoice)
{
if (NewRadioState == ECheckBoxState::Checked)
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
ContainersStatus->UseExistingECRRepo = (int)RadioButtonChoice;
ContainersStatus->SaveConfig();
}
UpdateDeploymentScenarioState();
}
ECheckBoxState SIntakeQuestionnaireSection::IsRadioChecked(EContainerImageChoice RadioButtonChoice) const
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return (ContainersStatus->ContainerImageChoice == (int)RadioButtonChoice) ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SIntakeQuestionnaireSection::OnRadioChanged(ECheckBoxState NewRadioState, EContainerImageChoice RadioButtonChoice)
{
if (NewRadioState == ECheckBoxState::Checked)
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
ContainersStatus->ContainerImageChoice = (int)RadioButtonChoice;
ContainersStatus->SaveConfig();
}
UpdateDeploymentScenarioState();
}
void SIntakeQuestionnaireSection::UpdateDeploymentScenarioState()
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
if (ContainersStatus->HasExistingContainerImage == (int)EHasExistingContainerImageChoice::NoExistingContainerImage &&
ContainersStatus->UseExistingECRRepo == (int)EUseExistingECRRepoChoice::NoExistingECRRepo)
{
ContainersStatus->DeploymentScenario = (int)EContainersDeploymentScenario::NoContainerImageNoExistingEcrRepo;
}
else if (ContainersStatus->HasExistingContainerImage == (int)EHasExistingContainerImageChoice::NoExistingContainerImage &&
ContainersStatus->UseExistingECRRepo == (int)EUseExistingECRRepoChoice::UseExistingECRRepo)
{
ContainersStatus->DeploymentScenario = (int)EContainersDeploymentScenario::NoContainerImageUseExistingEcrRepo;
}
else if (ContainersStatus->HasExistingContainerImage == (int)EHasExistingContainerImageChoice::HasExistingContainerImage &&
ContainersStatus->ContainerImageChoice == (int)EContainerImageChoice::Docker)
{
ContainersStatus->DeploymentScenario = (int)EContainersDeploymentScenario::HaveContainerImageInDocker;
}
else if (ContainersStatus->HasExistingContainerImage == (int)EHasExistingContainerImageChoice::HasExistingContainerImage &&
ContainersStatus->ContainerImageChoice == (int)EContainerImageChoice::AmazonECR)
{
ContainersStatus->DeploymentScenario = (int)EContainersDeploymentScenario::HaveContainerImageInEcr;
}
ContainersStatus->SaveConfig();
OnDeploymentScenarioStateChangedMultiDelegate.Broadcast(this);
}
#undef LOCTEXT_NAMESPACE