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