Selecting correct indexes from Asset Browser Model

This commit is contained in:
igarri
2021-05-12 12:20:23 +01:00
parent 80684b383b
commit c1e21185b4
4 changed files with 52 additions and 18 deletions
@@ -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<AssetBrowserTableModel*>(model);
AZ_Assert(m_filterModel, "Expecting AssetBrowserTableModel");
m_sourceModel = qobject_cast<AssetBrowserFilterModel*>(m_filterModel->sourceModel());
m_tableModel = qobject_cast<AssetBrowserTableModel*>(model);
AZ_Assert(m_tableModel, "Expecting AssetBrowserTableModel");
m_sourceFilterModel = qobject_cast<AssetBrowserFilterModel*>(m_tableModel->sourceModel());
QTableView::setModel(model);
}
void AssetBrowserTableView::SetName(const QString& name)
@@ -76,14 +76,14 @@ namespace AzToolsFramework
}
AZStd::vector<AssetBrowserEntry*> 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<AssetBrowserEntry*> 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()
@@ -63,13 +63,10 @@ namespace AzToolsFramework
private:
QString m_name;
QPointer<AssetBrowserTableModel> m_filterModel = nullptr;
QPointer<AssetBrowserFilterModel> m_sourceModel = nullptr;
QPointer<AssetBrowserTableModel> m_tableModel = nullptr;
QPointer<AssetBrowserFilterModel> 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
@@ -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<const ProductAssetBrowserEntry*>(entry))
{
assetIdToOpen = productEntry->GetAssetId();
fullFilePath = entry->GetFullPath();
}
else if (const SourceAssetBrowserEntry* sourceEntry = azrtti_cast<const SourceAssetBrowserEntry*>(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);
@@ -56,7 +56,6 @@ private:
QScopedPointer<Ui::AzAssetBrowserWindowClass> m_ui;
QScopedPointer<AzToolsFramework::AssetBrowser::AssetBrowserFilterModel> m_filterModel;
QScopedPointer<AzToolsFramework::AssetBrowser::AssetBrowserTableModel> m_tableModel;
//QScopedPointer<AzToolsFramework::AssetBrowser::AssetBrowserTableFilterModel> 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);
};