diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp index 261645e79a..0f52fda06a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp @@ -15,6 +15,8 @@ #include "PropertyAssetCtrl.hxx" #include "PropertyQTConstants.h" +#include "PropertyRowWidget.hxx" +#include "ReflectedPropertyEditor.hxx" AZ_PUSH_DISABLE_WARNING(4244 4251, "-Wunknown-warning-option") #include @@ -674,6 +676,28 @@ namespace AzToolsFramework AzQtComponents::BrowseEdit::removeDropTargetStyle(m_browseEdit); } + AssetSelectionModel PropertyAssetCtrl::GetAssetSelectionModel() + { + auto selectionModel = AssetSelectionModel::AssetTypeSelection(GetCurrentAssetType()); + + QString title; + auto propertyRowWidget = FindFirstParent(parent()); + if (propertyRowWidget) + { + if (!propertyRowWidget->label().isEmpty()) + { + title = propertyRowWidget->label(); + } + auto reflectedPropertyEditor = FindFirstParent(propertyRowWidget->parent()); + if (reflectedPropertyEditor && !reflectedPropertyEditor->GetTitle().isEmpty()) + { + title = QString("%1 %2").arg(reflectedPropertyEditor->GetTitle()).arg(title); + } + } + selectionModel.SetTitle(title); + return selectionModel; + } + void PropertyAssetCtrl::UpdateTabOrder() { setTabOrder(m_browseEdit, m_editButton); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx index b1f2dbb529..90b0f16947 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx @@ -89,7 +89,7 @@ namespace AzToolsFramework void dragLeaveEvent(QDragLeaveEvent* event) override; void dropEvent(QDropEvent* event) override; - virtual AssetSelectionModel GetAssetSelectionModel() { return AssetSelectionModel::AssetTypeSelection(GetCurrentAssetType()); } + virtual AssetSelectionModel GetAssetSelectionModel(); signals: void OnAssetIDChanged(AZ::Data::AssetId newAssetID); @@ -177,6 +177,9 @@ namespace AzToolsFramework void HandleFieldClear(); AZStd::string AddDefaultSuffix(const AZStd::string& filename); + + template + Widget_Type* FindFirstParent(QObject* pParent) const; ////////////////////////////////////////////////////////////////////////// // AssetSystemBus @@ -233,6 +236,22 @@ namespace AzToolsFramework void UpdateThumbnail(); }; + template + Widget_Type* PropertyAssetCtrl::FindFirstParent(QObject* pParent) const + { + Widget_Type* widget = nullptr; + while (pParent) + { + widget = qobject_cast(pParent); + if (widget) + { + break; + } + pParent = pParent->parent(); + } + return widget; + } + class AssetPropertyHandlerDefault : QObject , public PropertyHandler, PropertyAssetCtrl> diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp index 8c371baf8c..1403952b19 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp @@ -387,17 +387,17 @@ namespace AzToolsFramework QString PropertyRowWidget::label() const { - return m_nameLabel->text(); + return m_title; } void PropertyRowWidget::SetNameLabel(const char* text) { - QString label{ text }; - m_nameLabel->setText(label); - m_nameLabel->setVisible(!label.isEmpty()); + m_title = text; + m_nameLabel->setText(m_title); + m_nameLabel->setVisible(!m_title.isEmpty()); // setting the stretches to 0 in case of an empty label really hides the label (i.e. even the reserved space) - m_mainLayout->setStretch(0, label.isEmpty() ? 0 : LabelColumnStretch); - m_mainLayout->setStretch(1, label.isEmpty() ? 0 : ValueColumnStretch); + m_mainLayout->setStretch(0, m_title.isEmpty() ? 0 : LabelColumnStretch); + m_mainLayout->setStretch(1, m_title.isEmpty() ? 0 : ValueColumnStretch); m_identifier = AZ::Crc32(text); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx index e4b538ccdc..113ef2a6ab 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx @@ -175,6 +175,8 @@ namespace AzToolsFramework QLabel* m_defaultLabel; // if there is no handler, we use a m_defaultLabel label InstanceDataNode* m_sourceNode; + QString m_title; + QString m_groupTitle; QString m_currentFilterString; struct ChangeNotification diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp index 04957ed5e1..41cff1364a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp @@ -2248,6 +2248,16 @@ namespace AzToolsFramework m_impl->m_visibilityCallback = callback; } + void ReflectedPropertyEditor::SetTitle(const QString& title) + { + m_title = title; + } + + const QString& ReflectedPropertyEditor::GetTitle() const + { + return m_title; + } + QWidget* ReflectedPropertyEditor::GetContainerWidget() { return m_impl->m_containerWidget; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx index ef542074a8..26d189ce03 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx @@ -156,6 +156,9 @@ namespace AzToolsFramework using VisibilityCallback = AZStd::function; void SetVisibilityCallback(VisibilityCallback callback); + void SetTitle(const QString& title); + const QString& GetTitle() const; + signals: void OnExpansionContractionDone(); private: @@ -163,6 +166,7 @@ namespace AzToolsFramework std::unique_ptr m_impl; AZStd::string m_currentFilterString; + QString m_title; virtual void paintEvent(QPaintEvent* event) override; int m_updateDepth = 0; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h index 71ca975f58..b002f81081 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -44,7 +44,8 @@ namespace AtomToolsFramework const AZ::Uuid& instanceClassId, AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {}, QWidget* parent = {}, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}); + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, + QString title = QString()); void Refresh() override; void Rebuild() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp index c4d78d1acb..ffddb0cd2c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -22,7 +22,8 @@ namespace AtomToolsFramework const AZ::Uuid& instanceClassId, AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler, QWidget* parent, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction) + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, + QString title) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -34,6 +35,7 @@ namespace AtomToolsFramework m_layout->setSpacing(0); m_propertyEditor = new AzToolsFramework::ReflectedPropertyEditor(this); + m_propertyEditor->SetTitle(title); m_propertyEditor->SetHideRootProperties(true); m_propertyEditor->SetAutoResizeLabels(true); m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp index b066c3c7dd..2975ba8c23 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -94,7 +94,7 @@ namespace MaterialEditor AZ_UNUSED(source); const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); - }); + }, groupDisplayName.c_str()); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -126,7 +126,7 @@ namespace MaterialEditor AZ_UNUSED(source); const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); - }); + }, groupDisplayName.c_str()); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -161,7 +161,8 @@ namespace MaterialEditor AZ_UNUSED(source); const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); - }); + }, + groupDisplayName.c_str()); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } }