diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp index 5e9203cc29..34f8b97b5a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.cpp @@ -32,7 +32,7 @@ namespace AzToolsFramework : QSortFilterProxyModel(parent) { m_showColumn.insert(static_cast(AssetBrowserEntry::Column::DisplayName)); - m_showColumn.insert(static_cast(AssetBrowserEntry::Column::Path)); + //m_showColumn.insert(static_cast(AssetBrowserEntry::Column::Path)); m_collator.setNumericMode(true); AssetBrowserComponentNotificationBus::Handler::BusConnect(); } @@ -63,7 +63,6 @@ namespace AzToolsFramework invalidateFilter(); m_invalidateFilter = false; } - Q_EMIT entriesUpdated(); } bool AssetBrowserFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.h index 3fff43859f..6cccc53eb6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.h @@ -53,7 +53,6 @@ namespace AzToolsFramework Q_SIGNALS: void filterChanged(); - void entriesUpdated(); ////////////////////////////////////////////////////////////////////////// //QSortFilterProxyModel diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp index b75d3e9400..ce9e97520a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.cpp @@ -7,9 +7,7 @@ AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") #include #include -#include #include -#include AZ_POP_DISABLE_WARNING namespace AzToolsFramework { @@ -18,18 +16,7 @@ namespace AzToolsFramework AssetBrowserTableModel::AssetBrowserTableModel(QObject* parent /* = nullptr */) : QSortFilterProxyModel(parent) { - sort(0); setDynamicSortFilter(false); - setRecursiveFilteringEnabled(true); - AssetBrowserComponentNotificationBus::Handler::BusConnect(); - } - AssetBrowserTableModel::~AssetBrowserTableModel() - { - AssetBrowserComponentNotificationBus::Handler::BusDisconnect(); - } - void AssetBrowserTableModel::OnAssetBrowserComponentReady() - { - //BuildMap(sourceModel()); } void AssetBrowserTableModel::setSourceModel(QAbstractItemModel* sourceModel) { @@ -69,86 +56,68 @@ namespace AzToolsFramework // no filter present, every entry is not visible if (!m_filterModel->GetFilter()) { - return false; + return true; } return true; } 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); auto sourceIndex = mapToSource(index); if (!sourceIndex.isValid()) return QVariant(); - AssetBrowserEntry* entry = GetAssetEntry(sourceIndex); // static_cast(sourceIndex.internalPointer()); + AssetBrowserEntry* entry = GetAssetEntry(sourceIndex); 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 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); - + return sourceIndex.data(role); } - int AssetBrowserTableModel::rowCount(const QModelIndex& parent) const { return !parent.isValid() ? m_rowMap.size() : 0; } + QVariant AssetBrowserTableModel::headerData(int section, Qt::Orientation orientation, int role) const + { + if (role == Qt::DisplayRole && orientation == Qt::Horizontal) + { + switch (section) + { + case static_cast(AssetBrowserEntry::Column::Name): + return QString("Name"); + case static_cast(AssetBrowserEntry::Column::Path): + return QString("Path"); + default: + return QString::number(section); + } + } + return QSortFilterProxyModel::headerData(section, orientation, role); // QVariant(); + } + 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); + QModelIndex 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); + + Q_EMIT dataChanged(index, index); row = row + 1; } @@ -173,12 +142,12 @@ namespace AzToolsFramework } void AssetBrowserTableModel::UpdateMap() { + //Not properly clears the indexes. //m_indexMap.clear(); //m_rowMap.clear(); - + emit layoutAboutToBeChanged(); if (m_indexMap.size() > 0) { - //beginRemoveRows(m_indexMap.first().parent(), m_indexMap.first().row(), m_indexMap.last().row()); for (const auto& key : m_indexMap.keys()) { beginRemoveRows(m_indexMap[key], m_indexMap[key].row(), m_indexMap[key].row()); @@ -186,160 +155,11 @@ namespace AzToolsFramework m_indexMap.remove(key); endRemoveRows(); } - //endRemoveRows(); } BuildMap(sourceModel()); + sort(0); } - - //---------------------------------------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 34cf8432ff..69b8ead7c5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h @@ -1,9 +1,6 @@ #pragma once #if !defined(Q_MOC_RUN) -#include #include -#include - #include #include #include @@ -26,21 +23,15 @@ namespace AzToolsFramework class AssetBrowserTableModel : public QSortFilterProxyModel - , public AssetBrowserComponentNotificationBus::Handler { Q_OBJECT public: AZ_CLASS_ALLOCATOR(AssetBrowserTableModel, AZ::SystemAllocator, 0); explicit AssetBrowserTableModel(QObject* parent = nullptr); - ~AssetBrowserTableModel(); - //////////////////////////////////////////////////////////////////// - // AssetBrowserComponentNotificationBus - //////////////////////////////////////////////////////////////////// - void OnAssetBrowserComponentReady() override; - void setSourceModel(QAbstractItemModel* sourceModel) override; //////////////////////////////////////////////////////////////////// // QSortFilterProxyModel + void setSourceModel(QAbstractItemModel* sourceModel) override; QModelIndex mapToSource(const QModelIndex& proxyIndex) const override; QModelIndex mapFromSource(const QModelIndex& sourceIndex) const override; bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override; @@ -52,7 +43,7 @@ namespace AzToolsFramework void UpdateMap(); protected: int rowCount(const QModelIndex& parent = QModelIndex()) const override; - //QVariant headerData(int section, Qt::Orientation orientation, int role /* = Qt::DisplayRole */) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role /* = Qt::DisplayRole */) const override; //////////////////////////////////////////////////////////////////// private: @@ -63,52 +54,5 @@ namespace AzToolsFramework 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/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index dd4b3b0cad..554c62a251 100644 --- a/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Sandbox/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -68,7 +68,6 @@ 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); @@ -81,21 +80,13 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) m_tableModel->setFilterRole(Qt::DisplayRole); m_tableModel->setSourceModel(m_filterModel.data()); - //m_tableModel->setSourceModel(m_assetBrowserModel); - - //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_ui->m_searchWidget->GetFilter().data(), &AssetBrowserEntryFilter::updatedSignal, m_filterModel.data(), &AssetBrowserFilterModel::filterUpdatedSlot); connect(m_filterModel.data(), &AssetBrowserFilterModel::filterChanged, this, [this]() @@ -105,20 +96,15 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) 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); + connect(m_ui->m_assetBrowserTableViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem); + + 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);