EngineSettingsScreen.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 <ProjectUtils.h>
  14. #include <AzQtComponents/Utilities/DesktopUtilities.h>
  15. #include <QVBoxLayout>
  16. #include <QLabel>
  17. #include <QLineEdit>
  18. #include <QMessageBox>
  19. #include <QScrollArea>
  20. namespace O3DE::ProjectManager
  21. {
  22. EngineSettingsScreen::EngineSettingsScreen(QWidget* parent)
  23. : ScreenWidget(parent)
  24. {
  25. QScrollArea* scrollArea = new QScrollArea(this);
  26. scrollArea->setWidgetResizable(true);
  27. QWidget* scrollWidget = new QWidget(this);
  28. scrollArea->setWidget(scrollWidget);
  29. QVBoxLayout* layout = new QVBoxLayout(scrollWidget);
  30. layout->setAlignment(Qt::AlignTop);
  31. scrollWidget->setLayout(layout);
  32. setObjectName("engineSettingsScreen");
  33. EngineInfo engineInfo;
  34. AZ::Outcome<EngineInfo> engineInfoResult = PythonBindingsInterface::Get()->GetEngineInfo();
  35. if (engineInfoResult.IsSuccess())
  36. {
  37. engineInfo = engineInfoResult.GetValue();
  38. }
  39. QLabel* formTitleLabel = new QLabel(tr("O3DE Settings"), this);
  40. formTitleLabel->setObjectName("formTitleLabel");
  41. layout->addWidget(formTitleLabel);
  42. FormLineEditWidget* engineName = new FormLineEditWidget(tr("Engine Name"), engineInfo.m_name, this);
  43. engineName->lineEdit()->setReadOnly(true);
  44. layout->addWidget(engineName);
  45. FormLineEditWidget* engineDisplayVersion = new FormLineEditWidget(tr("Engine Display Version"), engineInfo.m_displayVersion, this);
  46. engineDisplayVersion->lineEdit()->setReadOnly(true);
  47. layout->addWidget(engineDisplayVersion);
  48. FormLineEditWidget* engineVersion = new FormLineEditWidget(tr("Engine Version"), engineInfo.m_version, this);
  49. engineVersion->lineEdit()->setReadOnly(true);
  50. layout->addWidget(engineVersion);
  51. FormBrowseEditWidget* engineFolder = new FormBrowseEditWidget(tr("Engine Folder"), engineInfo.m_path, this);
  52. engineFolder->lineEdit()->setReadOnly(true);
  53. connect( engineFolder, &FormBrowseEditWidget::OnBrowse, [engineInfo]{ AzQtComponents::ShowFileOnDesktop(engineInfo.m_path); });
  54. layout->addWidget(engineFolder);
  55. m_thirdParty = new FormFolderBrowseEditWidget(tr("3rd Party Software Folder"), engineInfo.m_thirdPartyPath, this);
  56. m_thirdParty->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  57. m_thirdParty->lineEdit()->setReadOnly(true);
  58. m_thirdParty->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  59. connect(m_thirdParty->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  60. layout->addWidget(m_thirdParty);
  61. m_defaultProjects = new FormFolderBrowseEditWidget(tr("Default Projects Folder"), engineInfo.m_defaultProjectsFolder, this);
  62. m_defaultProjects->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  63. m_defaultProjects->lineEdit()->setReadOnly(true);
  64. m_defaultProjects->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  65. connect(m_defaultProjects->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  66. layout->addWidget(m_defaultProjects);
  67. m_defaultGems = new FormFolderBrowseEditWidget(tr("Default Gems Folder"), engineInfo.m_defaultGemsFolder, this);
  68. m_defaultGems->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  69. m_defaultGems->lineEdit()->setReadOnly(true);
  70. m_defaultGems->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  71. connect(m_defaultGems->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  72. layout->addWidget(m_defaultGems);
  73. m_defaultProjectTemplates = new FormFolderBrowseEditWidget(tr("Default Project Templates Folder"), engineInfo.m_defaultTemplatesFolder, this);
  74. m_defaultProjectTemplates->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
  75. m_defaultProjectTemplates->lineEdit()->setReadOnly(true);
  76. m_defaultProjectTemplates->setErrorLabelText(tr("Please provide a valid path to a folder that exists"));
  77. connect(m_defaultProjectTemplates->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
  78. layout->addWidget(m_defaultProjectTemplates);
  79. QVBoxLayout* mainLayout = new QVBoxLayout();
  80. mainLayout->setAlignment(Qt::AlignTop);
  81. mainLayout->setMargin(0);
  82. mainLayout->addWidget(scrollArea);
  83. setLayout(mainLayout);
  84. }
  85. ProjectManagerScreen EngineSettingsScreen::GetScreenEnum()
  86. {
  87. return ProjectManagerScreen::EngineSettings;
  88. }
  89. void EngineSettingsScreen::OnTextChanged()
  90. {
  91. // save engine settings
  92. auto engineInfoResult = PythonBindingsInterface::Get()->GetEngineInfo();
  93. if (engineInfoResult.IsSuccess())
  94. {
  95. EngineInfo engineInfo;
  96. engineInfo = engineInfoResult.GetValue();
  97. engineInfo.m_thirdPartyPath = m_thirdParty->lineEdit()->text();
  98. engineInfo.m_defaultProjectsFolder = m_defaultProjects->lineEdit()->text();
  99. engineInfo.m_defaultGemsFolder = m_defaultGems->lineEdit()->text();
  100. engineInfo.m_defaultTemplatesFolder = m_defaultProjectTemplates->lineEdit()->text();
  101. auto result = PythonBindingsInterface::Get()->SetEngineInfo(engineInfo);
  102. if (!result)
  103. {
  104. ProjectUtils::DisplayDetailedError(tr("Failed to save engine settings"), result, this);
  105. }
  106. }
  107. else
  108. {
  109. QMessageBox::critical(this, tr("Engine Settings"), tr("Failed to get engine settings."));
  110. }
  111. }
  112. } // namespace O3DE::ProjectManager