Merge branch 'main' into Atom/santorac/NewLayeringWorkflow

This commit is contained in:
Chris Santora
2021-05-12 17:45:28 -07:00
1542 changed files with 31413 additions and 174078 deletions
@@ -29,11 +29,13 @@ namespace AtomToolsFramework
AZ_CLASS_ALLOCATOR(InspectorGroupHeaderWidget, AZ::SystemAllocator, 0);
explicit InspectorGroupHeaderWidget(QWidget* parent = nullptr);
void SetExpanded(bool expanded);
void SetExpanded(bool expand);
bool IsExpanded() const;
Q_SIGNALS:
void clicked(QMouseEvent* event);
void expanded();
void collapsed();
protected:
void mousePressEvent(QMouseEvent* event) override;
@@ -44,6 +44,7 @@ namespace AtomToolsFramework
const AZ::Uuid& instanceClassId,
AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {},
QWidget* parent = {},
const AZ::u32 saveStateKey = {},
const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {});
void Refresh() override;
@@ -62,6 +62,15 @@ namespace AtomToolsFramework
//! Calls Rebuild for all InspectorGroupWidget, allowing for destructive UI changes
virtual void RebuildAll() = 0;
//! Expands a specific group
virtual void ExpandGroup(const AZStd::string& groupNameId) = 0;
//! Collapses a specific group
virtual void CollapseGroup(const AZStd::string& groupNameId) = 0;
//! Checks the expansion state of a specific group
virtual bool IsGroupExpanded(const AZStd::string& groupNameId) const = 0;
//! Expands all groups and headers
virtual void ExpandAll() = 0;
@@ -66,15 +66,22 @@ namespace AtomToolsFramework
void RefreshAll() override;
void RebuildAll() override;
void ExpandGroup(const AZStd::string& groupNameId) override;
void CollapseGroup(const AZStd::string& groupNameId) override;
bool IsGroupExpanded(const AZStd::string& groupNameId) const override;
void ExpandAll() override;
void CollapseAll() override;
private:
void OnHeaderClicked(QMouseEvent* event, InspectorGroupHeaderWidget* groupHeader, QWidget* groupWidget);
protected:
virtual bool ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const;
virtual void OnGroupExpanded(const AZStd::string& groupNameId);
virtual void OnGroupCollapsed(const AZStd::string& groupNameId);
virtual void OnHeaderClicked(const AZStd::string& groupNameId, QMouseEvent* event);
private:
QVBoxLayout* m_layout = nullptr;
QScopedPointer<Ui::InspectorWidget> m_ui;
AZStd::vector<InspectorGroupHeaderWidget*> m_headers;
AZStd::vector<QWidget*> m_groups;
AZStd::unordered_map<AZStd::string, AZStd::pair<InspectorGroupHeaderWidget*, QWidget*>> m_groups;
};
} // namespace AtomToolsFramework
@@ -100,7 +100,7 @@ namespace AtomToolsFramework
const AzFramework::ScreenPoint& screenPosition) override;
//! Set interface for providing viewport specific settings (e.g. snapping properties).
void SetViewportSettings(AzToolsFramework::ViewportInteraction::ViewportSettings* viewportSettings);
void SetViewportSettings(const AzToolsFramework::ViewportInteraction::ViewportSettings* viewportSettings);
// AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Handler ...
void BeginCursorCapture() override;
@@ -33,10 +33,21 @@ namespace AtomToolsFramework
setMargin(0);
}
void InspectorGroupHeaderWidget::SetExpanded(bool expanded)
void InspectorGroupHeaderWidget::SetExpanded(bool expand)
{
m_expanded = expanded;
update();
if (m_expanded != expand)
{
m_expanded = expand;
if (m_expanded)
{
emit expanded();
}
else
{
emit collapsed();
}
update();
}
}
bool InspectorGroupHeaderWidget::IsExpanded() const
@@ -22,6 +22,7 @@ namespace AtomToolsFramework
const AZ::Uuid& instanceClassId,
AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler,
QWidget* parent,
const AZ::u32 saveStateKey,
const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction)
: InspectorGroupWidget(parent)
{
@@ -37,6 +38,7 @@ namespace AtomToolsFramework
m_propertyEditor->SetHideRootProperties(true);
m_propertyEditor->SetAutoResizeLabels(true);
m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction);
m_propertyEditor->SetSavedStateKey(saveStateKey);
m_propertyEditor->Setup(context, instanceNotificationHandler, false);
m_propertyEditor->AddInstance(instance, instanceClassId, nullptr, instanceToCompare);
m_propertyEditor->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
@@ -39,7 +39,6 @@ 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();
}
@@ -71,16 +70,27 @@ namespace AtomToolsFramework
groupHeader->setToolTip(groupDescription.c_str());
groupHeader->setObjectName(groupNameId.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, &InspectorGroupHeaderWidget::clicked, this, [this, groupHeader, groupWidget](QMouseEvent* event) {
OnHeaderClicked(event, groupHeader, groupWidget);
m_groups[groupNameId] = AZStd::make_pair(groupHeader, groupWidget);
connect(groupHeader, &InspectorGroupHeaderWidget::clicked, this, [this, groupNameId](QMouseEvent* event) {
OnHeaderClicked(groupNameId, event);
});
connect(groupHeader, &InspectorGroupHeaderWidget::expanded, this, [this, groupNameId]() { OnGroupExpanded(groupNameId); });
connect(groupHeader, &InspectorGroupHeaderWidget::collapsed, this, [this, groupNameId]() { OnGroupCollapsed(groupNameId); });
if (ShouldGroupAutoExpanded(groupNameId))
{
ExpandGroup(groupNameId);
}
else
{
CollapseGroup(groupNameId);
}
}
void InspectorWidget::SetGroupVisible(const AZStd::string& groupNameId, bool visible)
@@ -141,50 +151,86 @@ namespace AtomToolsFramework
}
}
void InspectorWidget::ExpandGroup(const AZStd::string& groupNameId)
{
auto groupItr = m_groups.find(groupNameId);
if (groupItr != m_groups.end())
{
groupItr->second.first->SetExpanded(true);
groupItr->second.second->setVisible(true);
}
}
void InspectorWidget::CollapseGroup(const AZStd::string& groupNameId)
{
auto groupItr = m_groups.find(groupNameId);
if (groupItr != m_groups.end())
{
groupItr->second.first->SetExpanded(false);
groupItr->second.second->setVisible(false);
}
}
bool InspectorWidget::IsGroupExpanded(const AZStd::string& groupNameId) const
{
auto groupItr = m_groups.find(groupNameId);
return groupItr != m_groups.end() ? groupItr->second.first->IsExpanded() : false;
}
void InspectorWidget::ExpandAll()
{
for (auto headerWidget : m_headers)
for (auto& groupPair : m_groups)
{
headerWidget->SetExpanded(true);
}
for (auto groupWidget : m_groups)
{
groupWidget->setVisible(true);
groupPair.second.first->SetExpanded(true);
groupPair.second.second->setVisible(true);
}
}
void InspectorWidget::CollapseAll()
{
for (auto headerWidget : m_headers)
for (auto& groupPair : m_groups)
{
headerWidget->SetExpanded(false);
}
for (auto groupWidget : m_groups)
{
groupWidget->setVisible(false);
groupPair.second.first->SetExpanded(false);
groupPair.second.second->setVisible(false);
}
}
void InspectorWidget::OnHeaderClicked(QMouseEvent* event, InspectorGroupHeaderWidget* groupHeader, QWidget* groupWidget)
bool InspectorWidget::ShouldGroupAutoExpanded(const AZStd::string& groupNameId) const
{
AZ_UNUSED(groupNameId);
return true;
}
void InspectorWidget::OnGroupExpanded(const AZStd::string& groupNameId)
{
AZ_UNUSED(groupNameId);
}
void InspectorWidget::OnGroupCollapsed(const AZStd::string& groupNameId)
{
AZ_UNUSED(groupNameId);
}
void InspectorWidget::OnHeaderClicked(const AZStd::string& groupNameId, QMouseEvent* event)
{
if (event->button() == Qt::MouseButton::LeftButton)
{
groupHeader->SetExpanded(!groupHeader->IsExpanded());
groupWidget->setVisible(groupHeader->IsExpanded());
if (!IsGroupExpanded(groupNameId))
{
ExpandGroup(groupNameId);
}
else
{
CollapseGroup(groupNameId);
}
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", [this, groupNameId]() { ExpandGroup(groupNameId); })->setEnabled(!IsGroupExpanded(groupNameId));
menu.addAction("Collapse", [this, groupNameId]() { CollapseGroup(groupNameId); })->setEnabled(IsGroupExpanded(groupNameId));
menu.addAction("Expand All", [this]() { ExpandAll(); });
menu.addAction("Collapse All", [this]() { CollapseAll(); });
menu.exec(event->globalPos());
@@ -407,7 +407,7 @@ namespace AtomToolsFramework
return m_viewportSettings ? m_viewportSettings->AngleStep() : 0.0f;
}
void RenderViewportWidget::SetViewportSettings(AzToolsFramework::ViewportInteraction::ViewportSettings* viewportSettings)
void RenderViewportWidget::SetViewportSettings(const AzToolsFramework::ViewportInteraction::ViewportSettings* viewportSettings)
{
m_viewportSettings = viewportSettings;
}