From ace305168dde27a8c74142b4697ecd971d29ba2e Mon Sep 17 00:00:00 2001
From: phesch <ulila@student.kit.edu>
Date: Tue, 22 Feb 2022 16:32:50 +0100
Subject: [PATCH] Enable easy JSON partial object copies

---
 .../armem_gui/instance/InstanceView.cpp          | 16 ++++++++--------
 .../libraries/armem_gui/instance/InstanceView.h  |  4 +++-
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
index 3bbb2ee55..13ce08b7e 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp
@@ -446,7 +446,7 @@ namespace armarx::armem::gui::instance
 
     std::vector<QAction*> InstanceView::makeActionsCopyDataToClipboard()
     {
-        return makeCopyActions(currentInstance->data());
+        return makeCopyActions(currentInstance->data(), currentAronType);
     }
 
     std::vector<QAction*> InstanceView::makeActionsCopyDataToClipboard(const aron::Path& path)
@@ -454,7 +454,8 @@ namespace armarx::armem::gui::instance
         try
         {
             aron::data::VariantPtr element = currentInstance->data()->navigateAbsolute(path);
-            return makeCopyActions(element);
+            aron::type::VariantPtr elementType = currentAronType->navigateAbsolute(path);
+            return makeCopyActions(element, elementType);
         }
         catch (const aron::error::AronException& e)
         {
@@ -463,18 +464,17 @@ namespace armarx::armem::gui::instance
         return {};
     }
 
-    std::vector<QAction*> InstanceView::makeCopyActions(const aron::data::VariantPtr& element)
+    std::vector<QAction*> InstanceView::makeCopyActions(
+            const aron::data::VariantPtr& element,
+            const aron::type::VariantPtr& elementType)
     {
         QAction* easyJsonAction = new QAction("Copy data to clipboard as easy JSON");
-        connect(easyJsonAction, &QAction::triggered, [this, element]()
+        connect(easyJsonAction, &QAction::triggered, [this, element, elementType]()
         {
             try
             {
                 TreeTypedJSONConverter conv;
-                // TODO(phesch): Type hierarchy doesn't match data hierarchy
-                armarx::aron::data::visitRecursive(conv, currentInstance->data(), currentAronType);
-                //nlohmann::json json =
-                //   aron::converter::AronNlohmannJSONConverter::ConvertToNlohmannJSON(element);
+                armarx::aron::data::visitRecursive(conv, element, elementType);
                 QClipboard* clipboard = QApplication::clipboard();
                 clipboard->setText(QString::fromStdString(conv.getJSON().dump(2)));
                 QApplication::processEvents();
diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h
index 982d277db..970af2b6e 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h
@@ -84,7 +84,9 @@ namespace armarx::armem::gui::instance
         QAction* makeActionCopyMemoryID(const MemoryID& id);
         std::vector<QAction*> makeActionsCopyDataToClipboard();
         std::vector<QAction*> makeActionsCopyDataToClipboard(const aron::Path& path);
-        std::vector<QAction*> makeCopyActions(const aron::data::VariantPtr& element);
+        std::vector<QAction*> makeCopyActions(
+                const aron::data::VariantPtr& element,
+                const aron::type::VariantPtr& elementType);
 
 
     private:
-- 
GitLab