EngineSettingsScreen.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <EngineSettingsScreen.h>
  9. #include <FormLineEditWidget.h>
  10. #include <FormFolderBrowseEditWidget.h>
  11. #include <PythonBindingsInterface.h>
  12. #include <PathValidator.h>
  13. #include <QVBoxLayout>
  14. #include <QLabel>
  15. #include <QLineEdit>
  16. #include <QMessageBox>
  17. namespace O3DE::ProjectManager
  18. {
  19. EngineSettingsScreen::EngineSettingsScreen(QWidget* parent)
  20. : ScreenWidget(parent)
  21. {
  22. auto* layout = new QVBoxLayout();
  23. layout->setAlignment(Qt::AlignTop);
  24. setObjectName("engineSettingsScreen");
  25. EngineInfo engineInfo;
  26. AZ::Outcome<EngineInfo> engineInfoResult = PythonBindingsInterface::Get()->GetEngineInfo();
  27. if (engineInfoResult.IsSuccess())
  28. {
  29. engineInfo = engineInfoResult.GetValue();
  30. }
  31. QLabel* formTitleLabel = new QLabel(tr("O3DE Settings"), this);
  32. formTitleLabel->setObjectName("formTitleLabel");
  33. layout->addWidget(formTitleLabel);
  34. m_engineVersion = new FormLineEditWidget(tr("Engine Version"), engineInfo.m_version, this);
  35. m_engineVersion->lineEdit()->setReadOnly(true);
  36. layout->addWidget(m_engineVersion);
  37. m_thirdParty = new FormFolderBrowseEditWidget(tr("3rd Party Software Folder"), engineInfo.m_thirdPartyPath, this);
  38. m_thirdParty->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  39. m_thirdParty->lineEdit()->setReadOnly(true);
  40. m_thirdParty->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  41. connect(m_thirdParty->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  42. layout->addWidget(m_thirdParty);
  43. m_defaultProjects = new FormFolderBrowseEditWidget(tr("Default Projects Folder"), engineInfo.m_defaultProjectsFolder, this);
  44. m_defaultProjects->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  45. m_defaultProjects->lineEdit()->setReadOnly(true);
  46. m_defaultProjects->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  47. connect(m_defaultProjects->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  48. layout->addWidget(m_defaultProjects);
  49. m_defaultGems = new FormFolderBrowseEditWidget(tr("Default Gems Folder"), engineInfo.m_defaultGemsFolder, this);
  50. m_defaultGems->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  51. m_defaultGems->lineEdit()->setReadOnly(true);
  52. m_defaultGems->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  53. connect(m_defaultGems->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  54. layout->addWidget(m_defaultGems);
  55. m_defaultProjectTemplates = new FormFolderBrowseEditWidget(tr("Default Project Templates Folder"), engineInfo.m_defaultTemplatesFolder, this);
  56. m_defaultProjectTemplates->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  57. m_defaultProjectTemplates->lineEdit()->setReadOnly(true);
  58. m_defaultProjectTemplates->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  59. connect(m_defaultProjectTemplates->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  60. layout->addWidget(m_defaultProjectTemplates);
  61. setLayout(layout);
  62. }
  63. ProjectManagerScreen EngineSettingsScreen::GetScreenEnum()
  64. {
  65. return ProjectManagerScreen::EngineSettings;
  66. }
  67. void EngineSettingsScreen::OnTextChanged()
  68. {
  69. // save engine settings
  70. auto engineInfoResult = PythonBindingsInterface::Get()->GetEngineInfo();
  71. if (engineInfoResult.IsSuccess())
  72. {
  73. EngineInfo engineInfo;
  74. engineInfo = engineInfoResult.GetValue();
  75. engineInfo.m_thirdPartyPath = m_thirdParty->lineEdit()->text();
  76. engineInfo.m_defaultProjectsFolder = m_defaultProjects->lineEdit()->text();
  77. engineInfo.m_defaultGemsFolder = m_defaultGems->lineEdit()->text();
  78. engineInfo.m_defaultTemplatesFolder = m_defaultProjectTemplates->lineEdit()->text();
  79. bool result = PythonBindingsInterface::Get()->SetEngineInfo(engineInfo);
  80. if (!result)
  81. {
  82. QMessageBox::critical(this, tr("Engine Settings"), tr("Failed to save engine settings."));
  83. }
  84. }
  85. else
  86. {
  87. QMessageBox::critical(this, tr("Engine Settings"), tr("Failed to get engine settings."));
  88. }
  89. }
  90. } // namespace O3DE::ProjectManager