|
|
|
|
@ -66,6 +66,9 @@ namespace O3DE::ProjectManager
|
|
|
|
|
hLayout->addWidget(filterWidget);
|
|
|
|
|
hLayout->addLayout(middleVLayout);
|
|
|
|
|
hLayout->addWidget(m_gemInspector);
|
|
|
|
|
|
|
|
|
|
m_notificationsView = AZStd::make_unique<AzToolsFramework::ToastNotificationsView>(this, AZ_CRC("GemCatalogNotificationsView"));
|
|
|
|
|
m_notificationsView->SetOffset(QPoint(10, 70));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::ReinitForProject(const QString& projectPath)
|
|
|
|
|
@ -86,6 +89,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
m_headerWidget->ReinitForProject();
|
|
|
|
|
|
|
|
|
|
connect(m_gemModel, &GemModel::dataChanged, m_filterWidget, &GemFilterWidget::ResetGemStatusFilter);
|
|
|
|
|
connect(m_gemModel, &GemModel::gemStatusChanged, this, &GemCatalogScreen::OnGemStatusChanged);
|
|
|
|
|
|
|
|
|
|
// Select the first entry after everything got correctly sized
|
|
|
|
|
QTimer::singleShot(200, [=]{
|
|
|
|
|
@ -94,6 +98,72 @@ namespace O3DE::ProjectManager
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::OnGemStatusChanged(const QModelIndex& modelIndex, uint32_t numChangedDependencies)
|
|
|
|
|
{
|
|
|
|
|
if (m_notificationsEnabled)
|
|
|
|
|
{
|
|
|
|
|
bool added = GemModel::IsAdded(modelIndex);
|
|
|
|
|
bool dependency = GemModel::IsAddedDependency(modelIndex);
|
|
|
|
|
|
|
|
|
|
bool gemStateChanged = (added && !dependency) || (!added && !dependency);
|
|
|
|
|
if (!gemStateChanged && !numChangedDependencies)
|
|
|
|
|
{
|
|
|
|
|
// no actual changes made
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString notification;
|
|
|
|
|
if (gemStateChanged)
|
|
|
|
|
{
|
|
|
|
|
notification = GemModel::GetDisplayName(modelIndex);
|
|
|
|
|
if (numChangedDependencies > 0)
|
|
|
|
|
{
|
|
|
|
|
notification += " " + tr("and") + " ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (numChangedDependencies == 1 )
|
|
|
|
|
{
|
|
|
|
|
notification += "1 Gem " + tr("dependency");
|
|
|
|
|
}
|
|
|
|
|
else if (numChangedDependencies > 1)
|
|
|
|
|
{
|
|
|
|
|
notification += QString("%d Gem ").arg(numChangedDependencies) + tr("dependencies");
|
|
|
|
|
}
|
|
|
|
|
notification += " " + (added ? tr("activated") : tr("deactivated"));
|
|
|
|
|
|
|
|
|
|
AzQtComponents::ToastConfiguration toastConfiguration(AzQtComponents::ToastType::Custom, notification, "");
|
|
|
|
|
toastConfiguration.m_customIconImage = ":/gem.svg";
|
|
|
|
|
toastConfiguration.m_borderRadius = 4;
|
|
|
|
|
toastConfiguration.m_duration = AZStd::chrono::milliseconds(3000);
|
|
|
|
|
m_notificationsView->ShowToastNotification(toastConfiguration);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::hideEvent(QHideEvent* event)
|
|
|
|
|
{
|
|
|
|
|
ScreenWidget::hideEvent(event);
|
|
|
|
|
m_notificationsView->OnHide();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::showEvent(QShowEvent* event)
|
|
|
|
|
{
|
|
|
|
|
ScreenWidget::showEvent(event);
|
|
|
|
|
m_notificationsView->OnShow();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::resizeEvent(QResizeEvent* event)
|
|
|
|
|
{
|
|
|
|
|
ScreenWidget::resizeEvent(event);
|
|
|
|
|
m_notificationsView->UpdateToastPosition();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::moveEvent(QMoveEvent* event)
|
|
|
|
|
{
|
|
|
|
|
ScreenWidget::moveEvent(event);
|
|
|
|
|
m_notificationsView->UpdateToastPosition();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemCatalogScreen::FillModel(const QString& projectPath)
|
|
|
|
|
{
|
|
|
|
|
AZ::Outcome<QVector<GemInfo>, AZStd::string> allGemInfosResult = PythonBindingsInterface::Get()->GetAllGemInfos(projectPath);
|
|
|
|
|
@ -107,6 +177,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_gemModel->UpdateGemDependencies();
|
|
|
|
|
m_notificationsEnabled = false;
|
|
|
|
|
|
|
|
|
|
// Gather enabled gems for the given project.
|
|
|
|
|
auto enabledGemNamesResult = PythonBindingsInterface::Get()->GetEnabledGemNames(projectPath);
|
|
|
|
|
@ -133,6 +204,8 @@ namespace O3DE::ProjectManager
|
|
|
|
|
{
|
|
|
|
|
QMessageBox::critical(nullptr, tr("Operation failed"), QString("Cannot retrieve enabled gems for project %1.\n\nError:\n%2").arg(projectPath, enabledGemNamesResult.GetError().c_str()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_notificationsEnabled = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|