From 99635aa0421be68b4b84678e07598ca17a3888a5 Mon Sep 17 00:00:00 2001
From: phesch <ulila@student.kit.edu>
Date: Tue, 22 Feb 2022 19:51:10 +0100
Subject: [PATCH] Allow easy JSON export to start on untyped data

Also fixes a segfault that occurred when right-clicking on an
InstanceView entry when "Use Type Information" was deactivated.
---
 .../libraries/armem_gui/instance/InstanceView.cpp | 15 ++++++++++++++-
 .../tree_builders/TypedDataTreeBuilder.cpp        |  3 +++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
index 13ce08b7e..708ba8739 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
@@ -454,7 +454,20 @@ namespace armarx::armem::gui::instance
         try
         {
             aron::data::VariantPtr element = currentInstance->data()->navigateAbsolute(path);
-            aron::type::VariantPtr elementType = currentAronType->navigateAbsolute(path);
+            aron::type::VariantPtr elementType = nullptr;
+            if (currentAronType)
+            {
+                // There doesn't seem to be a way to check whether the path exists
+                // without potentially throwing an exception.
+                try
+                {
+                    elementType = currentAronType->navigateAbsolute(path);
+                }
+                catch (const aron::error::AronException& e)
+                {
+                    // No type available, elementType remains nullptr.
+                }
+            }
             return makeCopyActions(element, elementType);
         }
         catch (const aron::error::AronException& e)
diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp b/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp
index e2537e0c5..de85c11c0 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/tree_builders/TypedDataTreeBuilder.cpp
@@ -249,6 +249,9 @@ namespace armarx::armem::gui::instance
         {
             this->setRowTexts(item, key, data);
 
+            item->setData(columnKey, Qt::UserRole,
+                    data ? instance::serializePath(data->getPath()) : QStringList());
+
             if (auto cast = aron::data::Dict::DynamicCast(data))
             {
                 DataTreeBuilder builder;
-- 
GitLab