From 3fa9d16be2fc53a9915e6573275da6c0a90d6a04 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Mon, 27 Sep 2021 20:35:54 -0500 Subject: [PATCH] Material editor: replacing modified property highlight color with indicator icons Testing to see how easy it is to set up the indicated icons. Problematic because icons are to the left of property labels instead of the left of property widget. This completely destroys alignment. Signed-off-by: Guthrie Adams --- .../Inspector/InspectorPropertyGroupWidget.h | 3 +- .../InspectorPropertyGroupWidget.cpp | 4 ++- .../MaterialInspector/MaterialInspector.cpp | 29 ++++++++++++------- .../MaterialInspector/MaterialInspector.h | 4 +-- 4 files changed, 25 insertions(+), 15 deletions(-) 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();