ATOM-15473 added context menu to material inspector group header with expand and collapse actions
https://jira.agscollab.com/browse/ATOM-15473
This commit is contained in:
+5
@@ -15,6 +15,7 @@
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <AzCore/Memory/SystemAllocator.h>
|
||||
#include <AzQtComponents/Components/ExtendedLabel.h>
|
||||
#include <QMouseEvent>
|
||||
#include <QPaintEvent>
|
||||
#endif
|
||||
|
||||
@@ -31,7 +32,11 @@ namespace AtomToolsFramework
|
||||
void SetExpanded(bool expanded);
|
||||
bool IsExpanded() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void clicked(QMouseEvent* event);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent* event) override;
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
|
||||
private:
|
||||
|
||||
+6
@@ -55,6 +55,12 @@ namespace AtomToolsFramework
|
||||
|
||||
//! Calls Rebuild for all InspectorGroupWidget, allowing for destructive UI changes
|
||||
virtual void RebuildAll() = 0;
|
||||
|
||||
//! Expands all groups and headers
|
||||
virtual void ExpandAll() = 0;
|
||||
|
||||
//! Collapses all groups and headers
|
||||
virtual void CollapseAll() = 0;
|
||||
};
|
||||
|
||||
using InspectorRequestBus = AZ::EBus<InspectorRequests>;
|
||||
|
||||
+8
-4
@@ -29,11 +29,8 @@ namespace Ui
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
class InspectorPropertyGroupWidget;
|
||||
}
|
||||
class InspectorGroupHeaderWidget;
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
//! Provides controls for viewing and editing object settings.
|
||||
//! The settings can be divided into groups, with each one showing a subset of properties.
|
||||
class InspectorWidget
|
||||
@@ -66,8 +63,15 @@ namespace AtomToolsFramework
|
||||
void RefreshAll() override;
|
||||
void RebuildAll() override;
|
||||
|
||||
void ExpandAll() override;
|
||||
void CollapseAll() override;
|
||||
|
||||
private:
|
||||
void OnHeaderClicked(QMouseEvent* event, InspectorGroupHeaderWidget* groupHeader, QWidget* groupWidget);
|
||||
|
||||
QVBoxLayout* m_layout = nullptr;
|
||||
QScopedPointer<Ui::InspectorWidget> m_ui;
|
||||
AZStd::vector<InspectorGroupHeaderWidget*> m_headers;
|
||||
AZStd::vector<QWidget*> m_groups;
|
||||
};
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
+9
-13
@@ -14,10 +14,10 @@
|
||||
#include <AzQtComponents/Components/StyleManager.h>
|
||||
#include <AzQtComponents/Components/Widgets/Text.h>
|
||||
|
||||
#include <QStyle>
|
||||
#include <QPainter>
|
||||
#include <QApplication>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#include <QStyle>
|
||||
#include <QStyleOptionViewItem>
|
||||
|
||||
namespace AtomToolsFramework
|
||||
@@ -44,6 +44,11 @@ namespace AtomToolsFramework
|
||||
return m_expanded;
|
||||
}
|
||||
|
||||
void InspectorGroupHeaderWidget::mousePressEvent(QMouseEvent* event)
|
||||
{
|
||||
emit clicked(event);
|
||||
}
|
||||
|
||||
void InspectorGroupHeaderWidget::paintEvent([[maybe_unused]] QPaintEvent* event)
|
||||
{
|
||||
QPainter painter(this);
|
||||
@@ -52,19 +57,10 @@ namespace AtomToolsFramework
|
||||
auto& icon = m_expanded ? m_iconExpanded : m_iconCollapsed;
|
||||
|
||||
const QRect iconRect(5, (geometry().height() / 2) - (iconSize.height() / 2), iconSize.width(), iconSize.height());
|
||||
style->drawItemPixmap(&painter,
|
||||
iconRect,
|
||||
Qt::AlignLeft | Qt::AlignVCenter,
|
||||
icon.scaledToWidth(iconSize.width()));
|
||||
style->drawItemPixmap(&painter, iconRect, Qt::AlignLeft | Qt::AlignVCenter, icon.scaledToWidth(iconSize.width()));
|
||||
|
||||
const auto textRect = QRect(25, 0, geometry().width() - 21, geometry().height());
|
||||
style->drawItemText(&painter,
|
||||
textRect,
|
||||
Qt::AlignLeft | Qt::AlignVCenter,
|
||||
QPalette(),
|
||||
true,
|
||||
text(),
|
||||
QPalette::HighlightedText);
|
||||
style->drawItemText(&painter, textRect, Qt::AlignLeft | Qt::AlignVCenter, QPalette(), true, text(), QPalette::HighlightedText);
|
||||
}
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
|
||||
@@ -10,12 +10,13 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <QMenu>
|
||||
#include <QScrollArea>
|
||||
#include <QScrollBar>
|
||||
#include <QSizePolicy>
|
||||
|
||||
#include <AtomToolsFramework/Inspector/InspectorGroupWidget.h>
|
||||
#include <AtomToolsFramework/Inspector/InspectorGroupHeaderWidget.h>
|
||||
#include <AtomToolsFramework/Inspector/InspectorGroupWidget.h>
|
||||
#include <AtomToolsFramework/Inspector/InspectorWidget.h>
|
||||
#include <Source/Inspector/ui_InspectorWidget.h>
|
||||
|
||||
@@ -38,6 +39,8 @@ namespace AtomToolsFramework
|
||||
m_layout = new QVBoxLayout(m_ui->m_propertyContent);
|
||||
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||
m_layout->setSpacing(0);
|
||||
m_headers.clear();
|
||||
m_groups.clear();
|
||||
}
|
||||
|
||||
void InspectorWidget::AddGroupsBegin()
|
||||
@@ -52,8 +55,7 @@ namespace AtomToolsFramework
|
||||
m_layout->addStretch();
|
||||
|
||||
// Scroll to top whenever there is new content
|
||||
m_ui->m_propertyScrollArea->verticalScrollBar()->setValue(
|
||||
m_ui->m_propertyScrollArea->verticalScrollBar()->minimum());
|
||||
m_ui->m_propertyScrollArea->verticalScrollBar()->setValue(m_ui->m_propertyScrollArea->verticalScrollBar()->minimum());
|
||||
|
||||
setUpdatesEnabled(true);
|
||||
}
|
||||
@@ -68,15 +70,15 @@ namespace AtomToolsFramework
|
||||
groupHeader->setText(groupDisplayName.c_str());
|
||||
groupHeader->setToolTip(groupDescription.c_str());
|
||||
m_layout->addWidget(groupHeader);
|
||||
m_headers.push_back(groupHeader);
|
||||
|
||||
groupWidget->setObjectName(groupNameId.c_str());
|
||||
groupWidget->setParent(m_ui->m_propertyContent);
|
||||
m_layout->addWidget(groupWidget);
|
||||
m_groups.push_back(groupWidget);
|
||||
|
||||
connect(groupHeader, &AzQtComponents::ExtendedLabel::clicked, this, [groupHeader, groupWidget]()
|
||||
{
|
||||
groupHeader->SetExpanded(!groupHeader->IsExpanded());
|
||||
groupWidget->setVisible(groupHeader->IsExpanded());
|
||||
connect(groupHeader, &InspectorGroupHeaderWidget::clicked, this, [this, groupHeader, groupWidget](QMouseEvent* event) {
|
||||
OnHeaderClicked(event, groupHeader, groupWidget);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -111,6 +113,57 @@ namespace AtomToolsFramework
|
||||
groupWidget->Rebuild();
|
||||
}
|
||||
}
|
||||
|
||||
void InspectorWidget::ExpandAll()
|
||||
{
|
||||
for (auto headerWidget : m_headers)
|
||||
{
|
||||
headerWidget->SetExpanded(true);
|
||||
}
|
||||
for (auto groupWidget : m_groups)
|
||||
{
|
||||
groupWidget->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void InspectorWidget::CollapseAll()
|
||||
{
|
||||
for (auto headerWidget : m_headers)
|
||||
{
|
||||
headerWidget->SetExpanded(false);
|
||||
}
|
||||
for (auto groupWidget : m_groups)
|
||||
{
|
||||
groupWidget->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
void InspectorWidget::OnHeaderClicked(QMouseEvent* event, InspectorGroupHeaderWidget* groupHeader, QWidget* groupWidget)
|
||||
{
|
||||
if (event->button() == Qt::MouseButton::LeftButton)
|
||||
{
|
||||
groupHeader->SetExpanded(!groupHeader->IsExpanded());
|
||||
groupWidget->setVisible(groupHeader->IsExpanded());
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->button() == Qt::MouseButton::RightButton)
|
||||
{
|
||||
QMenu menu;
|
||||
menu.addAction("Expand", [groupHeader, groupWidget]() {
|
||||
groupHeader->SetExpanded(true);
|
||||
groupWidget->setVisible(true);
|
||||
})->setEnabled(!groupHeader->IsExpanded());
|
||||
menu.addAction("Collapse", [groupHeader, groupWidget]() {
|
||||
groupHeader->SetExpanded(false);
|
||||
groupWidget->setVisible(false);
|
||||
})->setEnabled(groupHeader->IsExpanded());
|
||||
menu.addAction("Expand All", [this]() { ExpandAll(); });
|
||||
menu.addAction("Collapse All", [this]() { CollapseAll(); });
|
||||
menu.exec(event->globalPos());
|
||||
return;
|
||||
}
|
||||
}
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
#include <AtomToolsFramework/Inspector/moc_InspectorWidget.cpp>
|
||||
|
||||
Reference in New Issue
Block a user