Changing material component property inspector to dockable view pane
• Inspector is locked to a specific entity and material assignment ID • All modifications are made via the material component request bus • Removed complicated configuration management in editor material component • Multiple material property inspectors can be opened • Multiple materials across different entities can be edited simultaneously • No longer blocks the viewport or other interactions • Added functions to material component request bus for retrieving material slot labels, default materials, getting and setting property and UV overrides • Added more asset related types to material property value conversion from any • Added support for static heading widget on top of atom tools inspector, currently used for menus and messages WIP: Still investigating intermittent crash because of corrupt asset property Signed-off-by: Guthrie Adams <guthadam@amazon.com>
This commit is contained in:
+6
@@ -24,6 +24,12 @@ namespace AtomToolsFramework
|
||||
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
|
||||
typedef AZ::Uuid BusIdType;
|
||||
|
||||
//! Add heading widget above scroll area
|
||||
virtual void AddHeading(QWidget* headingWidget) = 0;
|
||||
|
||||
//! Clear heading widgets
|
||||
virtual void ClearHeading() = 0;
|
||||
|
||||
//! Clear all inspector groups and content
|
||||
virtual void Reset() = 0;
|
||||
|
||||
|
||||
+4
-1
@@ -41,6 +41,10 @@ namespace AtomToolsFramework
|
||||
~InspectorWidget() override;
|
||||
|
||||
// InspectorRequestBus::Handler overrides...
|
||||
void AddHeading(QWidget* headingWidget) override;
|
||||
|
||||
void ClearHeading() override;
|
||||
|
||||
void Reset() override;
|
||||
|
||||
void AddGroupsBegin() override;
|
||||
@@ -77,7 +81,6 @@ namespace AtomToolsFramework
|
||||
virtual void OnHeaderClicked(const AZStd::string& groupNameId, QMouseEvent* event);
|
||||
|
||||
private:
|
||||
QVBoxLayout* m_layout = nullptr;
|
||||
QScopedPointer<Ui::InspectorWidget> m_ui;
|
||||
|
||||
struct GroupWidgetPair
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ namespace AtomToolsFramework
|
||||
m_propertyEditor->Setup(context, instanceNotificationHandler, false);
|
||||
m_propertyEditor->AddInstance(instance, instanceClassId, nullptr, instanceToCompare);
|
||||
m_propertyEditor->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
m_propertyEditor->QueueInvalidation(AzToolsFramework::PropertyModificationRefreshLevel::Refresh_EntireTree);
|
||||
m_propertyEditor->InvalidateAll();
|
||||
|
||||
m_layout->addWidget(m_propertyEditor);
|
||||
setLayout(m_layout);
|
||||
|
||||
@@ -29,30 +29,40 @@ namespace AtomToolsFramework
|
||||
{
|
||||
}
|
||||
|
||||
void InspectorWidget::AddHeading(QWidget* headingWidget)
|
||||
{
|
||||
headingWidget->setParent(m_ui->m_headingSection);
|
||||
m_ui->m_headingSectionLayout->addWidget(headingWidget);
|
||||
}
|
||||
|
||||
void InspectorWidget::ClearHeading()
|
||||
{
|
||||
qDeleteAll(m_ui->m_headingSection->findChildren<QWidget*>(QString(), Qt::FindDirectChildrenOnly));
|
||||
qDeleteAll(m_ui->m_headingSectionLayout->children());
|
||||
}
|
||||
|
||||
void InspectorWidget::Reset()
|
||||
{
|
||||
qDeleteAll(m_ui->m_propertyContent->children());
|
||||
m_layout = new QVBoxLayout(m_ui->m_propertyContent);
|
||||
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||
m_layout->setSpacing(0);
|
||||
qDeleteAll(m_ui->m_groupContents->findChildren<QWidget*>(QString(), Qt::FindDirectChildrenOnly));
|
||||
qDeleteAll(m_ui->m_groupContentsLayout->children());
|
||||
m_groups.clear();
|
||||
}
|
||||
|
||||
void InspectorWidget::AddGroupsBegin()
|
||||
{
|
||||
setUpdatesEnabled(false);
|
||||
setVisible(false);
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
void InspectorWidget::AddGroupsEnd()
|
||||
{
|
||||
m_layout->addStretch();
|
||||
m_ui->m_groupContentsLayout->addStretch();
|
||||
|
||||
// Scroll to top whenever there is new content
|
||||
m_ui->m_propertyScrollArea->verticalScrollBar()->setValue(m_ui->m_propertyScrollArea->verticalScrollBar()->minimum());
|
||||
m_ui->m_groupScrollArea->verticalScrollBar()->setValue(m_ui->m_groupScrollArea->verticalScrollBar()->minimum());
|
||||
|
||||
setUpdatesEnabled(true);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
void InspectorWidget::AddGroup(
|
||||
@@ -61,14 +71,14 @@ namespace AtomToolsFramework
|
||||
const AZStd::string& groupDescription,
|
||||
QWidget* groupWidget)
|
||||
{
|
||||
InspectorGroupHeaderWidget* groupHeader = new InspectorGroupHeaderWidget(m_ui->m_propertyContent);
|
||||
InspectorGroupHeaderWidget* groupHeader = new InspectorGroupHeaderWidget(m_ui->m_groupContents);
|
||||
groupHeader->setText(groupDisplayName.c_str());
|
||||
groupHeader->setToolTip(groupDescription.c_str());
|
||||
m_layout->addWidget(groupHeader);
|
||||
m_ui->m_groupContentsLayout->addWidget(groupHeader);
|
||||
|
||||
groupWidget->setObjectName(groupNameId.c_str());
|
||||
groupWidget->setParent(m_ui->m_propertyContent);
|
||||
m_layout->addWidget(groupWidget);
|
||||
groupWidget->setParent(m_ui->m_groupContents);
|
||||
m_ui->m_groupContentsLayout->addWidget(groupWidget);
|
||||
|
||||
m_groups[groupNameId] = {groupHeader, groupWidget};
|
||||
|
||||
@@ -101,28 +111,18 @@ namespace AtomToolsFramework
|
||||
bool InspectorWidget::IsGroupVisible(const AZStd::string& groupNameId) const
|
||||
{
|
||||
auto groupItr = m_groups.find(groupNameId);
|
||||
if (groupItr != m_groups.end())
|
||||
{
|
||||
return groupItr->second.m_header->isVisible();
|
||||
}
|
||||
|
||||
return false;
|
||||
return groupItr != m_groups.end() ? groupItr->second.m_header->isVisible() : false;
|
||||
}
|
||||
|
||||
bool InspectorWidget::IsGroupHidden(const AZStd::string& groupNameId) const
|
||||
{
|
||||
auto groupItr = m_groups.find(groupNameId);
|
||||
if (groupItr != m_groups.end())
|
||||
{
|
||||
return groupItr->second.m_header->isHidden();
|
||||
}
|
||||
|
||||
return false;
|
||||
return groupItr != m_groups.end() ? groupItr->second.m_header->isHidden() : false;
|
||||
}
|
||||
|
||||
void InspectorWidget::RefreshGroup(const AZStd::string& groupNameId)
|
||||
{
|
||||
for (auto groupWidget : m_ui->m_propertyContent->findChildren<InspectorGroupWidget*>(groupNameId.c_str()))
|
||||
for (auto groupWidget : m_ui->m_groupContents->findChildren<InspectorGroupWidget*>(groupNameId.c_str()))
|
||||
{
|
||||
groupWidget->Refresh();
|
||||
}
|
||||
@@ -130,7 +130,7 @@ namespace AtomToolsFramework
|
||||
|
||||
void InspectorWidget::RebuildGroup(const AZStd::string& groupNameId)
|
||||
{
|
||||
for (auto groupWidget : m_ui->m_propertyContent->findChildren<InspectorGroupWidget*>(groupNameId.c_str()))
|
||||
for (auto groupWidget : m_ui->m_groupContents->findChildren<InspectorGroupWidget*>(groupNameId.c_str()))
|
||||
{
|
||||
groupWidget->Rebuild();
|
||||
}
|
||||
@@ -138,7 +138,7 @@ namespace AtomToolsFramework
|
||||
|
||||
void InspectorWidget::RefreshAll()
|
||||
{
|
||||
for (auto groupWidget : m_ui->m_propertyContent->findChildren<InspectorGroupWidget*>())
|
||||
for (auto groupWidget : m_ui->m_groupContents->findChildren<InspectorGroupWidget*>())
|
||||
{
|
||||
groupWidget->Refresh();
|
||||
}
|
||||
@@ -146,7 +146,7 @@ namespace AtomToolsFramework
|
||||
|
||||
void InspectorWidget::RebuildAll()
|
||||
{
|
||||
for (auto groupWidget : m_ui->m_propertyContent->findChildren<InspectorGroupWidget*>())
|
||||
for (auto groupWidget : m_ui->m_groupContents->findChildren<InspectorGroupWidget*>())
|
||||
{
|
||||
groupWidget->Rebuild();
|
||||
}
|
||||
|
||||
@@ -6,20 +6,14 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>693</width>
|
||||
<height>798</height>
|
||||
<width>685</width>
|
||||
<height>775</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Inspector</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<layout class="QVBoxLayout" name="m_inspectorLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
@@ -36,50 +30,103 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="m_propertyScrollArea">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||
</property>
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>691</width>
|
||||
<height>796</height>
|
||||
</rect>
|
||||
<widget class="QWidget" name="m_sections">
|
||||
<layout class="QVBoxLayout" name="m_sectionsLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="m_propertyContent">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QWidget" name="m_headingSection" native="true">
|
||||
<layout class="QVBoxLayout" name="m_headingSectionLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="m_groupSection" native="true">
|
||||
<layout class="QVBoxLayout" name="m_groupSectionLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="m_groupScrollArea">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||
</property>
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="m_groupContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>683</width>
|
||||
<height>763</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="m_groupContentsLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
Reference in New Issue
Block a user