From c1e21185b43e7892973dc1055ae19d1b9099b5e1 Mon Sep 17 00:00:00 2001 From: igarri Date: Wed, 12 May 2021 12:20:23 +0100 Subject: [PATCH] Selecting correct indexes from Asset Browser Model --- .../Views/AssetBrowserTableView.cpp | 22 +++++------ .../Views/AssetBrowserTableView.h | 7 +--- .../AzAssetBrowser/AzAssetBrowserWindow.cpp | 39 ++++++++++++++++++- .../AzAssetBrowser/AzAssetBrowserWindow.h | 2 +- 4 files changed, 52 insertions(+), 18 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp index aa35d99894..0a6aeed374 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp @@ -47,7 +47,7 @@ namespace AzToolsFramework setMouseTracking(true); connect(this, &QTableView::customContextMenuRequested, this, &AssetBrowserTableView::OnContextMenu); - connect(m_scTimer, &QTimer::timeout, this, &AssetBrowserTableView::OnUpdateSCThumbnailsList); + //connect(m_scTimer, &QTimer::timeout, this, &AssetBrowserTableView::OnUpdateSCThumbnailsList); AssetBrowserViewRequestBus::Handler::BusConnect(); AssetBrowserComponentNotificationBus::Handler::BusConnect(); @@ -59,9 +59,9 @@ namespace AzToolsFramework } void AssetBrowserTableView::setModel(QAbstractItemModel* model) { - m_filterModel = qobject_cast(model); - AZ_Assert(m_filterModel, "Expecting AssetBrowserTableModel"); - m_sourceModel = qobject_cast(m_filterModel->sourceModel()); + m_tableModel = qobject_cast(model); + AZ_Assert(m_tableModel, "Expecting AssetBrowserTableModel"); + m_sourceFilterModel = qobject_cast(m_tableModel->sourceModel()); QTableView::setModel(model); } void AssetBrowserTableView::SetName(const QString& name) @@ -76,14 +76,14 @@ namespace AzToolsFramework } AZStd::vector AssetBrowserTableView::GetSelectedAssets() const { - QModelIndexList sourceIndexes{}; - //for (const auto& index : selectedIndexes()) - //{ - // sourceIndexes.push_back(m_sourceModel->mapToSource(index)); - //} + QModelIndexList sourceIndexes; + for (const auto& index : selectedIndexes()) + { + sourceIndexes.push_back(m_sourceFilterModel->mapToSource(m_tableModel->mapToSource(index))); + } AZStd::vector entries; - //AssetBrowserModel::SourceIndexesToAssetDatabaseEntries(sourceIndexes, entries); + AssetBrowserModel::SourceIndexesToAssetDatabaseEntries(sourceIndexes, entries); return entries; } void AssetBrowserTableView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) @@ -124,7 +124,7 @@ namespace AzToolsFramework { emit ClearStringFilter(); emit ClearTypeFilter(); - m_sourceModel->FilterUpdatedSlotImmediate(); + m_sourceFilterModel->FilterUpdatedSlotImmediate(); } void AssetBrowserTableView::Update() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h index aef7353334..d1bab70104 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h @@ -63,13 +63,10 @@ namespace AzToolsFramework private: QString m_name; - QPointer m_filterModel = nullptr; - QPointer m_sourceModel = nullptr; + QPointer m_tableModel = nullptr; + QPointer m_sourceFilterModel = nullptr; EntryDelegate* m_delegate = nullptr; - QTimer* m_scTimer = nullptr; - const int m_scUpdateInterval = 100; - private Q_SLOTS: void OnContextMenu(const QPoint& point); //! Get all visible source entries and place them in a queue to update their source control status diff --git a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index f415e0a135..b59190d9a9 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -102,7 +102,7 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) this, &AzAssetBrowserWindow::SelectionChangedSlot); connect(m_ui->m_assetBrowserTreeViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem); - connect(m_ui->m_assetBrowserTableViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem); + connect(m_ui->m_assetBrowserTableViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItemTableModel); connect(m_ui->m_assetBrowserTreeViewWidget, &AssetBrowserTreeView::ClearStringFilter, m_ui->m_searchWidget, &SearchWidget::ClearStringFilter); @@ -242,6 +242,43 @@ void AzAssetBrowserWindow::DoubleClickedItem([[maybe_unused]] const QModelIndex& } +void AzAssetBrowserWindow::DoubleClickedItemTableModel([[maybe_unused]] const QModelIndex& element) +{ + using namespace AzToolsFramework; + using namespace AzToolsFramework::AssetBrowser; + // assumption: Double clicking an item selects it before telling us we double clicked it. + auto selectedAssets = m_ui->m_assetBrowserTableViewWidget->GetSelectedAssets(); + for (const AssetBrowserEntry* entry : selectedAssets) + { + AZ::Data::AssetId assetIdToOpen; + AZStd::string fullFilePath; + + if (const ProductAssetBrowserEntry* productEntry = azrtti_cast(entry)) + { + assetIdToOpen = productEntry->GetAssetId(); + fullFilePath = entry->GetFullPath(); + } + else if (const SourceAssetBrowserEntry* sourceEntry = azrtti_cast(entry)) + { + // manufacture an empty AssetID with the source's UUID + assetIdToOpen = AZ::Data::AssetId(sourceEntry->GetSourceUuid(), 0); + fullFilePath = entry->GetFullPath(); + } + + bool handledBySomeone = false; + if (assetIdToOpen.IsValid()) + { + AssetBrowserInteractionNotificationBus::Broadcast( + &AssetBrowserInteractionNotifications::OpenAssetInAssociatedEditor, assetIdToOpen, handledBySomeone); + } + + if (!handledBySomeone && !fullFilePath.empty()) + { + AzAssetBrowserRequestHandler::OpenWithOS(fullFilePath); + } + } +} + void AzAssetBrowserWindow::SwitchDisplayView(const int state) { m_ui->m_assetBrowserTableViewWidget->setVisible(state); diff --git a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h index 801af3e2a8..86d81ad873 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h @@ -56,7 +56,6 @@ private: QScopedPointer m_ui; QScopedPointer m_filterModel; QScopedPointer m_tableModel; - //QScopedPointer m_tableFilterModel; AzToolsFramework::AssetBrowser::AssetBrowserModel* m_assetBrowserModel; void UpdatePreview() const; @@ -64,6 +63,7 @@ private: private Q_SLOTS: void SelectionChangedSlot(const QItemSelection& selected, const QItemSelection& deselected) const; void DoubleClickedItem(const QModelIndex& element); + void DoubleClickedItemTableModel(const QModelIndex& element); void SwitchDisplayView(const int state); };