Browse Source

In order to support displaying editable properties based on selected nodes in material canvas, updated atom tools framework document inspector to repopulate the UI from the object info if the document object info is invalidated.

Signed-off-by: gadams3 <[email protected]>
gadams3 3 years ago
parent
commit
516a84d0d2

+ 2 - 0
Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Document/AtomToolsDocumentInspector.h

@@ -56,6 +56,8 @@ namespace AtomToolsFramework
         void RequestPropertyContextMenu([[maybe_unused]] AzToolsFramework::InstanceDataNode* pNode, const QPoint&) override {}
         void PropertySelectionChanged([[maybe_unused]] AzToolsFramework::InstanceDataNode* pNode, bool) override {}
 
+        void Populate();
+
         const AZ::Crc32 m_toolId = {};
 
         bool m_editInProgress = {};

+ 46 - 37
Gems/Atom/Tools/AtomToolsFramework/Code/Source/Document/AtomToolsDocumentInspector.cpp

@@ -26,41 +26,8 @@ namespace AtomToolsFramework
 
     void AtomToolsDocumentInspector::SetDocumentId(const AZ::Uuid& documentId)
     {
-        AddGroupsBegin();
-
         m_documentId = documentId;
-
-        AtomToolsDocumentRequestBus::Event(
-            m_documentId,
-            [&](AtomToolsDocumentRequests* documentRequests)
-            {
-                if (documentRequests->IsOpen())
-                {
-                    // Create a unique settings prefix string per document using a CRC of the document path
-                    const AZStd::string groupSettingsPrefix = m_documentSettingsPrefix +
-                        AZStd::string::format("/%08x/GroupSettings", aznumeric_cast<AZ::u32>(AZ::Crc32(documentRequests->GetAbsolutePath())));
-                    SetGroupSettingsPrefix(groupSettingsPrefix);
-
-                    // This will automatically expose all document contents to an inspector with a collapsible group per object.
-                    // In the case of the material editor, this will be one inspector group per property group.
-                    for (auto& objectInfo : documentRequests->GetObjectInfo())
-                    {
-                        // Passing in same main and comparison instance to enable custom value comparison
-                        const AZ::Crc32 groupSaveStateKey(
-                            AZStd::string::format("%s/%s", groupSettingsPrefix.c_str(), objectInfo.m_name.c_str()));
-                        auto propertyGroupWidget = new InspectorPropertyGroupWidget(
-                            objectInfo.m_objectPtr, objectInfo.m_objectPtr, objectInfo.m_objectType, this, this, groupSaveStateKey, {},
-                            objectInfo.m_nodeIndicatorFunction, 0);
-
-                        AddGroup(objectInfo.m_name, objectInfo.m_displayName, objectInfo.m_description, propertyGroupWidget);
-                        SetGroupVisible(objectInfo.m_name, objectInfo.m_visible);
-                    }
-                }
-
-                InspectorRequestBus::Handler::BusConnect(m_documentId);
-            });
-
-        AddGroupsEnd();
+        Populate();
     }
 
     void AtomToolsDocumentInspector::SetDocumentSettingsPrefix(const AZStd::string& prefix)
@@ -70,9 +37,7 @@ namespace AtomToolsFramework
 
     void AtomToolsDocumentInspector::Reset()
     {
-        m_documentId = AZ::Uuid::CreateNull();
         m_editInProgress = false;
-
         InspectorWidget::Reset();
     }
 
@@ -97,7 +62,7 @@ namespace AtomToolsFramework
     {
         if (m_documentId == documentId)
         {
-            RebuildAll();
+            Populate();
         }
     }
 
@@ -136,4 +101,48 @@ namespace AtomToolsFramework
             m_editInProgress = false;
         }
     }
+
+    void AtomToolsDocumentInspector::Populate()
+    {
+        AddGroupsBegin();
+
+        AtomToolsDocumentRequestBus::Event(
+            m_documentId,
+            [&](AtomToolsDocumentRequests* documentRequests)
+            {
+                if (documentRequests->IsOpen())
+                {
+                    // Create a unique settings prefix string per document using a CRC of the document path
+                    const AZStd::string groupSettingsPrefix = m_documentSettingsPrefix +
+                        AZStd::string::format("/%08x/GroupSettings", aznumeric_cast<AZ::u32>(AZ::Crc32(documentRequests->GetAbsolutePath())));
+                    SetGroupSettingsPrefix(groupSettingsPrefix);
+
+                    // This will automatically expose all document contents to an inspector with a collapsible group per object.
+                    // In the case of the material editor, this will be one inspector group per property group.
+                    for (auto& objectInfo : documentRequests->GetObjectInfo())
+                    {
+                        // Passing in same main and comparison instance to enable custom value comparison
+                        const AZ::Crc32 groupSaveStateKey(
+                            AZStd::string::format("%s/%s", groupSettingsPrefix.c_str(), objectInfo.m_name.c_str()));
+                        auto propertyGroupWidget = new InspectorPropertyGroupWidget(
+                            objectInfo.m_objectPtr,
+                            objectInfo.m_objectPtr,
+                            objectInfo.m_objectType,
+                            this,
+                            this,
+                            groupSaveStateKey,
+                            {},
+                            objectInfo.m_nodeIndicatorFunction,
+                            0);
+
+                        AddGroup(objectInfo.m_name, objectInfo.m_displayName, objectInfo.m_description, propertyGroupWidget);
+                        SetGroupVisible(objectInfo.m_name, objectInfo.m_visible);
+                    }
+                }
+
+                InspectorRequestBus::Handler::BusConnect(m_documentId);
+            });
+
+        AddGroupsEnd();
+    }
 } // namespace AtomToolsFramework