diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp index b8704e934cbac1f17b8d1fe887f5c2707cae3bc2..b1f347c46cc32a391212d1cd89c88255f7703aa8 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp @@ -20,6 +20,7 @@ #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h> #include <RobotAPI/libraries/aron/core/data/variant/complex/NDArray.h> #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> @@ -324,7 +325,12 @@ namespace armarx::armem::gui::instance } } } - + + const std::optional<aron::Path> elementPath = getElementPath(item); + if (elementPath) + { + menu.addAction(makeActionCopyDataToClipboard(elementPath.value())); + } if (menu.actions().size() > 0) { @@ -414,6 +420,30 @@ namespace armarx::armem::gui::instance return action; } + QAction* InstanceView::makeActionCopyDataToClipboard(const aron::Path& path) + { + QAction* action = new QAction("Copy data to clipboard as JSON"); + + connect(action, &QAction::triggered, [this, path]() + { + try + { + aron::data::VariantPtr element = currentInstance->data()->navigateAbsolute(path); + nlohmann::json json = + aron::converter::AronNlohmannJSONConverter::ConvertToNlohmannJSON(element); + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(QString::fromStdString(json.dump(2))); + QApplication::processEvents(); + } + catch (const aron::error::AronException& e) + { + ARMARX_WARNING << "Could not convert Aron data to JSON: " << e.getReason(); + } + }); + + return action; + } + void InstanceView::showImageView(const aron::Path& elementPath) { diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h index 314ed98954699e58f54a8be914ee3d14bc308ecf..1dc2ce13ec8fadad24072d9301817ceca7779a64 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h @@ -79,6 +79,7 @@ namespace armarx::armem::gui::instance QAction* makeActionResolveMemoryID(const MemoryID& id); QAction* makeActionCopyMemoryID(const MemoryID& id); + QAction* makeActionCopyDataToClipboard(const aron::Path& path); private: