Editor/Window/Containers/ContainersQuestionnaire.cs (145 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using AmazonGameLift.Runtime; namespace AmazonGameLift.Editor { internal class ContainersQuestionnaire : StatefulInput { private bool _enabled; private readonly VisualElement _container; private readonly VisualElement _UseExistingEcrQuestionRadioGroup; private readonly VisualElement _DockerOrEcrQuestionRadioGroup; private readonly VisualElement _DoesContainerImageExistRadioGroup; private readonly RadioButton _uxmlFieldContainerImageExist; private readonly RadioButton _uxmlFieldContainerImageNotExist; private readonly RadioButton _uxmlFieldUseExistingEcrRepo; private readonly RadioButton _uxmlFieldNotUseExistingEcrRepo; private readonly RadioButton _uxmlFieldImageInDocker; private readonly RadioButton _uxmlFieldImageInEcr; private readonly StateManager _stateManager; public ContainersQuestionnaire(VisualElement container, StateManager stateManager, bool enabled) { var uxml = Resources.Load<VisualTreeAsset>("EditorWindow/Components/Containers/ContainersQuestionnaire"); container.Add(uxml.Instantiate()); _container = container; _stateManager = stateManager; _enabled = enabled; // Get a reference to the radio buttons from UXML. _uxmlFieldContainerImageExist = container.Q<RadioButton>("ContainerImageExist"); _uxmlFieldContainerImageNotExist = container.Q<RadioButton>("ContainerImageNotExist"); _uxmlFieldUseExistingEcrRepo = container.Q<RadioButton>("UseExistingEcrRepo"); _uxmlFieldNotUseExistingEcrRepo = container.Q<RadioButton>("NotUseExistingEcrRepo"); _uxmlFieldImageInDocker = container.Q<RadioButton>("ImageInDocker"); _uxmlFieldImageInEcr = container.Q<RadioButton>("ImageInEcr"); _UseExistingEcrQuestionRadioGroup = container.Q("UseExistingEcrQuestionRadioGroup"); _DockerOrEcrQuestionRadioGroup = container.Q("DockerOrEcrQuestionRadioGroup"); _DoesContainerImageExistRadioGroup = container.Q("DoesContainerImageExistRadioGroup"); SetupRadioButtons(); _UseExistingEcrQuestionRadioGroup = container.Q("UseExistingEcrQuestionRadioGroup"); _DockerOrEcrQuestionRadioGroup = container.Q("DockerOrEcrQuestionRadioGroup"); _DoesContainerImageExistRadioGroup = container.Q("DoesContainerImageExistRadioGroup"); SetEnabled(enabled); stateManager.OnUserProfileUpdated += UpdateGUI; LocalizeText(); UpdateGUI(); } protected sealed override void UpdateGUI() { var deploymentScenario = _stateManager.ContainerQuestionnaireScenario; switch (deploymentScenario) { case ContainerScenarios.NoContainerImageNoExistingEcrRepo: _uxmlFieldContainerImageNotExist.value = true; _uxmlFieldNotUseExistingEcrRepo.value = true; Show(_UseExistingEcrQuestionRadioGroup); Hide(_DockerOrEcrQuestionRadioGroup); break; case ContainerScenarios.NoContainerImageUseExistingEcrRepo: _uxmlFieldContainerImageNotExist.value = true; _uxmlFieldUseExistingEcrRepo.value = true; Show(_UseExistingEcrQuestionRadioGroup); Hide(_DockerOrEcrQuestionRadioGroup); break; case ContainerScenarios.HaveContainerImageInDocker: _uxmlFieldContainerImageExist.value = true; _uxmlFieldImageInDocker.value = true; Hide(_UseExistingEcrQuestionRadioGroup); Show(_DockerOrEcrQuestionRadioGroup); break; case ContainerScenarios.HaveContainerImageInEcr: _uxmlFieldContainerImageExist.value = true; _uxmlFieldImageInEcr.value = true; Hide(_UseExistingEcrQuestionRadioGroup); Show(_DockerOrEcrQuestionRadioGroup); break; } } public void SetEnabled(bool value) { _enabled = value; _DockerOrEcrQuestionRadioGroup.SetEnabled(value); _UseExistingEcrQuestionRadioGroup.SetEnabled(value); _DoesContainerImageExistRadioGroup.SetEnabled(value); } private void SetupRadioButtons() { _uxmlFieldContainerImageExist.RegisterCallback<ChangeEvent<bool>>((evt) => { if (evt.newValue) { _stateManager.ContainerQuestionnaireScenario = _uxmlFieldImageInDocker.value ? ContainerScenarios.HaveContainerImageInDocker : ContainerScenarios.HaveContainerImageInEcr; } else { _stateManager.ContainerQuestionnaireScenario = _uxmlFieldUseExistingEcrRepo.value ? ContainerScenarios.NoContainerImageUseExistingEcrRepo : ContainerScenarios.NoContainerImageNoExistingEcrRepo; } _stateManager.OnContainerQuestionnaireScenarioChanged?.Invoke(); UpdateGUI(); }); _uxmlFieldUseExistingEcrRepo.RegisterCallback<ChangeEvent<bool>>((evt) => { if (evt.newValue) { _stateManager.ContainerQuestionnaireScenario = ContainerScenarios.NoContainerImageUseExistingEcrRepo; } else { _stateManager.ContainerQuestionnaireScenario = ContainerScenarios.NoContainerImageNoExistingEcrRepo; } _stateManager.OnContainerQuestionnaireScenarioChanged?.Invoke(); }); _uxmlFieldImageInDocker.RegisterCallback<ChangeEvent<bool>>((evt) => { if (_uxmlFieldImageInDocker.value) { _stateManager.ContainerQuestionnaireScenario = ContainerScenarios.HaveContainerImageInDocker; } else { _stateManager.ContainerQuestionnaireScenario = ContainerScenarios.HaveContainerImageInEcr; } _stateManager.OnContainerQuestionnaireScenarioChanged?.Invoke(); }); } public void PopulateContent() { UpdateGUI(); } private void LocalizeText() { var l = new ElementLocalizer(_container); l.SetElementText("ContainerQuestionnaireDoesContainerImageExist", Strings.ContainerQuestionnaireDoesContainerImageExist); l.SetElementText("ContainerQuestionnaireUseExistingRepo", Strings.ContainerQuestionnaireUseExistingRepo); l.SetElementText("ContainerQuestionnaireWhereItLive", Strings.ContainerQuestionnaireWhereItLive); l.SetElementText("ContainerImageExist", Strings.ContainerQuestionnaireYes); l.SetElementText("ContainerImageNotExist", Strings.ContainerQuestionnaireNo); l.SetElementText("UseExistingEcrRepo", Strings.ContainerQuestionnaireYes); l.SetElementText("NotUseExistingEcrRepo", Strings.ContainerQuestionnaireNo); } } }