|
|
|
|
@ -25,19 +25,47 @@ namespace AzToolsFramework
|
|
|
|
|
AZ_Assert(
|
|
|
|
|
m_filterModel,
|
|
|
|
|
"Error in AssetBrowserTableModel initialization, class expects source model to be an AssetBrowserFilterModel.");
|
|
|
|
|
connect(sourceModel, &QAbstractItemModel::rowsInserted, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
|
|
|
|
connect(sourceModel, &QAbstractItemModel::rowsRemoved, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
|
|
|
|
connect(sourceModel, &QAbstractItemModel::modelAboutToBeReset, this, &AssetBrowserTableModel::beginResetModel);
|
|
|
|
|
connect(
|
|
|
|
|
sourceModel, &QAbstractItemModel::modelReset, this,
|
|
|
|
|
[this]()
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
QSignalBlocker sb(this);
|
|
|
|
|
UpdateTableModelMaps();
|
|
|
|
|
}
|
|
|
|
|
endResetModel();
|
|
|
|
|
});
|
|
|
|
|
connect(sourceModel, &QAbstractItemModel::layoutChanged, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
|
|
|
|
connect(sourceModel, &QAbstractItemModel::dataChanged, this, &AssetBrowserTableModel::SourceDataChanged);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QSortFilterProxyModel::setSourceModel(sourceModel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex AssetBrowserTableModel::mapToSource(const QModelIndex& proxyIndex) const
|
|
|
|
|
{
|
|
|
|
|
Q_ASSERT(!proxyIndex.isValid() || proxyIndex.model() == this);
|
|
|
|
|
if (!proxyIndex.isValid())
|
|
|
|
|
if (!proxyIndex.isValid() || !m_indexMap.contains(proxyIndex.row()))
|
|
|
|
|
{
|
|
|
|
|
return QModelIndex();
|
|
|
|
|
}
|
|
|
|
|
return m_indexMap[proxyIndex.row()];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex AssetBrowserTableModel::mapFromSource(const QModelIndex& sourceIndex) const
|
|
|
|
|
{
|
|
|
|
|
Q_ASSERT(!sourceIndex.isValid() || sourceIndex.model() == sourceModel());
|
|
|
|
|
if (!sourceIndex.isValid() || !m_rowMap.contains(sourceIndex))
|
|
|
|
|
{
|
|
|
|
|
return QModelIndex();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return createIndex(m_rowMap[sourceIndex], sourceIndex.column());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QVariant AssetBrowserTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
|
|
|
{
|
|
|
|
|
if (role == Qt::DisplayRole && orientation == Qt::Horizontal)
|
|
|
|
|
@ -49,20 +77,8 @@ namespace AzToolsFramework
|
|
|
|
|
|
|
|
|
|
QVariant AssetBrowserTableModel::data(const QModelIndex& index, int role) const
|
|
|
|
|
{
|
|
|
|
|
auto sourceIndex = mapToSource(index);
|
|
|
|
|
if (!sourceIndex.isValid())
|
|
|
|
|
{
|
|
|
|
|
return QVariant();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AssetBrowserEntry* entry = GetAssetEntry(sourceIndex);
|
|
|
|
|
if (entry == nullptr)
|
|
|
|
|
{
|
|
|
|
|
AZ_Assert(false, "AssetBrowserTableModel - QModelIndex does not reference an AssetEntry. Source model is not valid.");
|
|
|
|
|
return QVariant();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sourceIndex.data(role);
|
|
|
|
|
Q_ASSERT(index.isValid() && index.model() == this);
|
|
|
|
|
return sourceModel()->data(mapToSource(index), role);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex AssetBrowserTableModel::parent([[maybe_unused]] const QModelIndex& child) const
|
|
|
|
|
@ -76,14 +92,28 @@ namespace AzToolsFramework
|
|
|
|
|
return QModelIndex();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AssetBrowserTableModel::SourceDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
|
|
|
|
{
|
|
|
|
|
for (int row = topLeft.row(); row <= bottomRight.row(); ++row)
|
|
|
|
|
{
|
|
|
|
|
if (!m_indexMap.contains(row))
|
|
|
|
|
{
|
|
|
|
|
UpdateTableModelMaps();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex AssetBrowserTableModel::index(int row, int column, const QModelIndex& parent) const
|
|
|
|
|
{
|
|
|
|
|
Q_ASSERT(!parent.isValid());
|
|
|
|
|
|
|
|
|
|
return parent.isValid() ? QModelIndex() : createIndex(row, column, m_indexMap[row].internalPointer());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int AssetBrowserTableModel::rowCount(const QModelIndex& parent) const
|
|
|
|
|
{
|
|
|
|
|
return !parent.isValid() ? m_indexMap.size() : 0;
|
|
|
|
|
return !parent.isValid() ? m_indexMap.size() : sourceModel()->rowCount(parent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int AssetBrowserTableModel::BuildTableModelMap(
|
|
|
|
|
@ -103,13 +133,11 @@ namespace AzToolsFramework
|
|
|
|
|
QModelIndex index = model->index(currentRow, 0, parent);
|
|
|
|
|
AssetBrowserEntry* entry = GetAssetEntry(m_filterModel->mapToSource(index));
|
|
|
|
|
// We only want to see the source assets.
|
|
|
|
|
if (entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source)
|
|
|
|
|
if (entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source ||
|
|
|
|
|
entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Product)
|
|
|
|
|
{
|
|
|
|
|
beginInsertRows(parent, row, row);
|
|
|
|
|
m_indexMap[row] = index;
|
|
|
|
|
endInsertRows();
|
|
|
|
|
|
|
|
|
|
Q_EMIT dataChanged(index, index);
|
|
|
|
|
m_rowMap[index] = row;
|
|
|
|
|
++row;
|
|
|
|
|
++m_displayedItemsCounter;
|
|
|
|
|
}
|
|
|
|
|
@ -143,12 +171,8 @@ namespace AzToolsFramework
|
|
|
|
|
void AssetBrowserTableModel::UpdateTableModelMaps()
|
|
|
|
|
{
|
|
|
|
|
emit layoutAboutToBeChanged();
|
|
|
|
|
if (!m_indexMap.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
beginRemoveRows(m_indexMap.first(), m_indexMap.first().row(), m_indexMap.last().row());
|
|
|
|
|
m_indexMap.clear();
|
|
|
|
|
endRemoveRows();
|
|
|
|
|
}
|
|
|
|
|
m_indexMap.clear();
|
|
|
|
|
m_rowMap.clear();
|
|
|
|
|
|
|
|
|
|
AzToolsFramework::EditorSettingsAPIBus::BroadcastResult(
|
|
|
|
|
m_numberOfItemsDisplayed, &AzToolsFramework::EditorSettingsAPIBus::Handler::GetMaxNumberOfItemsShownInSearchView);
|
|
|
|
|
|