From 64697350bc09e619d42bf32758525745f5a350f6 Mon Sep 17 00:00:00 2001 From: AMZN-Igarri <82394219+AMZN-Igarri@users.noreply.github.com> Date: Wed, 7 Jul 2021 10:53:21 +0100 Subject: [PATCH] LYN-4806: Switch Asset Browser Mode Button (Fix) (#1852) * Adding dropdown for view Signed-off-by: igarri * Adding Asset Browser Mode selector button Signed-off-by: igarri * Added display State Enum Signed-off-by: igarri * changed over to AZStd::unique_ptr Signed-off-by: igarri * added pointers Signed-off-by: igarri * Fixing pointers Signed-off-by: igarri * Fixing parenting Signed-off-by: igarri * Changes from Code Review Feedback Signed-off-by: igarri * Fixed wrong condition Signed-off-by: igarri * Added Button Icon Signed-off-by: igarri * Fixing Copyright Header Signed-off-by: igarri --- .../AzAssetBrowser/AzAssetBrowserWindow.cpp | 195 ++++++++++++--- .../AzAssetBrowser/AzAssetBrowserWindow.h | 30 ++- .../AzAssetBrowser/AzAssetBrowserWindow.ui | 10 +- .../Components/FilteredSearchWidget.ui | 236 +++++++++--------- .../Views/AssetBrowserTableView.cpp | 5 + 5 files changed, 311 insertions(+), 165 deletions(-) diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp index a75780bda7..e0cb83d2cd 100644 --- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp +++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp @@ -69,36 +69,38 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) m_ui->setupUi(this); m_ui->m_searchWidget->Setup(true, true); + OnInitViewToggleButton(); + namespace AzAssetBrowser = AzToolsFramework::AssetBrowser; - AzAssetBrowser::AssetBrowserComponentRequestBus::BroadcastResult(m_assetBrowserModel, &AzAssetBrowser::AssetBrowserComponentRequests::GetAssetBrowserModel); + AzAssetBrowser::AssetBrowserComponentRequestBus::BroadcastResult( + m_assetBrowserModel, &AzAssetBrowser::AssetBrowserComponentRequests::GetAssetBrowserModel); AZ_Assert(m_assetBrowserModel, "Failed to get filebrowser model"); m_filterModel->setSourceModel(m_assetBrowserModel); m_filterModel->SetFilter(m_ui->m_searchWidget->GetFilter()); - m_ui->m_viewSwitcherCheckBox->setVisible(false); m_ui->m_assetBrowserTableViewWidget->setVisible(false); + m_ui->m_toggleDisplayViewBtn->setVisible(false); if (ed_useNewAssetBrowserTableView) { - m_ui->m_viewSwitcherCheckBox->setVisible(true); + m_ui->m_toggleDisplayViewBtn->setVisible(true); + m_ui->m_toggleDisplayViewBtn->setIcon(QIcon(":/Menu/menu.svg")); + m_tableModel->setFilterRole(Qt::DisplayRole); m_tableModel->setSourceModel(m_filterModel.data()); m_ui->m_assetBrowserTableViewWidget->setModel(m_tableModel.data()); + connect( m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this, - [this]() - { - if (!m_ui->m_searchWidget->GetFilterString().isEmpty()) - { - m_tableModel->UpdateTableModelMaps(); - } - }); + &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, &QAbstractItemView::doubleClicked, this, &AzAssetBrowserWindow::DoubleClickedItem); connect( m_ui->m_assetBrowserTableViewWidget, &AzAssetBrowser::AssetBrowserTableView::ClearStringFilter, m_ui->m_searchWidget, &AzAssetBrowser::SearchWidget::ClearStringFilter); @@ -107,22 +109,6 @@ AzAssetBrowserWindow::AzAssetBrowserWindow(QWidget* parent) &AzAssetBrowser::SearchWidget::ClearTypeFilter); m_ui->m_assetBrowserTableViewWidget->SetName("AssetBrowserTableView_main"); - - connect( - m_filterModel.data(), &AzAssetBrowser::AssetBrowserFilterModel::filterChanged, this, - [this]() - { - const bool hasFilter = !m_ui->m_searchWidget->GetFilterString().isEmpty(); - m_ui->m_assetBrowserTableViewWidget->setVisible(hasFilter); - m_ui->m_assetBrowserTreeViewWidget->setVisible(!hasFilter); - }); - connect( - m_ui->m_viewSwitcherCheckBox, &QCheckBox::stateChanged, this, - [this](bool visible) - { - m_ui->m_assetBrowserTableViewWidget->setVisible(visible); - m_ui->m_assetBrowserTreeViewWidget->setVisible(!visible); - }); } m_ui->m_assetBrowserTreeViewWidget->setModel(m_filterModel.data()); @@ -175,11 +161,143 @@ QObject* AzAssetBrowserWindow::createListenerForShowAssetEditorEvent(QObject* pa return listener; } +void AzAssetBrowserWindow::OnInitViewToggleButton() +{ + CreateSwitchViewMenu(); + m_ui->m_toggleDisplayViewBtn->setMenu(m_viewSwitchMenu); + m_ui->m_toggleDisplayViewBtn->setPopupMode(QToolButton::InstantPopup); + + connect(m_viewSwitchMenu, &QMenu::aboutToShow, this, &AzAssetBrowserWindow::UpdateDisplayInfo); +} + +void AzAssetBrowserWindow::CreateSwitchViewMenu() +{ + if (m_viewSwitchMenu != nullptr) + { + return; + } + + m_viewSwitchMenu = new QMenu("Asset Browser Mode Selection", this); + + m_expandedAssetBrowserMode = new QAction(tr("Expanded"), this); + m_expandedAssetBrowserMode->setCheckable(true); + connect(m_expandedAssetBrowserMode, &QAction::triggered, this, &AzAssetBrowserWindow::SetExpandedAssetBrowserMode); + m_viewSwitchMenu->addAction(m_expandedAssetBrowserMode); + + m_defaultAssetBrowserMode = new QAction(tr("Default"), this); + m_defaultAssetBrowserMode->setCheckable(true); + connect(m_defaultAssetBrowserMode, &QAction::triggered, this, &AzAssetBrowserWindow::SetDefaultAssetBrowserMode); + m_viewSwitchMenu->addAction(m_defaultAssetBrowserMode); + + UpdateDisplayInfo(); +} + +void AzAssetBrowserWindow::UpdateDisplayInfo() +{ + namespace AzAssetBrowser = AzToolsFramework::AssetBrowser; + + if (m_viewSwitchMenu == nullptr) + { + return; + } + + m_expandedAssetBrowserMode->setChecked(false); + m_defaultAssetBrowserMode->setChecked(false); + + switch (m_assetBrowserDisplayState) + { + case AzAssetBrowser::AssetBrowserDisplayState::ExpandedMode: + { + m_expandedAssetBrowserMode->setChecked(true); + break; + } + case AzAssetBrowser::AssetBrowserDisplayState::DefaultMode: + { + m_defaultAssetBrowserMode->setChecked(true); + break; + } + } +} + +void AzAssetBrowserWindow::SetExpandedAssetBrowserMode() +{ + namespace AzAssetBrowser = AzToolsFramework::AssetBrowser; + + 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()) + { + m_ui->m_assetBrowserTableViewWidget->setVisible(false); + m_ui->m_assetBrowserTreeViewWidget->setVisible(true); + } +} + +void AzAssetBrowserWindow::SetDefaultAssetBrowserMode() +{ + namespace AzAssetBrowser = AzToolsFramework::AssetBrowser; + + 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(); +} + +void AzAssetBrowserWindow::UpdateTableModelAfterFilter() +{ + if (!m_ui->m_searchWidget->GetFilterString().isEmpty()) + { + m_tableModel->UpdateTableModelMaps(); + } +} + +void AzAssetBrowserWindow::SetTableViewVisibleAfterFilter() +{ + const bool hasFilter = !m_ui->m_searchWidget->GetFilterString().isEmpty(); + m_ui->m_assetBrowserTableViewWidget->setVisible(hasFilter); + m_ui->m_assetBrowserTreeViewWidget->setVisible(!hasFilter); +} + void AzAssetBrowserWindow::UpdatePreview() const { - const auto& selectedAssets = m_ui->m_assetBrowserTreeViewWidget->isVisible() - ? m_ui->m_assetBrowserTreeViewWidget->GetSelectedAssets() - : m_ui->m_assetBrowserTableViewWidget->GetSelectedAssets(); + const auto& selectedAssets = m_ui->m_assetBrowserTreeViewWidget->isVisible() ? m_ui->m_assetBrowserTreeViewWidget->GetSelectedAssets() + : m_ui->m_assetBrowserTableViewWidget->GetSelectedAssets(); if (selectedAssets.size() != 1) { @@ -250,22 +368,23 @@ void AzAssetBrowserWindow::SelectionChangedSlot(const QItemSelection& /*selected void AzAssetBrowserWindow::DoubleClickedItem([[maybe_unused]] const QModelIndex& element) { namespace AzAssetBrowser = AzToolsFramework::AssetBrowser; - - const auto& selectedAssets = m_ui->m_assetBrowserTreeViewWidget->isVisible() - ? m_ui->m_assetBrowserTreeViewWidget->GetSelectedAssets() - : m_ui->m_assetBrowserTableViewWidget->GetSelectedAssets(); + + const auto& selectedAssets = m_ui->m_assetBrowserTreeViewWidget->isVisible() ? m_ui->m_assetBrowserTreeViewWidget->GetSelectedAssets() + : m_ui->m_assetBrowserTableViewWidget->GetSelectedAssets(); for (const AzAssetBrowser::AssetBrowserEntry* entry : selectedAssets) { AZ::Data::AssetId assetIdToOpen; AZStd::string fullFilePath; - if (const AzAssetBrowser::ProductAssetBrowserEntry* productEntry = azrtti_cast(entry)) + if (const AzAssetBrowser::ProductAssetBrowserEntry* productEntry = + azrtti_cast(entry)) { assetIdToOpen = productEntry->GetAssetId(); fullFilePath = entry->GetFullPath(); } - else if (const AzAssetBrowser::SourceAssetBrowserEntry* sourceEntry = azrtti_cast(entry)) + else if ( + const AzAssetBrowser::SourceAssetBrowserEntry* sourceEntry = azrtti_cast(entry)) { // manufacture an empty AssetID with the source's UUID assetIdToOpen = AZ::Data::AssetId(sourceEntry->GetSourceUuid(), 0); diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h index 84691bc30e..b3b52a8ecb 100644 --- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h +++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.h @@ -27,11 +27,17 @@ namespace AzToolsFramework class AssetBrowserTableModel; class AssetBrowserModel; class AssetBrowserTableFilterModel; - } -} -class AzAssetBrowserWindow - : public QWidget + enum class AssetBrowserDisplayState : int + { + ExpandedMode, + DefaultMode, + Invalid + }; + } // namespace AssetBrowser +} // namespace AzToolsFramework + +class AzAssetBrowserWindow : public QWidget { Q_OBJECT public: @@ -47,12 +53,26 @@ public: static QObject* createListenerForShowAssetEditorEvent(QObject* parent); private: + void OnInitViewToggleButton(); + void UpdateDisplayInfo(); +protected slots: + void CreateSwitchViewMenu(); + void SetExpandedAssetBrowserMode(); + void SetDefaultAssetBrowserMode(); + void UpdateTableModelAfterFilter(); + void SetTableViewVisibleAfterFilter(); +private: QScopedPointer m_ui; QScopedPointer m_filterModel; QScopedPointer m_tableModel; AzToolsFramework::AssetBrowser::AssetBrowserModel* m_assetBrowserModel; - + QMenu* m_viewSwitchMenu = nullptr; + QAction* m_expandedAssetBrowserMode = nullptr; + QAction* m_defaultAssetBrowserMode = nullptr; + AzToolsFramework::AssetBrowser::AssetBrowserDisplayState m_assetBrowserDisplayState = + AzToolsFramework::AssetBrowser::AssetBrowserDisplayState::DefaultMode; + void UpdatePreview() const; private Q_SLOTS: diff --git a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui index 37eb1521f3..df7474d9d4 100644 --- a/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui +++ b/Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.ui @@ -54,7 +54,7 @@ 0 - + @@ -66,9 +66,9 @@ - + - Switch View + ... @@ -218,6 +218,8 @@
AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h
- + + + diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/FilteredSearchWidget.ui b/Code/Framework/AzQtComponents/AzQtComponents/Components/FilteredSearchWidget.ui index 84fbdb711c..01373730be 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/FilteredSearchWidget.ui +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/FilteredSearchWidget.ui @@ -1,124 +1,124 @@ - FilteredSearchWidget - - - - 0 - 0 - 295 - 53 - - - - Form - - - - - - - 0 - - - - - - 1 - 0 - + FilteredSearchWidget + + + + 0 + 0 + 295 + 53 + - - + + Form - - - - - false - - - Search... - - - true - - - false - - - - - - - QToolButton::InstantPopup - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::MinimumExpanding - - - - 1 - 1 - - - - - + + + + + + 0 + + + + + + 1 + 0 + + + + + + + + + + false + + + Search... + + + true + + + false + + + + + + + QToolButton::InstantPopup + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 1 + 1 + + + + + + + + + + + + + + + 10 + 75 + true + + + + <b>Filtered by:</b> + + + + + + + + 0 + 0 + + + + + + + + - - - - - - - - - 10 - 75 - true - - - - <b>Filtered by:</b> - - - - - - - - 0 - 0 - - - - - - - - - - - - AzQtComponents::ExtendedLabel - QLabel -
AzQtComponents/Components/ExtendedLabel.h
-
-
- - - - - + + + AzQtComponents::ExtendedLabel + QLabel +
AzQtComponents/Components/ExtendedLabel.h
+
+
+ + + + +
diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp index 73098f3702..c59f55315c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.cpp @@ -43,6 +43,11 @@ namespace AzToolsFramework setSortingEnabled(true); setItemDelegate(m_delegate); verticalHeader()->hide(); + + //Styling the header aligning text to the left and using a bold font. + horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); + horizontalHeader()->setStyleSheet("QHeaderView { font-weight: bold; }"); + setContextMenuPolicy(Qt::CustomContextMenu); setMouseTracking(true);