Working base
This commit is contained in:
+2
@@ -62,6 +62,7 @@ namespace AzToolsFramework
|
||||
invalidateFilter();
|
||||
m_invalidateFilter = false;
|
||||
}
|
||||
Q_EMIT entriesUpdated();
|
||||
}
|
||||
|
||||
bool AssetBrowserFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
|
||||
@@ -162,6 +163,7 @@ namespace AzToolsFramework
|
||||
{
|
||||
m_alreadyRecomputingFilters = false;
|
||||
FilterUpdatedSlotImmediate();
|
||||
//beginInsertRows()
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
+1
@@ -53,6 +53,7 @@ namespace AzToolsFramework
|
||||
|
||||
Q_SIGNALS:
|
||||
void filterChanged();
|
||||
void entriesUpdated();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//QSortFilterProxyModel
|
||||
|
||||
+80
-14
@@ -6,31 +6,97 @@ 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));
|
||||
}
|
||||
QModelIndex AssetBrowserTableModel::mapToSource(const QModelIndex& proxyIndex) const
|
||||
{
|
||||
AZ_UNUSED(proxyIndex);
|
||||
return QModelIndex();
|
||||
Q_ASSERT(!proxyIndex.isValid() || proxyIndex.model() == this);
|
||||
if (!proxyIndex.isValid())
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
return m_indexMap[proxyIndex.row()];
|
||||
}
|
||||
QModelIndex AssetBrowserTableModel::mapFromSource(const QModelIndex& sourceIndex) const
|
||||
{
|
||||
AZ_UNUSED(sourceIndex);
|
||||
return QModelIndex();
|
||||
Q_ASSERT(!sourceIndex.isValid() || sourceIndex.model() == sourceModel());
|
||||
if (!sourceIndex.isValid())
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
return createIndex(m_rowMap[sourceIndex], sourceIndex.column(), sourceIndex.internalPointer());
|
||||
}
|
||||
QModelIndex AssetBrowserTableModel::index(int row, int column, const QModelIndex& parent) const
|
||||
{
|
||||
AZ_UNUSED(row);
|
||||
AZ_UNUSED(column);
|
||||
AZ_UNUSED(parent);
|
||||
//QModelIndex AssetBrowserTableModel::index(int row, int column, const QModelIndex& parent) const
|
||||
//{
|
||||
|
||||
return QModelIndex();
|
||||
}
|
||||
// //return parent.isValid() ? QModelIndex() : createIndex(row, column , m_indexMap[row].internalPointer());
|
||||
// if (!parent.isValid())
|
||||
// {
|
||||
// QModelIndex();
|
||||
// }
|
||||
// return createIndex(row, column, m_indexMap[row].internalPointer());
|
||||
//}
|
||||
QVariant AssetBrowserTableModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
AZ_UNUSED(index);
|
||||
AZ_UNUSED(role);
|
||||
//AZ_UNUSED(role);
|
||||
auto sourceIndex = mapToSource(index);
|
||||
if (!sourceIndex.isValid())
|
||||
return QVariant();
|
||||
|
||||
return QVariant();
|
||||
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?");
|
||||
return Qt::PartiallyChecked;
|
||||
}
|
||||
|
||||
return sourceIndex.data(role); //return entry->data(index.column());
|
||||
//return QVariant::fromValue(entry);
|
||||
|
||||
}
|
||||
bool AssetBrowserTableModel::filterAcceptsRow(int source_row, const QModelIndex& source_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();
|
||||
}
|
||||
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);
|
||||
|
||||
m_rowMap[index] = row;
|
||||
m_indexMap[row] = index;
|
||||
row = row + 1;
|
||||
if (model->hasChildren(index))
|
||||
{
|
||||
row = BuildMap(model, index, row);
|
||||
}
|
||||
}
|
||||
return row;
|
||||
}
|
||||
AssetBrowserEntry* AssetBrowserTableModel::GetAssetEntry(QModelIndex index) const
|
||||
{
|
||||
if (index.isValid())
|
||||
{
|
||||
return static_cast<AssetBrowserEntry*>(index.internalPointer());
|
||||
}
|
||||
else
|
||||
{
|
||||
AZ_Error("AssetBrowser", false, "Invalid Source Index provided to GetAssetEntry.");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
void AssetBrowserTableModel::UpdateMap()
|
||||
{
|
||||
BuildMap(sourceModel());
|
||||
}
|
||||
} // namespace AssetBrowser
|
||||
} // namespace AzToolsFramework
|
||||
|
||||
+17
-1
@@ -29,8 +29,24 @@ namespace AzToolsFramework
|
||||
|
||||
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;
|
||||
//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;
|
||||
|
||||
private:
|
||||
int BuildMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0);
|
||||
AssetBrowserEntry* GetAssetEntry(QModelIndex index) const;
|
||||
|
||||
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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+67
-7
@@ -1,5 +1,34 @@
|
||||
#include "AssetBrowserTableView.h"
|
||||
#include <API/EditorAssetSystemAPI.h>
|
||||
|
||||
#include <AzCore/Asset/AssetManagerBus.h>
|
||||
#include <AzCore/Math/Crc.h>
|
||||
#include <AzCore/std/containers/vector.h>
|
||||
|
||||
#include <AzFramework/StringFunc/StringFunc.h>
|
||||
|
||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserBus.h>
|
||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserFilterModel.h>
|
||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserModel.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntryCache.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/ProductAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/SourceAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Views/EntryDelegate.h>
|
||||
#include <AzToolsFramework/Thumbnails/SourceControlThumbnail.h>
|
||||
#include <AzToolsFramework/Thumbnails/ThumbnailerBus.h>
|
||||
|
||||
AZ_PUSH_DISABLE_WARNING(
|
||||
4244 4251 4800, "-Wunknown-warning-option") // conversion from 'int' to 'float', possible loss of data, needs to have dll-interface to
|
||||
// be used by clients of class 'QFlags<QPainter::RenderHint>::Int': forcing value to bool
|
||||
// 'true' or 'false' (performance warning)
|
||||
#include <QCoreApplication>
|
||||
#include <QHeaderView>
|
||||
#include <QMenu>
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include <QPen>
|
||||
#include <QTimer>
|
||||
AZ_POP_DISABLE_WARNING
|
||||
#pragma optimize("", off)
|
||||
namespace AzToolsFramework
|
||||
{
|
||||
@@ -7,7 +36,19 @@ namespace AzToolsFramework
|
||||
{
|
||||
AssetBrowserTableView::AssetBrowserTableView(QWidget* parent)
|
||||
: QTableView(parent)
|
||||
, m_delegate(new EntryDelegate(this))
|
||||
|
||||
{
|
||||
setSortingEnabled(true);
|
||||
setItemDelegate(m_delegate);
|
||||
// header()->hide();
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
setMouseTracking(true);
|
||||
|
||||
connect(this, &QTableView::customContextMenuRequested, this, &AssetBrowserTableView::OnContextMenu);
|
||||
//connect(m_scTimer, &QTimer::timeout, this, &AssetBrowserTreeView::OnUpdateSCThumbnailsList);
|
||||
|
||||
AssetBrowserViewRequestBus::Handler::BusConnect();
|
||||
AssetBrowserComponentNotificationBus::Handler::BusConnect();
|
||||
}
|
||||
@@ -18,9 +59,9 @@ namespace AzToolsFramework
|
||||
}
|
||||
void AssetBrowserTableView::setModel(QAbstractItemModel* model)
|
||||
{
|
||||
//m_assetBrowserSortFilterProxyModel = qobject_cast<AssetBrowserTableFilterModel*>(model);
|
||||
//AZ_Assert(m_assetBrowserSortFilterProxyModel, "Expecting AssetBrowserTableFilterModel");
|
||||
//m_assetBrowserModel = qobject_cast<AssetBrowserModel*>(m_assetBrowserSortFilterProxyModel->sourceModel());
|
||||
m_sourceModel = qobject_cast<AssetBrowserTableModel*>(model);
|
||||
AZ_Assert(m_sourceModel, "Expecting AssetBrowserTableModel");
|
||||
m_sourceFilterModel = qobject_cast<AssetBrowserFilterModel*>(m_sourceModel->sourceModel());
|
||||
QTableView::setModel(model);
|
||||
}
|
||||
void AssetBrowserTableView::SetName(const QString& name)
|
||||
@@ -54,11 +95,30 @@ namespace AzToolsFramework
|
||||
|
||||
void AssetBrowserTableView::Update()
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
//void AssetBrowserTableView::OnAssetBrowserComponentReady()
|
||||
//{
|
||||
//}
|
||||
void AssetBrowserTableView::OnAssetBrowserComponentReady()
|
||||
{
|
||||
}
|
||||
|
||||
void AssetBrowserTableView::OnContextMenu(const QPoint& point)
|
||||
{
|
||||
AZ_UNUSED(point);
|
||||
|
||||
auto selectedAssets = GetSelectedAssets();
|
||||
if (selectedAssets.size() != 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QMenu menu(this);
|
||||
AssetBrowserInteractionNotificationBus::Broadcast(&AssetBrowserInteractionNotificationBus::Events::AddContextMenuActions, this, &menu, selectedAssets);
|
||||
if (!menu.isEmpty())
|
||||
{
|
||||
menu.exec(QCursor::pos());
|
||||
}
|
||||
}
|
||||
} // namespace AssetBrowser
|
||||
} // namespace AzToolsFramework
|
||||
#pragma optimize("", on)
|
||||
|
||||
+13
-4
@@ -5,7 +5,7 @@
|
||||
#include <AzCore/std/containers/vector.h>
|
||||
|
||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserBus.h>
|
||||
//#include <AzToolsFramework/AssetBrowser/AssetBrowserTableFilterModel.h>
|
||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserTableModel.h>
|
||||
|
||||
#include <QModelIndex>
|
||||
#include <QPointer>
|
||||
@@ -17,7 +17,7 @@ namespace AzToolsFramework
|
||||
namespace AssetBrowser
|
||||
{
|
||||
class AssetBrowserEntry;
|
||||
class AssetBrowserModel;
|
||||
class AssetBrowserTableModel;
|
||||
class AssetBrowserFilterModel;
|
||||
class EntryDelegate;
|
||||
|
||||
@@ -45,11 +45,20 @@ namespace AzToolsFramework
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// AssetBrowserComponentNotificationBus
|
||||
//void OnAssetBrowserComponentReady() override;
|
||||
void OnAssetBrowserComponentReady() override;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
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();
|
||||
|
||||
private:
|
||||
QString m_name;
|
||||
|
||||
QPointer<AssetBrowserFilterModel> m_sourceFilterModel = nullptr;
|
||||
QPointer<AssetBrowserTableModel> m_sourceModel = nullptr;
|
||||
EntryDelegate* m_delegate = nullptr;
|
||||
|
||||
};
|
||||
} // namespace AssetBrowser
|
||||
|
||||
@@ -78,13 +78,17 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent)
|
||||
m_filterModel->setSourceModel(m_assetBrowserModel);
|
||||
m_filterModel->SetFilter(m_ui->m_searchWidget->GetFilter());
|
||||
|
||||
m_tableModel->setFilterRole(Qt::DisplayRole);
|
||||
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_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]()
|
||||
|
||||
Reference in New Issue
Block a user