Asset Browser Search View fixes (#4814)
* Fixed RowCount method. Signed-off-by: igarri <igarri@amazon.com> * Fixed Signals Signed-off-by: igarri <igarri@amazon.com> * Fixed Delegate case Signed-off-by: igarri <igarri@amazon.com> * Fixed issue when displaying branch icons Signed-off-by: igarri <igarri@amazon.com> * Fixed AssetBrowser Delegate Signed-off-by: igarri <igarri@amazon.com> * Removed optimize flags Signed-off-by: igarri <igarri@amazon.com> * AssetBrowsertableModel cleanup Signed-off-by: igarri <igarri@amazon.com> * Fixed Typos Signed-off-by: igarri <igarri@amazon.com> * Fixed Comment Signed-off-by: igarri <igarri@amazon.com> * Added check for rowCount == 0 Signed-off-by: igarri <igarri@amazon.com>
This commit is contained in:
@@ -96,10 +96,6 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent)
|
|||||||
connect(
|
connect(
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
||||||
&AzAssetBrowserWindow::SetTableViewVisibleAfterFilter);
|
&AzAssetBrowserWindow::SetTableViewVisibleAfterFilter);
|
||||||
|
|
||||||
connect(
|
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
|
||||||
&AzAssetBrowserWindow::UpdateTableModelAfterFilter);
|
|
||||||
connect(
|
connect(
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::selectionChangedSignal, this,
|
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::selectionChangedSignal, this,
|
||||||
&AzAssetBrowserWindow::SelectionChangedSlot);
|
&AzAssetBrowserWindow::SelectionChangedSlot);
|
||||||
@@ -251,24 +247,6 @@ void AzAssetBrowserWindow::SetExpandedAssetBrowserMode()
|
|||||||
|
|
||||||
m_assetBrowserDisplayState = AzAssetBrowser::AssetBrowserDisplayState::ExpandedMode;
|
m_assetBrowserDisplayState = AzAssetBrowser::AssetBrowserDisplayState::ExpandedMode;
|
||||||
|
|
||||||
disconnect(
|
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
|
||||||
&AzAssetBrowserWindow::UpdateTableModelAfterFilter);
|
|
||||||
disconnect(
|
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
|
||||||
&AzAssetBrowserWindow::SetTableViewVisibleAfterFilter);
|
|
||||||
|
|
||||||
disconnect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::selectionChangedSignal, this,
|
|
||||||
&AzAssetBrowserWindow::SelectionChangedSlot);
|
|
||||||
disconnect(m_ui->m_assetBrowserTableViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem);
|
|
||||||
disconnect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::ClearStringFilter, m_ui->m_searchWidget,
|
|
||||||
&AzAssetBrowser::SearchWidget::ClearStringFilter);
|
|
||||||
disconnect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::ClearTypeFilter, m_ui->m_searchWidget,
|
|
||||||
&AzAssetBrowser::SearchWidget::ClearTypeFilter);
|
|
||||||
|
|
||||||
if (m_ui->m_assetBrowserTableViewWidget->isVisible())
|
if (m_ui->m_assetBrowserTableViewWidget->isVisible())
|
||||||
{
|
{
|
||||||
m_ui->m_assetBrowserTableViewWidget->setVisible(false);
|
m_ui->m_assetBrowserTableViewWidget->setVisible(false);
|
||||||
@@ -281,37 +259,9 @@ void AzAssetBrowserWindow::SetDefaultAssetBrowserMode()
|
|||||||
namespace AzAssetBrowser = AzToolsFramework::AssetBrowser;
|
namespace AzAssetBrowser = AzToolsFramework::AssetBrowser;
|
||||||
|
|
||||||
m_assetBrowserDisplayState = AzAssetBrowser::AssetBrowserDisplayState::DefaultMode;
|
m_assetBrowserDisplayState = AzAssetBrowser::AssetBrowserDisplayState::DefaultMode;
|
||||||
|
|
||||||
connect(
|
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
|
||||||
&AzAssetBrowserWindow::SetTableViewVisibleAfterFilter);
|
|
||||||
|
|
||||||
connect(
|
|
||||||
m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this,
|
|
||||||
&AzAssetBrowserWindow::UpdateTableModelAfterFilter);
|
|
||||||
connect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::selectionChangedSignal, this,
|
|
||||||
&AzAssetBrowserWindow::SelectionChangedSlot);
|
|
||||||
connect(m_ui->m_assetBrowserTableViewWidget, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem);
|
|
||||||
connect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::ClearStringFilter, m_ui->m_searchWidget,
|
|
||||||
&AzAssetBrowser::SearchWidget::ClearStringFilter);
|
|
||||||
connect(
|
|
||||||
m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::ClearTypeFilter, m_ui->m_searchWidget,
|
|
||||||
&AzAssetBrowser::SearchWidget::ClearTypeFilter);
|
|
||||||
|
|
||||||
//If the filter is not empty we want to switch views and Update the model
|
|
||||||
UpdateTableModelAfterFilter();
|
|
||||||
SetTableViewVisibleAfterFilter();
|
SetTableViewVisibleAfterFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AzAssetBrowserWindow::UpdateTableModelAfterFilter()
|
|
||||||
{
|
|
||||||
if (!m_ui->m_searchWidget->GetFilterString().isEmpty())
|
|
||||||
{
|
|
||||||
m_tableModel->UpdateTableModelMaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void AzAssetBrowserWindow::SetTableViewVisibleAfterFilter()
|
void AzAssetBrowserWindow::SetTableViewVisibleAfterFilter()
|
||||||
{
|
{
|
||||||
@@ -389,8 +339,8 @@ void AzAssetBrowserWindow::SelectionChangedSlot(const QItemSelection& /*selected
|
|||||||
UpdatePreview();
|
UpdatePreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
// while its tempting to use Activated here, we dont actually want it to count as activation
|
// while its tempting to use Activated here, we don't actually want it to count as activation
|
||||||
// just becuase on some OS clicking once is activation.
|
// just because on some OS clicking once is activation.
|
||||||
void AzAssetBrowserWindow::DoubleClickedItem([[maybe_unused]] const QModelIndex& element)
|
void AzAssetBrowserWindow::DoubleClickedItem([[maybe_unused]] const QModelIndex& element)
|
||||||
{
|
{
|
||||||
namespace AzAssetBrowser = AzToolsFramework::AssetBrowser;
|
namespace AzAssetBrowser = AzToolsFramework::AssetBrowser;
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ protected slots:
|
|||||||
void CreateSwitchViewMenu();
|
void CreateSwitchViewMenu();
|
||||||
void SetExpandedAssetBrowserMode();
|
void SetExpandedAssetBrowserMode();
|
||||||
void SetDefaultAssetBrowserMode();
|
void SetDefaultAssetBrowserMode();
|
||||||
void UpdateTableModelAfterFilter();
|
|
||||||
void SetTableViewVisibleAfterFilter();
|
void SetTableViewVisibleAfterFilter();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
+16
-26
@@ -24,24 +24,13 @@ namespace AzToolsFramework
|
|||||||
AZ_Assert(
|
AZ_Assert(
|
||||||
m_filterModel,
|
m_filterModel,
|
||||||
"Error in AssetBrowserTableModel initialization, class expects source model to be an AssetBrowserFilterModel.");
|
"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);
|
QSortFilterProxyModel::setSourceModel(sourceModel);
|
||||||
|
|
||||||
|
connect(m_filterModel, &QAbstractItemModel::rowsInserted, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
||||||
|
connect(m_filterModel, &QAbstractItemModel::rowsRemoved, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
||||||
|
connect(m_filterModel, &QAbstractItemModel::layoutChanged, this, &AssetBrowserTableModel::UpdateTableModelMaps);
|
||||||
|
connect(m_filterModel, &AssetBrowserFilterModel::filterChanged, this, &AssetBrowserTableModel::beginResetModel);
|
||||||
|
connect(m_filterModel, &QAbstractItemModel::dataChanged, this, &AssetBrowserTableModel::SourceDataChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex AssetBrowserTableModel::mapToSource(const QModelIndex& proxyIndex) const
|
QModelIndex AssetBrowserTableModel::mapToSource(const QModelIndex& proxyIndex) const
|
||||||
@@ -112,7 +101,7 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
int AssetBrowserTableModel::rowCount(const QModelIndex& parent) const
|
int AssetBrowserTableModel::rowCount(const QModelIndex& parent) const
|
||||||
{
|
{
|
||||||
return !parent.isValid() ? m_indexMap.size() : sourceModel()->rowCount(parent);
|
return !parent.isValid() ? m_indexMap.size() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AssetBrowserTableModel::BuildTableModelMap(
|
int AssetBrowserTableModel::BuildTableModelMap(
|
||||||
@@ -162,28 +151,29 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
AssetBrowserEntry* AssetBrowserTableModel::GetAssetEntry(QModelIndex index) const
|
AssetBrowserEntry* AssetBrowserTableModel::GetAssetEntry(QModelIndex index) const
|
||||||
{
|
{
|
||||||
if (index.isValid())
|
if (!index.isValid())
|
||||||
{
|
|
||||||
return static_cast<AssetBrowserEntry*>(index.internalPointer());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
AZ_Error("AssetBrowser", false, "Invalid Source Index provided to GetAssetEntry.");
|
AZ_Error("AssetBrowser", false, "Invalid Source Index provided to GetAssetEntry.");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
return static_cast<AssetBrowserEntry*>(index.internalPointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetBrowserTableModel::UpdateTableModelMaps()
|
void AssetBrowserTableModel::UpdateTableModelMaps()
|
||||||
{
|
{
|
||||||
|
beginResetModel();
|
||||||
emit layoutAboutToBeChanged();
|
emit layoutAboutToBeChanged();
|
||||||
m_indexMap.clear();
|
|
||||||
m_rowMap.clear();
|
|
||||||
|
|
||||||
|
if (!m_indexMap.isEmpty() || !m_rowMap.isEmpty())
|
||||||
|
{
|
||||||
|
m_indexMap.clear();
|
||||||
|
m_rowMap.clear();
|
||||||
|
}
|
||||||
AzToolsFramework::EditorSettingsAPIBus::BroadcastResult(
|
AzToolsFramework::EditorSettingsAPIBus::BroadcastResult(
|
||||||
m_numberOfItemsDisplayed, &AzToolsFramework::EditorSettingsAPIBus::Handler::GetMaxNumberOfItemsShownInSearchView);
|
m_numberOfItemsDisplayed, &AzToolsFramework::EditorSettingsAPIBus::Handler::GetMaxNumberOfItemsShownInSearchView);
|
||||||
|
|
||||||
BuildTableModelMap(sourceModel());
|
BuildTableModelMap(sourceModel());
|
||||||
emit layoutChanged();
|
emit layoutChanged();
|
||||||
|
endResetModel();
|
||||||
}
|
}
|
||||||
} // namespace AssetBrowser
|
} // namespace AssetBrowser
|
||||||
} // namespace AzToolsFramework
|
} // namespace AzToolsFramework
|
||||||
|
|||||||
+4
-2
@@ -21,7 +21,9 @@ namespace AzToolsFramework
|
|||||||
class AssetBrowserFilterModel;
|
class AssetBrowserFilterModel;
|
||||||
class AssetBrowserEntry;
|
class AssetBrowserEntry;
|
||||||
|
|
||||||
class AssetBrowserTableModel : public QSortFilterProxyModel
|
class AssetBrowserTableModel
|
||||||
|
: public QSortFilterProxyModel
|
||||||
|
, public AssetBrowserComponentNotificationBus::Handler
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -43,7 +45,7 @@ namespace AzToolsFramework
|
|||||||
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
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:
|
|
||||||
AssetBrowserEntry* GetAssetEntry(QModelIndex index) const;
|
AssetBrowserEntry* GetAssetEntry(QModelIndex index) const;
|
||||||
int BuildTableModelMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0);
|
int BuildTableModelMap(const QAbstractItemModel* model, const QModelIndex& parent = QModelIndex(), int row = 0);
|
||||||
|
|
||||||
|
|||||||
+21
-16
@@ -225,29 +225,36 @@ namespace AzToolsFramework
|
|||||||
const QModelIndex indexBelow = viewModel->index(index.row() + 1, index.column());
|
const QModelIndex indexBelow = viewModel->index(index.row() + 1, index.column());
|
||||||
const QModelIndex indexAbove = viewModel->index(index.row() - 1, index.column());
|
const QModelIndex indexAbove = viewModel->index(index.row() - 1, index.column());
|
||||||
|
|
||||||
auto aboveEntry = qvariant_cast<const AssetBrowserEntry*>(indexBelow.data(AssetBrowserModel::Roles::EntryRole));
|
auto belowEntry = qvariant_cast<const AssetBrowserEntry*>(indexBelow.data(AssetBrowserModel::Roles::EntryRole));
|
||||||
auto belowEntry = qvariant_cast<const AssetBrowserEntry*>(indexAbove.data(AssetBrowserModel::Roles::EntryRole));
|
auto aboveEntry = qvariant_cast<const AssetBrowserEntry*>(indexAbove.data(AssetBrowserModel::Roles::EntryRole));
|
||||||
|
|
||||||
auto aboveSourceEntry = azrtti_cast<const SourceAssetBrowserEntry*>(aboveEntry);
|
|
||||||
auto belowSourceEntry = azrtti_cast<const SourceAssetBrowserEntry*>(belowEntry);
|
auto belowSourceEntry = azrtti_cast<const SourceAssetBrowserEntry*>(belowEntry);
|
||||||
|
auto aboveSourceEntry = azrtti_cast<const SourceAssetBrowserEntry*>(aboveEntry);
|
||||||
|
|
||||||
// if current index is the last entry in the view
|
// Last item and the above entry is a source entry
|
||||||
// or the index above it is a Source Entry and
|
// or indexBelow is a source entry and the index above is not
|
||||||
// the index below is invalid or is valid but it is also a source entry
|
if (viewModel->rowCount() > 0 && index.row() == viewModel->rowCount() - 1)
|
||||||
// then the current index is the only child.
|
{
|
||||||
if (index.row() == viewModel->rowCount() - 1 ||
|
if (aboveSourceEntry)
|
||||||
(indexBelow.isValid() && aboveSourceEntry &&
|
{
|
||||||
(!indexAbove.isValid() || (indexAbove.isValid() && belowSourceEntry))))
|
DrawBranchPixMap(EntryBranchType::OneChild, painter, branchIconTopLeft, iconSize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DrawBranchPixMap(EntryBranchType::Last, painter, branchIconTopLeft, iconSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (belowSourceEntry && aboveSourceEntry)
|
||||||
{
|
{
|
||||||
DrawBranchPixMap(EntryBranchType::OneChild, painter, branchIconTopLeft, iconSize); // Draw One Child Icon
|
DrawBranchPixMap(EntryBranchType::OneChild, painter, branchIconTopLeft, iconSize); // Draw One Child Icon
|
||||||
}
|
}
|
||||||
else if (indexBelow.isValid() && aboveSourceEntry) // The index above is a source entry
|
else if (belowSourceEntry && !aboveSourceEntry)
|
||||||
{
|
{
|
||||||
DrawBranchPixMap(EntryBranchType::Last, painter, branchIconTopLeft, iconSize); // Draw First child Icon
|
DrawBranchPixMap(EntryBranchType::Last, painter, branchIconTopLeft, iconSize);
|
||||||
}
|
}
|
||||||
else if (indexAbove.isValid() && belowSourceEntry) // The index below is a source entry
|
else if (aboveSourceEntry) // The index above is a source entry
|
||||||
{
|
{
|
||||||
DrawBranchPixMap(EntryBranchType::First, painter, branchIconTopLeft, iconSize); // Draw Last Child Icon
|
DrawBranchPixMap(EntryBranchType::First, painter, branchIconTopLeft, iconSize); // Draw First Child Icon
|
||||||
}
|
}
|
||||||
else //the index above and below are also child entries
|
else //the index above and below are also child entries
|
||||||
{
|
{
|
||||||
@@ -286,7 +293,6 @@ namespace AzToolsFramework
|
|||||||
absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathLast;
|
absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathLast;
|
||||||
break;
|
break;
|
||||||
case AzToolsFramework::AssetBrowser::EntryBranchType::OneChild:
|
case AzToolsFramework::AssetBrowser::EntryBranchType::OneChild:
|
||||||
default:
|
|
||||||
absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathOneChild;
|
absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathOneChild;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -311,5 +317,4 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
} // namespace AssetBrowser
|
} // namespace AssetBrowser
|
||||||
} // namespace AzToolsFramework
|
} // namespace AzToolsFramework
|
||||||
|
|
||||||
#include "AssetBrowser/Views/moc_EntryDelegate.cpp"
|
#include "AssetBrowser/Views/moc_EntryDelegate.cpp"
|
||||||
|
|||||||
Reference in New Issue
Block a user