Browse Source

Add engine name, folder and fix refresh crash (#5112)

Signed-off-by: Alex Peterson <[email protected]>
Alex Peterson 3 năm trước cách đây
mục cha
commit
ca9093c202

+ 6 - 2
Code/Tools/ProjectManager/Resources/ProjectManager.qss

@@ -242,11 +242,15 @@ QTabBar::tab:focus {
 
 
 /************** Project Settings **************/
 /************** Project Settings **************/
 #projectSettings {
 #projectSettings {
-    margin-top:42px;
+    margin-top:30px;
+}
+
+#projectPreviewLabel {
+    margin: 10px 0 5px 0;
 }
 }
 
 
 #projectTemplate {
 #projectTemplate {
-    margin: 55px 0 0 50px;
+    margin: 25px 0 0 50px;
 }
 }
 #projectTemplateLabel {
 #projectTemplateLabel {
     font-size:16px;
     font-size:16px;

+ 27 - 5
Code/Tools/ProjectManager/Source/EngineSettingsScreen.cpp

@@ -11,19 +11,28 @@
 #include <FormFolderBrowseEditWidget.h>
 #include <FormFolderBrowseEditWidget.h>
 #include <PythonBindingsInterface.h>
 #include <PythonBindingsInterface.h>
 #include <PathValidator.h>
 #include <PathValidator.h>
+#include <AzQtComponents/Utilities/DesktopUtilities.h>
 
 
 #include <QVBoxLayout>
 #include <QVBoxLayout>
 #include <QLabel>
 #include <QLabel>
 #include <QLineEdit>
 #include <QLineEdit>
 #include <QMessageBox>
 #include <QMessageBox>
+#include <QScrollArea>
 
 
 namespace O3DE::ProjectManager
 namespace O3DE::ProjectManager
 {
 {
     EngineSettingsScreen::EngineSettingsScreen(QWidget* parent)
     EngineSettingsScreen::EngineSettingsScreen(QWidget* parent)
         : ScreenWidget(parent)
         : ScreenWidget(parent)
     {
     {
-        auto* layout = new QVBoxLayout();
+        QScrollArea* scrollArea = new QScrollArea(this);
+        scrollArea->setWidgetResizable(true);
+
+        QWidget* scrollWidget = new QWidget(this);
+        scrollArea->setWidget(scrollWidget);
+
+        QVBoxLayout* layout = new QVBoxLayout(scrollWidget);
         layout->setAlignment(Qt::AlignTop);
         layout->setAlignment(Qt::AlignTop);
+        scrollWidget->setLayout(layout);
 
 
         setObjectName("engineSettingsScreen");
         setObjectName("engineSettingsScreen");
 
 
@@ -39,9 +48,18 @@ namespace O3DE::ProjectManager
         formTitleLabel->setObjectName("formTitleLabel");
         formTitleLabel->setObjectName("formTitleLabel");
         layout->addWidget(formTitleLabel);
         layout->addWidget(formTitleLabel);
 
 
-        m_engineVersion = new FormLineEditWidget(tr("Engine Version"), engineInfo.m_version, this);
-        m_engineVersion->lineEdit()->setReadOnly(true);
-        layout->addWidget(m_engineVersion);
+        FormLineEditWidget* engineName = new FormLineEditWidget(tr("Engine Name"), engineInfo.m_name, this);
+        engineName->lineEdit()->setReadOnly(true);
+        layout->addWidget(engineName);
+
+        FormLineEditWidget* engineVersion = new FormLineEditWidget(tr("Engine Version"), engineInfo.m_version, this);
+        engineVersion->lineEdit()->setReadOnly(true);
+        layout->addWidget(engineVersion);
+
+        FormBrowseEditWidget* engineFolder = new FormBrowseEditWidget(tr("Engine Folder"), engineInfo.m_path, this);
+        engineFolder->lineEdit()->setReadOnly(true);
+        connect( engineFolder, &FormBrowseEditWidget::OnBrowse, [engineInfo]{ AzQtComponents::ShowFileOnDesktop(engineInfo.m_path); });
+        layout->addWidget(engineFolder);
 
 
         m_thirdParty = new FormFolderBrowseEditWidget(tr("3rd Party Software Folder"), engineInfo.m_thirdPartyPath, this);
         m_thirdParty = new FormFolderBrowseEditWidget(tr("3rd Party Software Folder"), engineInfo.m_thirdPartyPath, this);
         m_thirdParty->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
         m_thirdParty->lineEdit()->setValidator(new PathValidator(PathValidator::PathMode::ExistingFolder, this));
@@ -71,7 +89,11 @@ namespace O3DE::ProjectManager
         connect(m_defaultProjectTemplates->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
         connect(m_defaultProjectTemplates->lineEdit(), &QLineEdit::textChanged, this, &EngineSettingsScreen::OnTextChanged);
         layout->addWidget(m_defaultProjectTemplates);
         layout->addWidget(m_defaultProjectTemplates);
 
 
-        setLayout(layout);
+        QVBoxLayout* mainLayout = new QVBoxLayout();
+        mainLayout->setAlignment(Qt::AlignTop);
+        mainLayout->setMargin(0);
+        mainLayout->addWidget(scrollArea);
+        setLayout(mainLayout);
     }
     }
 
 
     ProjectManagerScreen EngineSettingsScreen::GetScreenEnum()
     ProjectManagerScreen EngineSettingsScreen::GetScreenEnum()

+ 0 - 1
Code/Tools/ProjectManager/Source/EngineSettingsScreen.h

@@ -29,7 +29,6 @@ namespace O3DE::ProjectManager
         void OnTextChanged();
         void OnTextChanged();
 
 
     private:
     private:
-        FormLineEditWidget* m_engineVersion;
         FormBrowseEditWidget* m_thirdParty;
         FormBrowseEditWidget* m_thirdParty;
         FormBrowseEditWidget* m_defaultProjects;
         FormBrowseEditWidget* m_defaultProjects;
         FormBrowseEditWidget* m_defaultGems;
         FormBrowseEditWidget* m_defaultGems;

+ 3 - 2
Code/Tools/ProjectManager/Source/FormBrowseEditWidget.cpp

@@ -20,7 +20,8 @@ namespace O3DE::ProjectManager
         setObjectName("formBrowseEditWidget");
         setObjectName("formBrowseEditWidget");
 
 
         QPushButton* browseButton = new QPushButton(this);
         QPushButton* browseButton = new QPushButton(this);
-        connect(browseButton, &QPushButton::pressed, this, &FormBrowseEditWidget::HandleBrowseButton);
+        connect( browseButton, &QPushButton::pressed, [this]{ emit OnBrowse(); });
+        connect( this, &FormBrowseEditWidget::OnBrowse, this, &FormBrowseEditWidget::HandleBrowseButton);
         m_frameLayout->addWidget(browseButton); 
         m_frameLayout->addWidget(browseButton); 
     }
     }
 
 
@@ -34,7 +35,7 @@ namespace O3DE::ProjectManager
         int key = event->key();
         int key = event->key();
         if (key == Qt::Key_Return || key == Qt::Key_Enter)
         if (key == Qt::Key_Return || key == Qt::Key_Enter)
         {
         {
-            HandleBrowseButton();
+            emit OnBrowse();
         }
         }
     }
     }
 
 

+ 4 - 1
Code/Tools/ProjectManager/Source/FormBrowseEditWidget.h

@@ -24,10 +24,13 @@ namespace O3DE::ProjectManager
         explicit FormBrowseEditWidget(const QString& labelText = "", QWidget* parent = nullptr);
         explicit FormBrowseEditWidget(const QString& labelText = "", QWidget* parent = nullptr);
         ~FormBrowseEditWidget() = default;
         ~FormBrowseEditWidget() = default;
 
 
+    signals:
+        void OnBrowse();
+
     protected:
     protected:
         void keyPressEvent(QKeyEvent* event) override;
         void keyPressEvent(QKeyEvent* event) override;
 
 
     protected slots:
     protected slots:
-        virtual void HandleBrowseButton() = 0;
+        virtual void HandleBrowseButton() {};
     };
     };
 } // namespace O3DE::ProjectManager
 } // namespace O3DE::ProjectManager

+ 1 - 1
Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp

@@ -80,7 +80,7 @@ namespace O3DE::ProjectManager
 
 
     void GemCatalogScreen::ReinitForProject(const QString& projectPath)
     void GemCatalogScreen::ReinitForProject(const QString& projectPath)
     {
     {
-        m_gemModel->clear();
+        m_gemModel->Clear();
         m_gemsToRegisterWithProject.clear();
         m_gemsToRegisterWithProject.clear();
         FillModel(projectPath);
         FillModel(projectPath);
 
 

+ 1 - 0
Code/Tools/ProjectManager/Source/GemCatalog/GemModel.cpp

@@ -68,6 +68,7 @@ namespace O3DE::ProjectManager
     void GemModel::Clear()
     void GemModel::Clear()
     {
     {
         clear();
         clear();
+        m_nameToIndexMap.clear();
     }
     }
 
 
     void GemModel::UpdateGemDependencies()
     void GemModel::UpdateGemDependencies()

+ 1 - 0
Code/Tools/ProjectManager/Source/UpdateProjectSettingsScreen.cpp

@@ -36,6 +36,7 @@ namespace O3DE::ProjectManager
 
 
         QLabel* projectPreviewLabel = new QLabel(tr("Select an image (PNG). Minimum %1 x %2 pixels.")
         QLabel* projectPreviewLabel = new QLabel(tr("Select an image (PNG). Minimum %1 x %2 pixels.")
                            .arg(QString::number(ProjectPreviewImageWidth), QString::number(ProjectPreviewImageHeight)));
                            .arg(QString::number(ProjectPreviewImageWidth), QString::number(ProjectPreviewImageHeight)));
+        projectPreviewLabel->setObjectName("projectPreviewLabel");
         previewExtrasLayout->addWidget(projectPreviewLabel);
         previewExtrasLayout->addWidget(projectPreviewLabel);
 
 
         m_projectPreviewImage = new QLabel(this);
         m_projectPreviewImage = new QLabel(this);