瀏覽代碼

Merge pull request #14430 from aws-lumberyard-dev/ProjectManagerEditGemButtonFixForGHI13770

updated screen control setup code in ProjectGemCatalogScreen to setup…
Alex Peterson 2 年之前
父節點
當前提交
b79bd3df1f

+ 39 - 32
Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp

@@ -67,7 +67,7 @@ namespace O3DE::ProjectManager
 
         connect(m_gemModel, &GemModel::gemStatusChanged, this, &GemCatalogScreen::OnGemStatusChanged);
         connect(m_gemModel, &GemModel::dependencyGemStatusChanged, this, &GemCatalogScreen::OnDependencyGemStatusChanged);
-        connect(m_gemModel->GetSelectionModel(), &QItemSelectionModel::selectionChanged, this, [this]{ ShowInspector(); });
+        connect(m_gemModel->GetSelectionModel(), &QItemSelectionModel::selectionChanged, this, &GemCatalogScreen::ShowInspector);
         connect(m_headerWidget, &GemCatalogHeaderWidget::RefreshGems, this, &GemCatalogScreen::Refresh);
         connect(m_headerWidget, &GemCatalogHeaderWidget::OpenGemsRepo, this, &GemCatalogScreen::HandleOpenGemRepo);
         connect(m_headerWidget, &GemCatalogHeaderWidget::CreateGem, this, &GemCatalogScreen::HandleCreateGem);
@@ -75,23 +75,7 @@ namespace O3DE::ProjectManager
         connect(m_headerWidget, &GemCatalogHeaderWidget::UpdateGemCart, this, &GemCatalogScreen::UpdateAndShowGemCart);
         connect(m_downloadController, &DownloadController::Done, this, &GemCatalogScreen::OnGemDownloadResult);
 
-        m_screensControl = qobject_cast<ScreensCtrl*>(parent);
-        if (m_screensControl)
-        {
-            ScreenWidget* createGemScreen = m_screensControl->FindScreen(ProjectManagerScreen::CreateGem);
-            if (createGemScreen)
-            {
-                CreateGem* createGem = static_cast<CreateGem*>(createGemScreen);
-                connect(createGem, &CreateGem::GemCreated, this, &GemCatalogScreen::HandleGemCreated);
-            }
-
-            ScreenWidget* editGemScreen = m_screensControl->FindScreen(ProjectManagerScreen::EditGem);
-            if (editGemScreen)
-            {
-                EditGem* editGem = static_cast<EditGem*>(editGemScreen);
-                connect(editGem, &EditGem::GemEdited, this, &GemCatalogScreen::HandleGemEdited);
-            }
-        }
+        SetUpScreensControl(parent);
 
         QHBoxLayout* hLayout = new QHBoxLayout();
         hLayout->setMargin(0);
@@ -102,7 +86,13 @@ namespace O3DE::ProjectManager
 
         m_gemInspector = new GemInspector(m_gemModel, m_rightPanelStack);
 
-        connect(m_gemInspector, &GemInspector::TagClicked, [=](const Tag& tag) { SelectGem(tag.id); });
+        connect(
+            m_gemInspector,
+            &GemInspector::TagClicked,
+            [=](const Tag& tag)
+            {
+                SelectGem(tag.id);
+            });
         connect(m_gemInspector, &GemInspector::UpdateGem, this, &GemCatalogScreen::UpdateGem);
         connect(m_gemInspector, &GemInspector::UninstallGem, this, &GemCatalogScreen::UninstallGem);
         connect(m_gemInspector, &GemInspector::EditGem, this, &GemCatalogScreen::HandleEditGem);
@@ -120,20 +110,16 @@ namespace O3DE::ProjectManager
         constexpr int minHeaderSectionWidth = 100;
         AdjustableHeaderWidget* listHeaderWidget = new AdjustableHeaderWidget(
             QStringList{ tr("Gem Image"), tr("Gem Name"), tr("Gem Summary"), tr("Status") },
-            QVector<int>{
-                GemPreviewImageWidth + AdjustableHeaderWidget::s_headerTextIndent,
-                -GemPreviewImageWidth - AdjustableHeaderWidget::s_headerTextIndent + GemItemDelegate::s_defaultSummaryStartX - 30,
-                0, // Section is set to stretch to fit
-                GemItemDelegate::s_statusIconSize + GemItemDelegate::s_statusButtonSpacing + GemItemDelegate::s_buttonWidth + GemItemDelegate::s_contentMargins.right()
-            },
+            QVector<int>{ GemPreviewImageWidth + AdjustableHeaderWidget::s_headerTextIndent,
+                          -GemPreviewImageWidth - AdjustableHeaderWidget::s_headerTextIndent + GemItemDelegate::s_defaultSummaryStartX - 30,
+                          0, // Section is set to stretch to fit
+                          GemItemDelegate::s_statusIconSize + GemItemDelegate::s_statusButtonSpacing + GemItemDelegate::s_buttonWidth +
+                              GemItemDelegate::s_contentMargins.right() },
             minHeaderSectionWidth,
-            QVector<QHeaderView::ResizeMode>
-            {
-                QHeaderView::ResizeMode::Fixed,
-                QHeaderView::ResizeMode::Interactive,
-                QHeaderView::ResizeMode::Stretch,
-                QHeaderView::ResizeMode::Fixed
-            },
+            QVector<QHeaderView::ResizeMode>{ QHeaderView::ResizeMode::Fixed,
+                                              QHeaderView::ResizeMode::Interactive,
+                                              QHeaderView::ResizeMode::Stretch,
+                                              QHeaderView::ResizeMode::Fixed },
             this);
 
         m_gemListView = new GemListView(m_proxyModel, m_proxyModel->GetSelectionModel(), listHeaderWidget, m_readOnly, this);
@@ -163,6 +149,27 @@ namespace O3DE::ProjectManager
         m_notificationsView->SetMaxQueuedNotifications(1);
     }
 
+    void GemCatalogScreen::SetUpScreensControl(QWidget* parent)
+    {
+        m_screensControl = qobject_cast<ScreensCtrl*>(parent);
+        if (m_screensControl)
+        {
+            ScreenWidget* createGemScreen = m_screensControl->FindScreen(ProjectManagerScreen::CreateGem);
+            if (createGemScreen)
+            {
+                CreateGem* createGem = static_cast<CreateGem*>(createGemScreen);
+                connect(createGem, &CreateGem::GemCreated, this, &GemCatalogScreen::HandleGemCreated);
+            }
+
+            ScreenWidget* editGemScreen = m_screensControl->FindScreen(ProjectManagerScreen::EditGem);
+            if (editGemScreen)
+            {
+                EditGem* editGem = static_cast<EditGem*>(editGemScreen);
+                connect(editGem, &EditGem::GemEdited, this, &GemCatalogScreen::HandleGemEdited);
+            }
+        }
+    }
+
     void GemCatalogScreen::NotifyCurrentScreen()
     {
         if (m_readOnly && m_gemModel->rowCount() == 0)

+ 4 - 1
Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.h

@@ -69,9 +69,13 @@ namespace O3DE::ProjectManager
         void showEvent(QShowEvent* event) override;
         void resizeEvent(QResizeEvent* event) override;
         void moveEvent(QMoveEvent* event) override;
+        virtual void SetUpScreensControl(QWidget* parent);
 
         GemModel* m_gemModel = nullptr;
         QSet<QString> m_gemsToRegisterWithProject;
+        ScreensCtrl* m_screensControl = nullptr;
+
+
 
     private slots:
         void HandleOpenGemRepo();
@@ -98,7 +102,6 @@ namespace O3DE::ProjectManager
         QVBoxLayout* m_filterWidgetLayout = nullptr;
         GemFilterWidget* m_filterWidget = nullptr;
         DownloadController* m_downloadController = nullptr;
-        ScreensCtrl* m_screensControl = nullptr;
         bool m_notificationsEnabled = true;
         QString m_projectPath;
         bool m_readOnly;

+ 4 - 1
Code/Tools/ProjectManager/Source/ProjectGemCatalogScreen.cpp

@@ -23,7 +23,10 @@ namespace O3DE::ProjectManager
     ProjectGemCatalogScreen::ProjectGemCatalogScreen(DownloadController* downloadController, QWidget* parent)
         : GemCatalogScreen(downloadController , /*readOnly = */ false, parent)
     {
-
+        // We have to fetch the parent of our parent, because Project Manager Gem Catalog is usually embedded inside another workflow, like
+        // CreateProjectScreen or UpdateProjectScreen
+        // As such, it does not have direct access to ScreenControls
+        SetUpScreensControl(parent->parentWidget());
     }
 
     ProjectManagerScreen ProjectGemCatalogScreen::GetScreenEnum()

+ 1 - 1
Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp

@@ -42,7 +42,7 @@ namespace O3DE::ProjectManager
         vLayout->addWidget(m_header);
 
         m_updateSettingsScreen = new UpdateProjectSettingsScreen();
-        m_projectGemCatalogScreen = new ProjectGemCatalogScreen(downloadController);
+        m_projectGemCatalogScreen = new ProjectGemCatalogScreen(downloadController, this);
         m_gemRepoScreen = new GemRepoScreen(this);
 
         connect(m_projectGemCatalogScreen, &ScreenWidget::ChangeScreenRequest, this, &UpdateProjectCtrl::OnChangeScreenRequest);