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 cef3eada75..d373e2010c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -41,7 +41,8 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {}, QWidget* parent = {}, const AZ::u32 saveStateKey = {}, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}); + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction = {}); 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 e1f8573bb3..6ab76dedef 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -19,7 +19,8 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler, QWidget* parent, const AZ::u32 saveStateKey, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction) + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -34,6 +35,7 @@ namespace AtomToolsFramework m_propertyEditor->SetHideRootProperties(true); m_propertyEditor->SetAutoResizeLabels(true); m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction); + m_propertyEditor->SetIndicatorQueryFunction(indicatorQueryFunction); m_propertyEditor->SetSavedStateKey(saveStateKey); m_propertyEditor->Setup(context, instanceNotificationHandler, false); m_propertyEditor->AddInstance(instance, instanceClassId, nullptr, instanceToCompare); 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 28d7d3d3f5..78e3edecf5 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -91,12 +91,19 @@ namespace MaterialEditor return AZ::Crc32(AZStd::string::format("MaterialInspector::PropertyGroup::%s::%s", m_documentPath.c_str(), groupNameId.c_str())); } - bool MaterialInspector::CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const + bool MaterialInspector::IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const { - AZ_UNUSED(source); - const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(node); + return property && !AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + } + + const char* MaterialInspector::GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const + { + if (IsInstanceNodePropertyModifed(node)) + { + return ":/PropertyEditor/Resources/changed_data_item.png"; + } + return nullptr; } void MaterialInspector::AddOverviewGroup() @@ -122,8 +129,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -153,8 +160,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -189,8 +196,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); bool isGroupVisible = false; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h index 845a8cb0f7..4ac127d94b 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h @@ -43,8 +43,8 @@ namespace MaterialEditor private: AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupNameId) const; - bool CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const; + bool IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const; + const char* GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const; void AddOverviewGroup(); void AddUvNamesGroup();