Entries updating on the table view
This commit is contained in:
+2
-2
@@ -31,7 +31,8 @@ namespace AzToolsFramework
|
||||
AssetBrowserFilterModel::AssetBrowserFilterModel(QObject* parent)
|
||||
: QSortFilterProxyModel(parent)
|
||||
{
|
||||
m_showColumn.insert(AssetBrowserModel::m_column);
|
||||
m_showColumn.insert(static_cast<int>(AssetBrowserEntry::Column::DisplayName));
|
||||
m_showColumn.insert(static_cast<int>(AssetBrowserEntry::Column::Path));
|
||||
m_collator.setNumericMode(true);
|
||||
AssetBrowserComponentNotificationBus::Handler::BusConnect();
|
||||
}
|
||||
@@ -163,7 +164,6 @@ namespace AzToolsFramework
|
||||
{
|
||||
m_alreadyRecomputingFilters = false;
|
||||
FilterUpdatedSlotImmediate();
|
||||
//beginInsertRows()
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -144,7 +144,8 @@ namespace AzToolsFramework
|
||||
if (parent.isValid())
|
||||
{
|
||||
if ((parent.column() != static_cast<int>(AssetBrowserEntry::Column::DisplayName)) &&
|
||||
(parent.column() != static_cast<int>(AssetBrowserEntry::Column::Name)))
|
||||
(parent.column() != static_cast<int>(AssetBrowserEntry::Column::Name)) &&
|
||||
(parent.column() != static_cast<int>(AssetBrowserEntry::Column::Path)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
+239
-25
@@ -1,4 +1,16 @@
|
||||
#include "AssetBrowserTableModel.h"
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/FolderAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/ProductAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/SourceAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Search/Filter.h>
|
||||
AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option")
|
||||
|
||||
#include <AssetBrowser/AssetBrowserTableModel.h>
|
||||
#include <AssetBrowser/AssetBrowserModel.h>
|
||||
|
||||
#include <QCollator>
|
||||
#include <QSharedPointer>
|
||||
#include <QTimer>
|
||||
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<int>(AssetBrowserEntry::Column::DisplayName));
|
||||
m_showColumn.insert(static_cast<int>(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<AssetBrowserEntry*>(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<const AssetBrowserEntry*>(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<int>(AssetBrowserEntry::Column::DisplayName));
|
||||
m_showColumn.insert(static_cast<int>(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<QSharedPointer<const CompositeFilter>>(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<QSharedPointer<const CompositeFilter>>(filter);
|
||||
return !assetTypeFilter.isNull();
|
||||
});
|
||||
if (it != subFilters.end())
|
||||
{
|
||||
m_assetTypeFilter = qobject_cast<QSharedPointer<const CompositeFilter>>(*it);
|
||||
}
|
||||
it = AZStd::find_if(subFilters.begin(), subFilters.end(), [subFilters](FilterConstType filter) -> bool {
|
||||
auto stringFilter = qobject_cast<QSharedPointer<const StringFilter>>(filter);
|
||||
return !stringFilter.isNull();
|
||||
});
|
||||
if (it != subFilters.end())
|
||||
{
|
||||
m_stringFilter = qobject_cast<QSharedPointer<const StringFilter>>(*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<AssetBrowserEntry*>(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<const AssetBrowserEntry*>() && rightData.canConvert<const AssetBrowserEntry*>())
|
||||
{
|
||||
auto leftEntry = qvariant_cast<const AssetBrowserEntry*>(leftData);
|
||||
auto rightEntry = qvariant_cast<const AssetBrowserEntry*>(rightData);
|
||||
|
||||
// folders should always come first
|
||||
if (azrtti_istypeof<const FolderAssetBrowserEntry*>(leftEntry) &&
|
||||
azrtti_istypeof<const SourceAssetBrowserEntry*>(rightEntry))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (azrtti_istypeof<const SourceAssetBrowserEntry*>(leftEntry) &&
|
||||
azrtti_istypeof<const FolderAssetBrowserEntry*>(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"
|
||||
|
||||
+67
-12
@@ -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<int, 3, static_cast<int>(AssetBrowserEntry::Column::Count)> m_showColumn;
|
||||
QMap<int, QModelIndex> m_indexMap;
|
||||
QMap<QModelIndex, int> 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<int, 3, static_cast<int>(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<const StringFilter> m_stringFilter;
|
||||
QWeakPointer<const CompositeFilter> 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
|
||||
|
||||
+41
-7
@@ -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<AssetBrowserTableModel*>(model);
|
||||
AZ_Assert(m_sourceModel, "Expecting AssetBrowserTableModel");
|
||||
m_sourceFilterModel = qobject_cast<AssetBrowserFilterModel*>(m_sourceModel->sourceModel());
|
||||
m_filterModel = qobject_cast<AssetBrowserTableModel*>(model);
|
||||
AZ_Assert(m_filterModel, "Expecting AssetBrowserTableModel");
|
||||
m_sourceModel = qobject_cast<AssetBrowserFilterModel*>(m_filterModel->sourceModel());
|
||||
QTableView::setModel(model);
|
||||
}
|
||||
void AssetBrowserTableView::SetName(const QString& name)
|
||||
@@ -76,9 +76,40 @@ namespace AzToolsFramework
|
||||
}
|
||||
AZStd::vector<AssetBrowserEntry*> AssetBrowserTableView::GetSelectedAssets() const
|
||||
{
|
||||
return AZStd::vector<AssetBrowserEntry*>();
|
||||
}
|
||||
QModelIndexList sourceIndexes{};
|
||||
//for (const auto& index : selectedIndexes())
|
||||
//{
|
||||
// sourceIndexes.push_back(m_sourceModel->mapToSource(index));
|
||||
//}
|
||||
|
||||
AZStd::vector<AssetBrowserEntry*> 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()
|
||||
|
||||
+18
-4
@@ -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<AssetBrowserFilterModel> m_sourceFilterModel = nullptr;
|
||||
QPointer<AssetBrowserTableModel> m_sourceModel = nullptr;
|
||||
QPointer<AssetBrowserTableModel> m_filterModel = nullptr;
|
||||
QPointer<AssetBrowserFilterModel> 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
|
||||
|
||||
@@ -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<int>(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");
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace AzToolsFramework
|
||||
class AssetBrowserFilterModel;
|
||||
class AssetBrowserTableModel;
|
||||
class AssetBrowserModel;
|
||||
class AssetBrowserTableFilterModel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +56,7 @@ 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;
|
||||
|
||||
Reference in New Issue
Block a user