LYN-4806: Switch Asset Browser Mode Button (Fix) (#1852)

* Adding dropdown for view

Signed-off-by: igarri <igarri@amazon.com>

* Adding Asset Browser Mode selector button

Signed-off-by: igarri <igarri@amazon.com>

* Added display State Enum

Signed-off-by: igarri <igarri@amazon.com>

* changed over to AZStd::unique_ptr

Signed-off-by: igarri <igarri@amazon.com>

* added pointers

Signed-off-by: igarri <igarri@amazon.com>

* Fixing pointers

Signed-off-by: igarri <igarri@amazon.com>

* Fixing parenting

Signed-off-by: igarri <igarri@amazon.com>

* Changes from Code Review Feedback

Signed-off-by: igarri <igarri@amazon.com>

* Fixed wrong condition

Signed-off-by: igarri <igarri@amazon.com>

* Added Button Icon

Signed-off-by: igarri <igarri@amazon.com>

* Fixing Copyright Header

Signed-off-by: igarri <igarri@amazon.com>
This commit is contained in:
AMZN-Igarri
2021-07-07 10:53:21 +01:00
committed by GitHub
parent 88725210c1
commit 64697350bc
5 changed files with 311 additions and 165 deletions
@@ -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<const AzAssetBrowser::ProductAssetBrowserEntry*>(entry))
if (const AzAssetBrowser::ProductAssetBrowserEntry* productEntry =
azrtti_cast<const AzAssetBrowser::ProductAssetBrowserEntry*>(entry))
{
assetIdToOpen = productEntry->GetAssetId();
fullFilePath = entry->GetFullPath();
}
else if (const AzAssetBrowser::SourceAssetBrowserEntry* sourceEntry = azrtti_cast<const AzAssetBrowser::SourceAssetBrowserEntry*>(entry))
else if (
const AzAssetBrowser::SourceAssetBrowserEntry* sourceEntry = azrtti_cast<const AzAssetBrowser::SourceAssetBrowserEntry*>(entry))
{
// manufacture an empty AssetID with the source's UUID
assetIdToOpen = AZ::Data::AssetId(sourceEntry->GetSourceUuid(), 0);
@@ -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<Ui::AzAssetBrowserWindowClass> m_ui;
QScopedPointer<AzToolsFramework::AssetBrowser::AssetBrowserFilterModel> m_filterModel;
QScopedPointer<AzToolsFramework::AssetBrowser::AssetBrowserTableModel> 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:
@@ -54,7 +54,7 @@
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="m_headerLayout">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="AzToolsFramework::AssetBrowser::SearchWidget" name="m_searchWidget" native="true">
<property name="sizePolicy">
@@ -66,9 +66,9 @@
</widget>
</item>
<item>
<widget class="QCheckBox" name="m_viewSwitcherCheckBox">
<widget class="QToolButton" name="m_toggleDisplayViewBtn">
<property name="text">
<string>Switch View</string>
<string>...</string>
</property>
</widget>
</item>
@@ -218,6 +218,8 @@
<header>AzToolsFramework/AssetBrowser/Views/AssetBrowserTableView.h</header>
</customwidget>
</customwidgets>
<resources/>
<resources>
<include location="../../Framework/AzQtComponents/AzQtComponents/Components/resources.qrc"/>
</resources>
<connections/>
</ui>
@@ -1,124 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FilteredSearchWidget</class>
<widget class="QFrame" name="FilteredSearchWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>295</width>
<height>53</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="textSearchContainer" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="textSearch">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<class>FilteredSearchWidget</class>
<widget class="QFrame" name="FilteredSearchWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>295</width>
<height>53</height>
</rect>
</property>
<property name="inputMask">
<string/>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="text">
<string/>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="placeholderText">
<string>Search...</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="assetTypeSelector">
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
</layout>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="textSearchContainer" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="textSearch">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="placeholderText">
<string>Search...</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="assetTypeSelector">
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="filteredParent" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>&lt;b&gt;Filtered by:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="filteredLayout" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="filteredParent" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>&lt;b&gt;Filtered by:&lt;/b&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="filteredLayout" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>AzQtComponents::ExtendedLabel</class>
<extends>QLabel</extends>
<header>AzQtComponents/Components/ExtendedLabel.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="resources.qrc"/>
</resources>
<connections/>
<layoutdefault spacing="0" margin="0"/>
<customwidgets>
<customwidget>
<class>AzQtComponents::ExtendedLabel</class>
<extends>QLabel</extends>
<header>AzQtComponents/Components/ExtendedLabel.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="resources.qrc"/>
</resources>
<connections/>
<layoutdefault spacing="0" margin="0"/>
</ui>
@@ -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);