From 09a0676b9c42f7143029c7980f2a84ceea01b6de Mon Sep 17 00:00:00 2001 From: mnaumov Date: Thu, 22 Apr 2021 16:56:56 -0700 Subject: [PATCH 1/4] Adding custom title to PropertyAssetCtrl --- .../UI/PropertyEditor/PropertyAssetCtrl.cpp | 24 +++++++++++++++++++ .../UI/PropertyEditor/PropertyAssetCtrl.hxx | 21 +++++++++++++++- .../UI/PropertyEditor/PropertyRowWidget.cpp | 12 +++++----- .../UI/PropertyEditor/PropertyRowWidget.hxx | 2 ++ .../ReflectedPropertyEditor.cpp | 10 ++++++++ .../ReflectedPropertyEditor.hxx | 4 ++++ .../Inspector/InspectorPropertyGroupWidget.h | 3 ++- .../InspectorPropertyGroupWidget.cpp | 4 +++- .../MaterialInspector/MaterialInspector.cpp | 7 +++--- 9 files changed, 75 insertions(+), 12 deletions(-) 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); } } From 91f027a05cb2c3df3bbe1b6881c75509334be9cb Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 26 Apr 2021 17:42:49 -0700 Subject: [PATCH 2/4] PR feedback --- .../Serialization/EditContextConstants.inl | 1 + .../UI/PropertyEditor/PropertyAssetCtrl.cpp | 33 +++++++++---------- .../UI/PropertyEditor/PropertyAssetCtrl.hxx | 21 ++---------- .../ReflectedPropertyEditor.cpp | 10 ------ .../ReflectedPropertyEditor.hxx | 4 --- .../DynamicProperty/DynamicProperty.h | 3 ++ .../Inspector/InspectorPropertyGroupWidget.h | 3 +- .../DynamicProperty/DynamicProperty.cpp | 11 +++++++ .../InspectorPropertyGroupWidget.cpp | 4 +-- .../Code/Source/Document/MaterialDocument.cpp | 4 +++ .../MaterialInspector/MaterialInspector.cpp | 9 ++--- 11 files changed, 44 insertions(+), 59 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Serialization/EditContextConstants.inl b/Code/Framework/AzCore/AzCore/Serialization/EditContextConstants.inl index eac6e5760e..90b9ba5afd 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/EditContextConstants.inl +++ b/Code/Framework/AzCore/AzCore/Serialization/EditContextConstants.inl @@ -118,6 +118,7 @@ namespace AZ const static AZ::Crc32 StringLineEditingCompleteNotify = AZ_CRC("StringLineEditingCompleteNotify", 0x139e5fa9); const static AZ::Crc32 NameLabelOverride = AZ_CRC("NameLabelOverride", 0x9ff79cab); + const static AZ::Crc32 AssetPickerTitle = AZ_CRC_CE("AssetPickerTitle"); const static AZ::Crc32 ChildNameLabelOverride = AZ_CRC("ChildNameLabelOverride", 0x73dd2909); //! Container attribute that is used to override labels for its elements given the index of the element const static AZ::Crc32 IndexedChildNameLabelOverride = AZ_CRC("IndexedChildNameLabelOverride", 0x5f313ac2); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp index 0f52fda06a..11afd97197 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp @@ -679,22 +679,7 @@ namespace AzToolsFramework 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); + selectionModel.SetTitle(m_title); return selectionModel; } @@ -1076,6 +1061,11 @@ namespace AzToolsFramework m_editButton->setIcon(icon); } + void PropertyAssetCtrl::SetTitle(const QString& title) + { + m_title = title; + } + void PropertyAssetCtrl::SetEditNotifyTarget(void* editNotifyTarget) { m_editNotifyTarget = editNotifyTarget; @@ -1211,7 +1201,16 @@ namespace AzToolsFramework { (void)debugName; - if (attrib == AZ_CRC("EditCallback", 0xb74f2ee1)) + if (attrib == AZ_CRC_CE("AssetPickerTitle")) + { + AZStd::string title; + attrValue->Read(title); + if (!title.empty()) + { + GUI->SetTitle(title.c_str()); + } + } + else if (attrib == AZ_CRC("EditCallback", 0xb74f2ee1)) { PropertyAssetCtrl::EditCallbackType* func = azdynamic_cast(attrValue->GetAttribute()); if (func) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx index 90b0f16947..6812805d02 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx @@ -95,6 +95,7 @@ namespace AzToolsFramework void OnAssetIDChanged(AZ::Data::AssetId newAssetID); protected: + QString m_title; ThumbnailDropDown* m_thumbnailDropDown = nullptr; Thumbnailer::ThumbnailWidget* m_thumbnail = nullptr; QPushButton* m_errorButton = nullptr; @@ -178,9 +179,6 @@ namespace AzToolsFramework void HandleFieldClear(); AZStd::string AddDefaultSuffix(const AZStd::string& filename); - template - Widget_Type* FindFirstParent(QObject* pParent) const; - ////////////////////////////////////////////////////////////////////////// // AssetSystemBus void SourceFileChanged(AZStd::string relativePath, AZStd::string scanFolder, AZ::Uuid sourceUUID) override; @@ -195,6 +193,7 @@ namespace AzToolsFramework ////////////////////////////////////////////////////////////////////////// public slots: + void SetTitle(const QString& title); void SetEditNotifyTarget(void* editNotifyTarget); void SetEditNotifyCallback(EditCallbackType* editNotifyCallback); // This is meant to be used with the "EditCallback" Attribute void SetClearNotifyCallback(ClearCallbackType* clearNotifyCallback); // This is meant to be used with the "ClearNotify" Attribute @@ -236,22 +235,6 @@ 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/ReflectedPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp index 41cff1364a..04957ed5e1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.cpp @@ -2248,16 +2248,6 @@ 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 26d189ce03..ef542074a8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ReflectedPropertyEditor.hxx @@ -156,9 +156,6 @@ namespace AzToolsFramework using VisibilityCallback = AZStd::function; void SetVisibilityCallback(VisibilityCallback callback); - void SetTitle(const QString& title); - const QString& GetTitle() const; - signals: void OnExpansionContractionDone(); private: @@ -166,7 +163,6 @@ 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/DynamicProperty/DynamicProperty.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h index f481bbc397..5fd2862c65 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/DynamicProperty/DynamicProperty.h @@ -49,6 +49,7 @@ namespace AtomToolsFramework AZ::Name m_id; AZStd::string m_nameId; AZStd::string m_displayName; + AZStd::string m_groupName; AZStd::string m_description; AZStd::any m_defaultValue; AZStd::any m_parentValue; @@ -108,6 +109,8 @@ namespace AtomToolsFramework private: // Functions used to configure edit data attributes. AZStd::string GetDisplayName() const; + AZStd::string GetGroupName() const; + AZStd::string GetAssetPickerTitle() const; AZStd::string GetDescription() const; AZStd::vector> GetEnumValues() const; 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 b002f81081..71ca975f58 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -44,8 +44,7 @@ namespace AtomToolsFramework const AZ::Uuid& instanceClassId, AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {}, QWidget* parent = {}, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, - QString title = QString()); + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}); void Refresh() override; void Rebuild() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp index 1ff475b2ef..754c35f0c2 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/DynamicProperty/DynamicProperty.cpp @@ -135,6 +135,7 @@ namespace AtomToolsFramework m_editData.m_elementId = AZ::Edit::UIHandlers::Default; AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::NameLabelOverride, &DynamicProperty::GetDisplayName); + AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::AssetPickerTitle, &DynamicProperty::GetAssetPickerTitle); AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::DescriptionTextOverride, &DynamicProperty::GetDescription); AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::ReadOnly, &DynamicProperty::IsReadOnly); AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::EnumValues, &DynamicProperty::GetEnumValues); @@ -197,6 +198,16 @@ namespace AtomToolsFramework return !m_config.m_displayName.empty() ? m_config.m_displayName : m_config.m_nameId; } + AZStd::string DynamicProperty::GetGroupName() const + { + return m_config.m_groupName; + } + + AZStd::string DynamicProperty::GetAssetPickerTitle() const + { + return GetGroupName().empty() ? GetDisplayName() : GetGroupName() + " " + GetDisplayName(); + } + AZStd::string DynamicProperty::GetDescription() const { return AZStd::string::format("%s%s(Script Name = '%s')", diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp index ffddb0cd2c..c4d78d1acb 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -22,8 +22,7 @@ namespace AtomToolsFramework const AZ::Uuid& instanceClassId, AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler, QWidget* parent, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, - QString title) + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -35,7 +34,6 @@ 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/Document/MaterialDocument.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp index 2e59cb16f9..6bdee9a319 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp @@ -773,6 +773,7 @@ namespace MaterialEditor AtomToolsFramework::ConvertToPropertyConfig(propertyConfig, propertyDefinition); propertyConfig.m_originalValue = AtomToolsFramework::ConvertToEditableType(m_materialAsset->GetPropertyValues()[propertyIndex.GetIndex()]); propertyConfig.m_parentValue = AtomToolsFramework::ConvertToEditableType(parentPropertyValues[propertyIndex.GetIndex()]); + propertyConfig.m_groupName = m_materialTypeSourceData.FindGroup(groupNameId)->m_displayName; m_properties[propertyConfig.m_id] = AtomToolsFramework::DynamicProperty(propertyConfig); } return true; @@ -789,6 +790,7 @@ namespace MaterialEditor propertyConfig.m_id = "details.materialType"; propertyConfig.m_nameId = "materialType"; propertyConfig.m_displayName = "Material Type"; + propertyConfig.m_groupName = "Details"; propertyConfig.m_description = propertyConfig.m_displayName; propertyConfig.m_defaultValue = AZStd::any(materialTypeAsset); propertyConfig.m_originalValue = propertyConfig.m_defaultValue; @@ -802,6 +804,7 @@ namespace MaterialEditor propertyConfig.m_id = "details.parentMaterial"; propertyConfig.m_nameId = "parentMaterial"; propertyConfig.m_displayName = "Parent Material"; + propertyConfig.m_groupName = "Details"; propertyConfig.m_description = propertyConfig.m_displayName; propertyConfig.m_defaultValue = AZStd::any(parentMaterialAsset); propertyConfig.m_originalValue = propertyConfig.m_defaultValue; @@ -822,6 +825,7 @@ namespace MaterialEditor propertyConfig.m_id = MaterialPropertyId(UvGroupName, shaderInput).GetCStr(); propertyConfig.m_nameId = shaderInput; propertyConfig.m_displayName = shaderInput; + propertyConfig.m_groupName = "UV Names"; propertyConfig.m_description = shaderInput; propertyConfig.m_defaultValue = uvName; propertyConfig.m_originalValue = uvName; 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 2975ba8c23..776af3147b 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -93,8 +93,10 @@ namespace MaterialEditor [this](const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) { AZ_UNUSED(source); const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); + + //property->AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::NameLabelOverride, &DynamicProperty::GetDisplayName); return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); - }, groupDisplayName.c_str()); + }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -126,7 +128,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,8 +163,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); } } From fdcb19f45a9e931e1bb5a4cada1b01c468d0de94 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 26 Apr 2021 17:48:49 -0700 Subject: [PATCH 3/4] Reverting some unused code --- .../UI/PropertyEditor/PropertyAssetCtrl.cpp | 2 -- .../UI/PropertyEditor/PropertyAssetCtrl.hxx | 2 +- .../UI/PropertyEditor/PropertyRowWidget.cpp | 12 ++++++------ .../UI/PropertyEditor/PropertyRowWidget.hxx | 2 -- .../Window/MaterialInspector/MaterialInspector.cpp | 2 -- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp index 11afd97197..dde33f2c7b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.cpp @@ -15,8 +15,6 @@ #include "PropertyAssetCtrl.hxx" #include "PropertyQTConstants.h" -#include "PropertyRowWidget.hxx" -#include "ReflectedPropertyEditor.hxx" AZ_PUSH_DISABLE_WARNING(4244 4251, "-Wunknown-warning-option") #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx index 6812805d02..ef3fca0c9e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyAssetCtrl.hxx @@ -178,7 +178,7 @@ namespace AzToolsFramework void HandleFieldClear(); AZStd::string AddDefaultSuffix(const AZStd::string& filename); - + ////////////////////////////////////////////////////////////////////////// // AssetSystemBus void SourceFileChanged(AZStd::string relativePath, AZStd::string scanFolder, AZ::Uuid sourceUUID) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp index 1403952b19..8c371baf8c 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_title; + return m_nameLabel->text(); } void PropertyRowWidget::SetNameLabel(const char* text) { - m_title = text; - m_nameLabel->setText(m_title); - m_nameLabel->setVisible(!m_title.isEmpty()); + QString label{ text }; + m_nameLabel->setText(label); + m_nameLabel->setVisible(!label.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, m_title.isEmpty() ? 0 : LabelColumnStretch); - m_mainLayout->setStretch(1, m_title.isEmpty() ? 0 : ValueColumnStretch); + m_mainLayout->setStretch(0, label.isEmpty() ? 0 : LabelColumnStretch); + m_mainLayout->setStretch(1, label.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 113ef2a6ab..e4b538ccdc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.hxx @@ -175,8 +175,6 @@ 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/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp index 776af3147b..b066c3c7dd 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -93,8 +93,6 @@ namespace MaterialEditor [this](const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) { AZ_UNUSED(source); const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - - //property->AddEditDataAttributeMemberFunction(AZ::Edit::Attributes::NameLabelOverride, &DynamicProperty::GetDisplayName); return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); From daea5e93b2a96cf6982a5a6d0a9df2a0a2491fcd Mon Sep 17 00:00:00 2001 From: mnaumov Date: Tue, 27 Apr 2021 14:35:03 -0700 Subject: [PATCH 4/4] Adding groupname to material instance --- .../Code/Source/Material/EditorMaterialComponentInspector.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp index 38e41a74b4..2885978e1e 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp @@ -203,6 +203,7 @@ namespace AZ propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, shaderInputStr).GetCStr(); propertyConfig.m_nameId = shaderInputStr; propertyConfig.m_displayName = shaderInputStr; + propertyConfig.m_groupName = groupDisplayName; propertyConfig.m_description = shaderInputStr; propertyConfig.m_defaultValue = uvName; propertyConfig.m_originalValue = uvName; @@ -247,6 +248,7 @@ namespace AZ AtomToolsFramework::ConvertToPropertyConfig(propertyConfig, propertyDefinition); propertyConfig.m_id = AZ::RPI::MaterialPropertyId(groupNameId, propertyDefinition.m_nameId).GetFullName(); + propertyConfig.m_groupName = groupDisplayName; const auto& propertyIndex = m_editData.m_materialAsset->GetMaterialPropertiesLayout()->FindPropertyIndex(propertyConfig.m_id); propertyConfig.m_defaultValue = AtomToolsFramework::ConvertToEditableType(m_editData.m_materialTypeAsset->GetDefaultPropertyValues()[propertyIndex.GetIndex()]); propertyConfig.m_parentValue = AtomToolsFramework::ConvertToEditableType(m_editData.m_materialTypeAsset->GetDefaultPropertyValues()[propertyIndex.GetIndex()]);