From 65550d3f1c3ec5d011485a8d9fdbe973b6789710 Mon Sep 17 00:00:00 2001 From: igarri Date: Mon, 10 May 2021 10:39:01 +0100 Subject: [PATCH] Entries updating on the table view --- .../AssetBrowser/AssetBrowserFilterModel.cpp | 4 +- .../AssetBrowser/AssetBrowserModel.cpp | 3 +- .../AssetBrowser/AssetBrowserTableModel.cpp | 264 ++++++++++++++++-- .../AssetBrowser/AssetBrowserTableModel.h | 79 +++++- .../Views/AssetBrowserTableView.cpp | 48 +++- .../Views/AssetBrowserTableView.h | 22 +- .../AzAssetBrowser/AzAssetBrowserWindow.cpp | 27 +- .../AzAssetBrowser/AzAssetBrowserWindow.h | 2 + 8 files changed, 395 insertions(+), 54 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp index 42498eb76e..5e9203cc29 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp @@ -31,7 +31,8 @@ namespace AzToolsFramework AssetBrowserFilterModel::AssetBrowserFilterModel(QObject* parent) : QSortFilterProxyModel(parent) { - m_showColumn.insert(AssetBrowserModel::m_column); + m_showColumn.insert(static_cast(AssetBrowserEntry::Column::DisplayName)); + m_showColumn.insert(static_cast(AssetBrowserEntry::Column::Path)); m_collator.setNumericMode(true); AssetBrowserComponentNotificationBus::Handler::BusConnect(); } @@ -163,7 +164,6 @@ namespace AzToolsFramework { m_alreadyRecomputingFilters = false; FilterUpdatedSlotImmediate(); - //beginInsertRows() } ); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp index d7c0164435..1101e11f3a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserModel.cpp @@ -144,7 +144,8 @@ namespace AzToolsFramework if (parent.isValid()) { if ((parent.column() != static_cast(AssetBrowserEntry::Column::DisplayName)) && - (parent.column() != static_cast(AssetBrowserEntry::Column::Name))) + (parent.column() != static_cast(AssetBrowserEntry::Column::Name)) && + (parent.column() != static_cast(AssetBrowserEntry::Column::Path))) { return 0; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp index e7a49b2d99..7480d17d47 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp @@ -1,4 +1,16 @@ -#include "AssetBrowserTableModel.h" +#include +#include +#include +#include +AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") + +#include +#include + +#include +#include +#include +AZ_POP_DISABLE_WARNING namespace AzToolsFramework { namespace AssetBrowser @@ -6,9 +18,24 @@ namespace AzToolsFramework AssetBrowserTableModel::AssetBrowserTableModel(QObject* parent /* = nullptr */) : QSortFilterProxyModel(parent) { - m_showColumn.insert(static_cast(AssetBrowserEntry::Column::DisplayName)); - m_showColumn.insert(static_cast(AssetBrowserEntry::Column::Path)); + sort(0); + setDynamicSortFilter(false); + setRecursiveFilteringEnabled(true); + AssetBrowserComponentNotificationBus::Handler::BusConnect(); } + AssetBrowserTableModel::~AssetBrowserTableModel() + { + AssetBrowserComponentNotificationBus::Handler::BusDisconnect(); + } + void AssetBrowserTableModel::OnAssetBrowserComponentReady() + { + BuildMap(sourceModel()); + } + void AssetBrowserTableModel::setSourceModel(QAbstractItemModel* sourceModel) + { + QSortFilterProxyModel::setSourceModel(sourceModel); + } + QModelIndex AssetBrowserTableModel::mapToSource(const QModelIndex& proxyIndex) const { Q_ASSERT(!proxyIndex.isValid() || proxyIndex.model() == this); @@ -18,6 +45,11 @@ namespace AzToolsFramework } return m_indexMap[proxyIndex.row()]; } + QModelIndex AssetBrowserTableModel::parent(const QModelIndex& child) const + { + AZ_UNUSED(child); + return QModelIndex(); + } QModelIndex AssetBrowserTableModel::mapFromSource(const QModelIndex& sourceIndex) const { Q_ASSERT(!sourceIndex.isValid() || sourceIndex.model() == sourceModel()); @@ -27,16 +59,14 @@ namespace AzToolsFramework } return createIndex(m_rowMap[sourceIndex], sourceIndex.column(), sourceIndex.internalPointer()); } - //QModelIndex AssetBrowserTableModel::index(int row, int column, const QModelIndex& parent) const - //{ - // //return parent.isValid() ? QModelIndex() : createIndex(row, column , m_indexMap[row].internalPointer()); - // if (!parent.isValid()) - // { - // QModelIndex(); - // } - // return createIndex(row, column, m_indexMap[row].internalPointer()); - //} + QModelIndex AssetBrowserTableModel::index(int row, int column, const QModelIndex& parent) const + { + /*AZ_UNUSED(row); + AZ_UNUSED(column);*/ + return parent.isValid() ? QModelIndex() : createIndex(row, column, m_indexMap[row].internalPointer()); + } + QVariant AssetBrowserTableModel::data(const QModelIndex& index, int role) const { //AZ_UNUSED(role); @@ -47,34 +77,67 @@ namespace AzToolsFramework AssetBrowserEntry* entry = GetAssetEntry(sourceIndex); // static_cast(sourceIndex.internalPointer()); if (entry == nullptr) { - AZ_Assert(false, "ERROR - index internal pointer not pointing to an AssetEntry. Tree provided by the AssetBrowser invalid?"); + AZ_Assert( + false, "ERROR - index internal pointer not pointing to an AssetEntry. Tree provided by the AssetBrowser invalid?"); return Qt::PartiallyChecked; } - return sourceIndex.data(role); //return entry->data(index.column()); + return sourceIndex.data(role); // return entry->data(index.column()); //return QVariant::fromValue(entry); + //AZ_UNUSED(role); + //if (index.isValid()) + //{ + // ////if (role == AssetBrowserModel::EntryRole) + // //{ + // QModelIndex modelIndex = mapFromSource(index); + // auto assetEntry = static_cast(index.internalPointer()); + // return QVariant::fromValue(assetEntry); + //} + //return QVariant(); // AzToolsFramework::AssetBrowser::AssetBrowserModel::data(index, role); } - bool AssetBrowserTableModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const + + + int AssetBrowserTableModel::rowCount(const QModelIndex& parent) const { - AZ_UNUSED(source_row); - AZ_UNUSED(source_parent); - return true; - } - bool AssetBrowserTableModel::filterAcceptsColumn(int source_column, const QModelIndex&) const - { - return m_showColumn.find(source_column) != m_showColumn.end(); + return !parent.isValid() ? m_rowMap.size() : 0; } + int AssetBrowserTableModel::BuildMap(const QAbstractItemModel* model, const QModelIndex& parent, int row) { + //int rows = model ? model->rowCount(parent) : 0; + //for (int i = 0; i < rows; ++i) + //{ + // auto index = model->index(i, 0, parent); + // //if (!model->hasChildren(index)) + // //{ + // beginInsertRows(parent, row, row); + // m_rowMap[index] = row; + // m_indexMap[row] = index; + // endInsertRows(); + // Q_EMIT dataChanged(parent, parent); + // row = row + 1; + // //} + // if (model->hasChildren(index)) + // { + // row = BuildMap(model, index, row); + // } + //} + //return row; int rows = model ? model->rowCount(parent) : 0; for (int i = 0; i < rows; ++i) { auto index = model->index(i, 0, parent); + if (model->hasChildren(index) == false) + { + beginInsertRows(parent, row, row); + m_rowMap[index] = row; + m_indexMap[row] = index; + endInsertRows(); + Q_EMIT dataChanged(parent, parent); + row = row + 1; + } - m_rowMap[index] = row; - m_indexMap[row] = index; - row = row + 1; if (model->hasChildren(index)) { row = BuildMap(model, index, row); @@ -96,8 +159,159 @@ namespace AzToolsFramework } void AssetBrowserTableModel::UpdateMap() { + m_indexMap.clear(); + m_rowMap.clear(); BuildMap(sourceModel()); } + + //---------------------------------------AssetBrowserTableFilterModel-------------------------------------------- + AssetBrowserTableFilterModel::AssetBrowserTableFilterModel(QObject* parent) + : QSortFilterProxyModel(parent) + { + m_showColumn.insert(static_cast(AssetBrowserEntry::Column::DisplayName)); + m_showColumn.insert(static_cast(AssetBrowserEntry::Column::Path)); + AssetBrowserComponentNotificationBus::Handler::BusConnect(); + } + + AssetBrowserTableFilterModel::~AssetBrowserTableFilterModel() + { + AssetBrowserComponentNotificationBus::Handler::BusDisconnect(); + } + + void AssetBrowserTableFilterModel::setSourceModel(QAbstractItemModel* sourceModel) + { + QSortFilterProxyModel::setSourceModel(sourceModel); + } + + void AssetBrowserTableFilterModel::SetFilter(FilterConstType filter) + { + connect(filter.data(), &AssetBrowserEntryFilter::updatedSignal, this, &AssetBrowserTableFilterModel::filterUpdatedSlot); + m_filter = filter; + m_invalidateFilter = true; + // asset browser entries are not guaranteed to have populated when the filter is set, delay filtering until they are + bool isAssetBrowserComponentReady = false; + AssetBrowserComponentRequestBus::BroadcastResult(isAssetBrowserComponentReady, &AssetBrowserComponentRequests::AreEntriesReady); + if (isAssetBrowserComponentReady) + { + OnAssetBrowserComponentReady(); + } + } + + void AssetBrowserTableFilterModel::FilterUpdatedSlotImmediate() + { + auto compFilter = qobject_cast>(m_filter); + if (compFilter) + { + auto& subFilters = compFilter->GetSubFilters(); + auto it = AZStd::find_if(subFilters.begin(), subFilters.end(), [subFilters](FilterConstType filter) -> bool { + auto assetTypeFilter = qobject_cast>(filter); + return !assetTypeFilter.isNull(); + }); + if (it != subFilters.end()) + { + m_assetTypeFilter = qobject_cast>(*it); + } + it = AZStd::find_if(subFilters.begin(), subFilters.end(), [subFilters](FilterConstType filter) -> bool { + auto stringFilter = qobject_cast>(filter); + return !stringFilter.isNull(); + }); + if (it != subFilters.end()) + { + m_stringFilter = qobject_cast>(*it); + } + } + invalidateFilter(); + Q_EMIT filterChanged(); + } + + void AssetBrowserTableFilterModel::OnAssetBrowserComponentReady() + { + if (m_invalidateFilter) + { + invalidateFilter(); + m_invalidateFilter = false; + } + Q_EMIT entriesUpdated(); + } + + bool AssetBrowserTableFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const + { + AZ_UNUSED(source_row); + AZ_UNUSED(source_parent); + QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + if (!idx.isValid()) + { + return false; + } + // no filter present, every entry is visible + if (!m_filter) + { + return true; + } + + //// the entry is the internal pointer of the index + //auto entry = static_cast(idx.internalPointer()); + + //if (entry) + //{ + // // root should return true even if its not displayed in the treeview + // if (entry && entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Root) + // { + // return true; + // } + // return m_filter->Match(entry); + //} + return true; + } + + bool AssetBrowserTableFilterModel::filterAcceptsColumn(int source_column, const QModelIndex&) const + { + return m_showColumn.find(source_column) != m_showColumn.end(); + } + + bool AssetBrowserTableFilterModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const + { + if (source_left.column() == source_right.column()) + { + QVariant leftData = sourceModel()->data(source_left, AssetBrowserModel::Roles::EntryRole); + QVariant rightData = sourceModel()->data(source_right, AssetBrowserModel::Roles::EntryRole); + if (leftData.canConvert() && rightData.canConvert()) + { + auto leftEntry = qvariant_cast(leftData); + auto rightEntry = qvariant_cast(rightData); + + // folders should always come first + if (azrtti_istypeof(leftEntry) && + azrtti_istypeof(rightEntry)) + { + return false; + } + if (azrtti_istypeof(leftEntry) && + azrtti_istypeof(rightEntry)) + { + return true; + } + + // if both entries are of same type, sort alphabetically + return m_collator.compare(leftEntry->GetDisplayName(), rightEntry->GetDisplayName()) > 0; + } + } + return QSortFilterProxyModel::lessThan(source_left, source_right); + } + + void AssetBrowserTableFilterModel::filterUpdatedSlot() + { + if (!m_alreadyRecomputingFilters) + { + m_alreadyRecomputingFilters = true; + // de-bounce it, since we may get many filter updates all at once. + QTimer::singleShot(0, this, [this]() { + m_alreadyRecomputingFilters = false; + FilterUpdatedSlotImmediate(); + }); + } + } + } // namespace AssetBrowser } // namespace AzToolsFramework #include "AssetBrowser/moc_AssetBrowserTableModel.cpp" diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h index ef87ad8512..8ffd1a469e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h @@ -21,32 +21,87 @@ namespace AzToolsFramework { class AssetBrowserTableModel : public QSortFilterProxyModel + , public AssetBrowserComponentNotificationBus::Handler { Q_OBJECT + public: AZ_CLASS_ALLOCATOR(AssetBrowserTableModel, AZ::SystemAllocator, 0); explicit AssetBrowserTableModel(QObject* parent = nullptr); - - QModelIndex mapToSource(const QModelIndex &proxyIndex) const override; - QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override; - //QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; + ~AssetBrowserTableModel(); + //////////////////////////////////////////////////////////////////// + // AssetBrowserComponentNotificationBus + //////////////////////////////////////////////////////////////////// + void OnAssetBrowserComponentReady() override; + void setSourceModel(QAbstractItemModel* sourceModel) override; + //////////////////////////////////////////////////////////////////// + // QSortFilterProxyModel + QModelIndex mapToSource(const QModelIndex& proxyIndex) const override; + QModelIndex mapFromSource(const QModelIndex& sourceIndex) const override; + QModelIndex parent(const QModelIndex& child) const override; + QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; public Q_SLOTS: void UpdateMap(); - protected: - bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override; - bool filterAcceptsColumn(int source_column, const QModelIndex& /*source_parent*/) const override; + int rowCount(const QModelIndex& parent = QModelIndex()) const override; + //QVariant headerData(int section, Qt::Orientation orientation, int role /* = Qt::DisplayRole */) const override; + //////////////////////////////////////////////////////////////////// private: - int BuildMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0); AssetBrowserEntry* GetAssetEntry(QModelIndex index) const; - + int BuildMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0); private: - AZStd::fixed_unordered_set(AssetBrowserEntry::Column::Count)> m_showColumn; QMap m_indexMap; QMap m_rowMap; }; - } -} + + class AssetBrowserTableFilterModel + : public QSortFilterProxyModel + , public AssetBrowserComponentNotificationBus::Handler + { + Q_OBJECT + public: + explicit AssetBrowserTableFilterModel(QObject* parent = nullptr); + ~AssetBrowserTableFilterModel(); + + void setSourceModel(QAbstractItemModel* sourceModel) override; + // asset type filtering + void SetFilter(FilterConstType filter); + void FilterUpdatedSlotImmediate(); + + ////////////////////////////////////////////////////////////////////////// + // AssetBrowserComponentNotificationBus + ////////////////////////////////////////////////////////////////////////// + void OnAssetBrowserComponentReady() override; + + Q_SIGNALS: + void filterChanged(); + void entriesUpdated(); + + ////////////////////////////////////////////////////////////////////////// + // QSortFilterProxyModel + protected: + bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override; + bool filterAcceptsColumn(int source_column, const QModelIndex& /*source_parent*/) const override; + bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const override; + ////////////////////////////////////////////////////////////////////////// + + public Q_SLOTS: + void filterUpdatedSlot(); + + private: + AZStd::fixed_unordered_set(AssetBrowserEntry::Column::Count)> m_showColumn; + bool m_alreadyRecomputingFilters = false; + // asset source name match filter + FilterConstType m_filter; + AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // 4251: class '...' needs to have dll-interface to be used by clients of class '...' + QWeakPointer m_stringFilter; + QWeakPointer m_assetTypeFilter; + QCollator m_collator; // cache the collator as its somewhat expensive to constantly create and destroy one. + AZ_POP_DISABLE_WARNING + bool m_invalidateFilter = false; + }; + } // namespace AssetBrowser +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp index 927deb0039..aa35d99894 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp @@ -41,13 +41,13 @@ namespace AzToolsFramework { setSortingEnabled(true); setItemDelegate(m_delegate); - // header()->hide(); + //header()->hide(); setContextMenuPolicy(Qt::CustomContextMenu); setMouseTracking(true); connect(this, &QTableView::customContextMenuRequested, this, &AssetBrowserTableView::OnContextMenu); - //connect(m_scTimer, &QTimer::timeout, this, &AssetBrowserTreeView::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_sourceModel = qobject_cast(model); - AZ_Assert(m_sourceModel, "Expecting AssetBrowserTableModel"); - m_sourceFilterModel = qobject_cast(m_sourceModel->sourceModel()); + m_filterModel = qobject_cast(model); + AZ_Assert(m_filterModel, "Expecting AssetBrowserTableModel"); + m_sourceModel = qobject_cast(m_filterModel->sourceModel()); QTableView::setModel(model); } void AssetBrowserTableView::SetName(const QString& name) @@ -76,9 +76,40 @@ namespace AzToolsFramework } AZStd::vector AssetBrowserTableView::GetSelectedAssets() const { - return AZStd::vector(); - } + QModelIndexList sourceIndexes{}; + //for (const auto& index : selectedIndexes()) + //{ + // sourceIndexes.push_back(m_sourceModel->mapToSource(index)); + //} + AZStd::vector entries; + //AssetBrowserModel::SourceIndexesToAssetDatabaseEntries(sourceIndexes, entries); + return entries; + } + void AssetBrowserTableView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) + { + AZ_UNUSED(selected); + AZ_UNUSED(deselected); + } + void AssetBrowserTableView::rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) + { + // if selected entry is being removed, clear selection so not to select (and attempt to preview) other entries potentially + // marked for deletion + if (selectionModel() && selectionModel()->selectedIndexes().size() == 1) + { + QModelIndex selectedIndex = selectionModel()->selectedIndexes().first(); + QModelIndex parentSelectedIndex = selectedIndex.parent(); + if (parentSelectedIndex == parent && selectedIndex.row() >= start && selectedIndex.row() <= end) + { + selectionModel()->clear(); + } + } + QTableView::rowsAboutToBeRemoved(parent, start, end); + } + void AssetBrowserTableView::OnUpdateSCThumbnailsList() + { + + } void AssetBrowserTableView::SelectProduct(AZ::Data::AssetId assetID) { AZ_UNUSED(assetID); @@ -91,6 +122,9 @@ namespace AzToolsFramework void AssetBrowserTableView::ClearFilter() { + emit ClearStringFilter(); + emit ClearTypeFilter(); + m_sourceModel->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 bec24cca9b..aef7353334 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h @@ -48,18 +48,32 @@ namespace AzToolsFramework void OnAssetBrowserComponentReady() override; ////////////////////////////////////////////////////////////////////////// - private Q_SLOTS: - void OnContextMenu(const QPoint& point); + + Q_SIGNALS: + void selectionChangedSignal(const QItemSelection& selected, const QItemSelection& deselected); + void ClearStringFilter(); + void ClearTypeFilter(); + + protected Q_SLOTS: + void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) override; + void rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) override; //! Get all visible source entries and place them in a queue to update their source control status //void OnUpdateSCThumbnailsList(); private: QString m_name; - QPointer m_sourceFilterModel = nullptr; - QPointer m_sourceModel = nullptr; + QPointer m_filterModel = nullptr; + QPointer m_sourceModel = 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 + void OnUpdateSCThumbnailsList(); }; } // namespace AssetBrowser } // namespace AzToolsFramework diff --git a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index d67ee0d0ca..fb850f4f26 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -68,6 +68,7 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) , m_ui(new Ui::AzAssetBrowserWindowClass()) , m_filterModel(new AzToolsFramework::AssetBrowser::AssetBrowserFilterModel(parent)) , m_tableModel(new AzToolsFramework::AssetBrowser::AssetBrowserTableModel(parent)) + , m_tableFilterModel(new AzToolsFramework::AssetBrowser::AssetBrowserTableFilterModel(parent)) { m_ui->setupUi(this); m_ui->m_searchWidget->Setup(true, true); @@ -82,12 +83,18 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) m_tableModel->setSourceModel(m_filterModel.data()); //m_tableModel->setSourceModel(m_assetBrowserModel); - m_ui->m_assetBrowserTreeViewWidget->setModel(m_filterModel.data()); - m_ui->m_assetBrowserTableViewWidget->setModel(m_tableModel.data()); + m_tableFilterModel->setSourceModel(m_tableModel.data()); + m_tableFilterModel->SetFilter(m_ui->m_searchWidget->GetFilter()); + + m_ui->m_assetBrowserTreeViewWidget->setModel(m_filterModel.data()); + m_ui->m_assetBrowserTreeViewWidget->hideColumn(static_cast(AssetBrowserEntry::Column::Path)); + + //m_ui->m_assetBrowserTableViewWidget->setModel(m_tableFilterModel.data()); + m_ui->m_assetBrowserTableViewWidget->setModel(m_tableModel.data()); m_ui->m_assetBrowserTableViewWidget->setVisible(false); - connect(m_filterModel.data(), &AssetBrowserFilterModel::entriesUpdated, m_tableModel.data(), &AssetBrowserTableModel::UpdateMap); + //connect(m_filterModel.data(), &AssetBrowserFilterModel::entriesUpdated, m_tableModel.data(), &AssetBrowserTableModel::UpdateMap); connect(m_ui->m_searchWidget->GetFilter().data(), &AssetBrowserEntryFilter::updatedSignal, m_filterModel.data(), &AssetBrowserFilterModel::filterUpdatedSlot); @@ -97,6 +104,17 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) const bool selectFirstFilteredIndex = false; m_ui->m_assetBrowserTreeViewWidget->UpdateAfterFilter(hasFilter, selectFirstFilteredIndex); }); + + //connect( m_ui->m_searchWidget->GetFilter().data(), &AssetBrowserEntryFilter::updatedSignal, m_tableFilterModel.data(), + // &AssetBrowserTableFilterModel::filterUpdatedSlot); + //connect(m_tableFilterModel.data(), &AssetBrowserTableFilterModel::filterChanged, this, [this]() { + // const bool hasFilter = !m_ui->m_searchWidget->GetFilterString().isEmpty(); + // const bool selectFirstFilteredIndex = false; + // m_ui->m_assetBrowserTableViewWidget->UpdateAfterFilter(hasFilter, selectFirstFilteredIndex); + //}); + + connect(m_filterModel.data(), &AssetBrowserFilterModel::filterChanged, m_tableModel.data(), &AssetBrowserTableModel::UpdateMap); + connect(m_ui->m_assetBrowserTreeViewWidget, &AssetBrowserTreeView::selectionChangedSignal, this, &AzAssetBrowserWindow::SelectionChangedSlot); connect(m_ui->m_assetBrowserTreeViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem); @@ -104,6 +122,9 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) connect(m_ui->m_assetBrowserTreeViewWidget, &AssetBrowserTreeView::ClearStringFilter, m_ui->m_searchWidget, &SearchWidget::ClearStringFilter); connect(m_ui->m_assetBrowserTreeViewWidget, &AssetBrowserTreeView::ClearTypeFilter, m_ui->m_searchWidget, &SearchWidget::ClearTypeFilter); + connect(m_ui->m_assetBrowserTableViewWidget, &AssetBrowserTableView::ClearStringFilter, m_ui->m_searchWidget, &SearchWidget::ClearStringFilter); + connect(m_ui->m_assetBrowserTableViewWidget, &AssetBrowserTableView::ClearTypeFilter, m_ui->m_searchWidget, &SearchWidget::ClearTypeFilter); + m_ui->m_assetBrowserTreeViewWidget->SetName("AssetBrowserTreeView_main"); m_ui->m_assetBrowserTableViewWidget->SetName("AssetBrowserTableView_main"); diff --git a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h index 1a5604b98f..a8a8474ef8 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.h @@ -31,6 +31,7 @@ namespace AzToolsFramework class AssetBrowserFilterModel; class AssetBrowserTableModel; class AssetBrowserModel; + class AssetBrowserTableFilterModel; } } @@ -55,6 +56,7 @@ private: QScopedPointer m_ui; QScopedPointer m_filterModel; QScopedPointer m_tableModel; + QScopedPointer m_tableFilterModel; AzToolsFramework::AssetBrowser::AssetBrowserModel* m_assetBrowserModel; void UpdatePreview() const;