diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 207f70aec1..492759c341 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -88,6 +88,22 @@ namespace ScriptCanvasEditor LogBus::Broadcast(&LogTraits::Clear); } + void Controller::EnableAllUpgradeButtons() + { + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } + } + } + + QList Controller::FindTableItems(const AZ::Data::AssetInfo& info) + { + return m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + } + void Controller::OnButtonPressClose() { reject(); @@ -106,7 +122,7 @@ namespace ScriptCanvasEditor if (!scriptCanvasAsset) { AZ_Warning - ( ScriptCanvas::k_VersionExplorerWindow.data() + (ScriptCanvas::k_VersionExplorerWindow.data() , false , "InspectAsset: %s, AsestData failed to return ScriptCanvasAsset" , asset.GetHint().c_str()); @@ -184,7 +200,7 @@ namespace ScriptCanvasEditor if (graphComponent) { graphComponent->UpgradeGraph - ( asset + (asset , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate , m_view->verbose->isChecked()); } @@ -195,7 +211,7 @@ namespace ScriptCanvasEditor { int result = QMessageBox::No; QMessageBox mb - ( QMessageBox::Warning + (QMessageBox::Warning , QObject::tr("Failed to Save Upgraded File") , QObject::tr("The upgraded file could not be saved because the file is read only.\n" "Do you want to make it writeable and overwrite it?") @@ -221,13 +237,14 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) { - QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + QList items = FindTableItems(info); if (!items.isEmpty()) { for (auto* item : items) { int row = item->row(); SetRowBusy(row); + m_view->tableWidget->setCellWidget(row, ColumnAction, nullptr); } } } @@ -245,21 +262,23 @@ namespace ScriptCanvasEditor { VE_LOG("Failed to modify %s: %s", result.assetInfo.m_relativePath.c_str(), result.errorMessage.data()); } - - QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - if (result.errorMessage.empty()) + QList items = FindTableItems(info); + for (auto* item : items) + { + int row = item->row(); + + if (result.errorMessage.empty()) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) { - SetRowSucceeded(row); - } - else - { - SetRowFailed(row, ""); + button->setEnabled(false); } } } @@ -305,15 +324,6 @@ namespace ScriptCanvasEditor { m_view->onlyShowOutdated->setEnabled(true); - // Enable all the Upgrade buttons - for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) - { - if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) - { - button->setEnabled(true); - } - } - QString spinnerText = QStringLiteral("Scan Complete"); spinnerText.append(QString::asprintf(" - Discovered: %zu, Failed: %zu, Upgradeable: %zu, Up-to-date: %zu" , result.m_catalogAssets.size() @@ -324,6 +334,7 @@ namespace ScriptCanvasEditor m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); m_view->progressBar->setVisible(false); + EnableAllUpgradeButtons(); if (!result.m_unfiltered.empty()) { @@ -338,59 +349,67 @@ namespace ScriptCanvasEditor void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, [[maybe_unused]] Filtered filtered) { - m_view->tableWidget->insertRow(m_handledAssetCount); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); - m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); - SetRowSucceeded(m_handledAssetCount); + const int rowIndex = m_view->tableWidget->rowCount(); - if (filtered == Filtered::No) + if (filtered == Filtered::No || !m_view->onlyShowOutdated->isChecked()) { - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - SetRowBusy(m_handledAssetCount); - connect - ( rowGoToButton - , &QPushButton::pressed - , this - , [this, assetInfo]() + m_view->tableWidget->insertRow(rowIndex); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowSucceeded(rowIndex); + + if (filtered == Filtered::No) + { + QPushButton* upgradeButton = new QPushButton(this); + upgradeButton->setText("Upgrade"); + upgradeButton->setEnabled(false); + SetRowBusy(rowIndex); + + connect + ( upgradeButton + , &QPushButton::pressed + , this + , [this, assetInfo]() { this->OnButtonPressUpgradeSingle(assetInfo); }); - m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnAction), rowGoToButton); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnAction), upgradeButton); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + ( result + , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath + , assetNameUtf8 + , info + , watchFolder); + AZ_Error + ( ScriptCanvas::k_VersionExplorerWindow.data() + , result + , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnBrowse), browseButton); } - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult - ( result - , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath - , assetNameUtf8 - , info - , watchFolder); - AZ_Error - ( ScriptCanvas::k_VersionExplorerWindow.data() - , result - , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnBrowse), browseButton); OnScannedGraphResult(assetInfo); } @@ -403,11 +422,12 @@ namespace ScriptCanvasEditor void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) { - m_view->tableWidget->insertRow(m_handledAssetCount); + const int rowIndex = m_view->tableWidget->rowCount(); + m_view->tableWidget->insertRow(rowIndex); QTableWidgetItem* rowName = new QTableWidgetItem ( tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); - m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); - SetRowFailed(m_handledAssetCount, "Load failed"); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowFailed(rowIndex, "Load failed"); OnScannedGraphResult(info); } @@ -425,8 +445,9 @@ namespace ScriptCanvasEditor if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) { button->setEnabled(false); - SetRowBusy(row); } + + SetRowBusy(row); } QString spinnerText = QStringLiteral("Upgrade in progress - "); @@ -464,6 +485,8 @@ namespace ScriptCanvasEditor m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); AddLogEntries(); + EnableAllUpgradeButtons(); + m_view->scanButton->setEnabled(true); } void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) @@ -483,6 +506,11 @@ namespace ScriptCanvasEditor { SetRowFailed(row, ""); } + + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 23f35840be..ac18ff6cf5 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -22,6 +22,7 @@ AZ_POP_DISABLE_WARNING #endif class QPushButton; +class QTableWidgetItem; namespace Ui { @@ -61,6 +62,9 @@ namespace ScriptCanvasEditor int m_handledAssetCount = 0; void AddLogEntries(); + void EnableAllUpgradeButtons(); + QList FindTableItems(const AZ::Data::AssetInfo& assetInfo); + void OnButtonPressClose(); void OnButtonPressScan(); void OnButtonPressUpgrade(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index 98edef54bf..d8d242adbb 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -101,9 +101,9 @@ namespace ScriptCanvasEditor return; } - auto results = m_scanner->TakeResult(); if (modification.modifySingleAsset.m_assetId.IsValid()) { + const auto& results = m_scanner->GetResult(); auto iter = AZStd::find_if ( results.m_unfiltered.begin() , results.m_unfiltered.end() @@ -118,24 +118,32 @@ namespace ScriptCanvasEditor return; } - WorkingAsset singleEntry = *iter; - results.m_unfiltered.clear(); - results.m_unfiltered.push_back(singleEntry); + + m_state = State::ModifySingle; + m_modifier = AZStd::make_unique(modification, WorkingAssets{ *iter }, [this]() { OnModificationComplete(); }); + } + else + { + auto results = m_scanner->TakeResult(); + m_state = State::ModifyAll; + m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this]() { OnModificationComplete(); }); } m_modResults = {}; - m_state = State::Modifying; m_log.Activate(); - m_keepEditorAlive = AZStd::make_unique(); - - m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); }); + m_keepEditorAlive = AZStd::make_unique(); } void Model::OnModificationComplete() { ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeComplete, m_modifier->GetResult()); m_modifier.reset(); - m_scanner.reset(); + + if (m_state == State::ModifyAll) + { + m_scanner.reset(); + } + Idle(); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index e11f8857e7..58ad9877be 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -54,7 +54,8 @@ namespace ScriptCanvasEditor { Idle, Scanning, - Modifying, + ModifyAll, + ModifySingle }; State m_state = State::Idle;