diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp index 409c780b8785edc4878f5c395d83fffe2d3b4cf7..6574c2c19807ae1e98b0fa0086a8f63c01d60eeb 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.cpp @@ -42,27 +42,6 @@ namespace armarx::armem::gui::instance { Logging::setTag("InstanceView"); - /*QLayout* layout = new QVBoxLayout(); - this->setLayout(layout); - int margin = 3; - layout->setContentsMargins(margin, margin, margin, margin); - - splitter = new QSplitter(Qt::Orientation::Vertical); - layout->addWidget(splitter); - - tree = new QTreeWidget(this); - splitter->addWidget(tree); - - QStringList columns; - columns.insert(int(Columns::KEY), "Key"); - columns.insert(int(Columns::VALUE), "Value"); - columns.insert(int(Columns::TYPE), "Type"); - tree->setColumnCount(columns.size()); - tree->setHeaderLabels(columns); - - tree->header()->resizeSection(int(Columns::KEY), 250); - tree->header()->resizeSection(int(Columns::VALUE), 250);*/ - treeItemInstanceID = new MemoryIDTreeWidgetItem({"Instance ID"}); treeItemInstanceID->addKeyChildren(); @@ -72,33 +51,13 @@ namespace armarx::armem::gui::instance treeItemMetadata->addChild(new QTreeWidgetItem({"Time Sent"})); treeItemMetadata->addChild(new QTreeWidgetItem({"Time Arrived"})); - //treeItemData = new QTreeWidgetItem({"Data"}); - QList<QTreeWidgetItem*> items = {treeItemInstanceID, treeItemMetadata}; tree->insertTopLevelItems(0, items); - /*for (auto* item : items) - { - item->setExpanded(true); - }*/ + treeItemInstanceID->setExpanded(true); treeItemMetadata->setExpanded(false); - - //tree->setContextMenuPolicy(Qt::CustomContextMenu); - //connect(tree, &QTreeWidget::customContextMenuRequested, this, &This::prepareTreeContextMenu); } - /*void InstanceView::setStatusLabel(QLabel* statusLabel) - { - this->statusLabel = statusLabel; - }*/ - - /*void InstanceView::setUseTypeInfo(bool enable) - { - this->useTypeInfo = enable; - update(); - }*/ - - void InstanceView::update(const MemoryID& id, const wm::Memory& memory) { aron::type::ObjectPtr aronType = nullptr; @@ -121,7 +80,6 @@ namespace armarx::armem::gui::instance } } - void InstanceView::update(const wm::EntityInstance& instance, aron::type::ObjectPtr aronType) { currentInstance = instance; @@ -129,7 +87,6 @@ namespace armarx::armem::gui::instance update(); } - void InstanceView::update() { if (currentInstance) @@ -143,64 +100,11 @@ namespace armarx::armem::gui::instance } } - - /*void InstanceView::addInstanceView(const wm::EntityInstance& instance, aron::type::ObjectPtr aronType) - { - // ARMARX_IMPORTANT << "Adding instance view with toolbar for instance: " << instance.id(); - InstanceView* view = new InstanceView; - view->setStatusLabel(statusLabel); - view->setUseTypeInfo(useTypeInfo); - - WidgetsWithToolbar* child = new WidgetsWithToolbar(); - child->addWidget(view); - - - splitter->addWidget(child); - - // Propagate this signal upwards. - connect(view, &InstanceView::memoryIdResolutionRequested, this, &This::memoryIdResolutionRequested); - connect(view, &InstanceView::actionsMenuRequested, this, &This::actionsMenuRequested); - - view->update(instance, aronType); - }*/ - - void InstanceView::updateInstanceID(const MemoryID& id) { treeItemInstanceID->setInstanceID(id, int(Columns::VALUE)); } - - /*void InstanceView::updateData( - const aron::data::DictPtr& data, aron::type::ObjectPtr aronType) - { - if (!data) - { - treeItemData->setText(int(Columns::TYPE), QString::fromStdString("")); - - armarx::gui::clearItem(treeItemData); - QTreeWidgetItem* item = new QTreeWidgetItem({"(No data.)"}); - treeItemData->addChild(item); - } - else if (useTypeInfo && aronType) - { - treeItemData->setText(int(Columns::TYPE), QString::fromStdString(sanitizeTypeName(aronType->getFullName()))); - - TypedDataTreeBuilder builder; - builder.setColumns(int(Columns::KEY), int(Columns::VALUE), int(Columns::TYPE)); - builder.updateTree(treeItemData, *aronType, *data); - } - else - { - treeItemData->setText(int(Columns::TYPE), QString::fromStdString("")); - - DataTreeBuilder builder; - builder.setColumns(int(Columns::KEY), int(Columns::VALUE), int(Columns::TYPE)); - builder.updateTree(treeItemData, data); - } - treeItemData->setExpanded(true); - }*/ - void InstanceView::updateMetaData(const wm::EntityInstanceMetadata& metadata) { std::vector<std::string> items = @@ -218,29 +122,6 @@ namespace armarx::armem::gui::instance } } - /*void InstanceView::showErrorMessage(const std::string& message) - { - if (statusLabel) - { - statusLabel->setText(QString::fromStdString(message)); - } - }*/ - - - /*std::optional<aron::Path> InstanceView::getElementPath(const QTreeWidgetItem* item) const - { - QStringList qpath = item->data(int(Columns::KEY), Qt::UserRole).toStringList(); - if (qpath.empty()) - { - return std::nullopt; - } - else - { - aron::Path path = deserializePath(qpath); - return path; - } - }*/ - QMenu* InstanceView::buildActionsMenu(const QPoint& pos) { auto* parentMenu = DataView::buildActionsMenu(pos); @@ -280,189 +161,4 @@ namespace armarx::armem::gui::instance return nullptr; } - /*std::optional<MemoryID> InstanceView::getElementMemoryID(const aron::Path& elementPath) - { - aron::data::VariantPtr element; - try - { - element = currentInstance->data()->navigateAbsolute(elementPath); - } - // This can happen when the underlying entity structure changes (a new entity has been selected). - catch (const aron::error::AronException&) - { - // showErrorMessage(e.what()); - return std::nullopt; - } - catch (const armarx::LocalException& e) - { - showErrorMessage(e.what()); - return std::nullopt; - } - - std::stringstream couldNotParseMsg; - couldNotParseMsg << "Element " << elementPath.toString() << " could not be parsed as MemoryID."; - - auto dictElement = std::dynamic_pointer_cast<aron::data::Dict>(element); - if (!dictElement) - { - showErrorMessage(couldNotParseMsg.str() + " (Failed to cast to DictNavigator.)"); - return std::nullopt; - } - - try - { - arondto::MemoryID dto; - dto.fromAron(dictElement); - - MemoryID id; - armem::fromAron(dto, id); - return id; - } - catch (const armarx::aron::error::AronException&) - { - showErrorMessage(couldNotParseMsg.str()); - return std::nullopt; - } - }*/ - - - /*QAction* InstanceView::makeActionResolveMemoryID(const MemoryID& id) - { - QAction* action = new QAction("Resolve memory ID"); - - if (not(id.hasEntityName() and id.isWellDefined())) - { - action->setDisabled(true); - action->setText(action->text() + " (incomplete Memory ID)"); - } - connect(action, &QAction::triggered, [this, id]() - { - // ARMARX_IMPORTANT << "emit memoryIdResolutionRequested(id = " << id << ")"; - emit memoryIdResolutionRequested(id); - }); - - return action; - } - - QAction* InstanceView::makeActionCopyMemoryID(const MemoryID& id) - { - QAction* action = new QAction("Copy memory ID to clipboard"); - - connect(action, &QAction::triggered, [/this,/ id]() // `this` for ARMARX_IMPORTANT - { - const QString idStr = QString::fromStdString(id.str()); - - // ARMARX_IMPORTANT << "Copy '" << idStr.toStdString() << "' to clipboard."; - QClipboard* clipboard = QApplication::clipboard(); - clipboard->setText(idStr); - QApplication::processEvents(); - }); - - return action; - } - - std::vector<QAction*> InstanceView::makeActionsCopyDataToClipboard() - { - return makeCopyActions(currentInstance->data(), currentAronType); - } - - std::vector<QAction*> InstanceView::makeActionsCopyDataToClipboard(const aron::Path& path) - { - try - { - aron::data::VariantPtr element = currentInstance->data()->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) - { - ARMARX_WARNING << "Could not convert Aron data to JSON: " << e.getReason(); - } - return {}; - } - - 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, elementType]() - { - try - { - TreeTypedJSONConverter conv; - armarx::aron::data::visitRecursive(conv, element, elementType); - QClipboard* clipboard = QApplication::clipboard(); - clipboard->setText(QString::fromStdString(conv.getJSON().dump(2))); - QApplication::processEvents(); - } - catch (const aron::error::AronException& e) - { - ARMARX_WARNING << "Could not convert Aron data to JSON: " << e.getReason(); - } - }); - - QAction* aronJsonAction = new QAction("Copy data to clipboard as aron JSON"); - connect(aronJsonAction, &QAction::triggered, [this, element]() - { - try - { - 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 {easyJsonAction, aronJsonAction}; - }*/ - - /*void InstanceView::showImageView(const aron::Path& elementPath) - { - if (not currentInstance) - { - return; - } - if (not imageView) - { - WidgetsWithToolbar* toolbar = new WidgetsWithToolbar(); - - imageView = new ImageView(); - imageView->toolbar = toolbar; - toolbar->addWidget(imageView); - - splitter->addWidget(toolbar); - - connect(toolbar, &WidgetsWithToolbar::closing, [this]() - { - imageView = nullptr; - }); - } - imageView->elementPath = elementPath; - updateImageView(currentInstance->data()); - } - - void InstanceView::removeImageView() - { - imageView->toolbar->close(); - imageView = nullptr; - }*/ - -} +} // namespace armarx::armem::gui::instance diff --git a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h index 624df6c06cb34723dd88086a46beb1a991db6882..34e2a0fa991d2f2e3fb3f417ca6acb3074c61eeb 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h +++ b/source/RobotAPI/libraries/armem_gui/instance/InstanceView.h @@ -24,97 +24,32 @@ namespace armarx::armem::gui::instance InstanceView(); - //void setStatusLabel(QLabel* statusLabel); - //void setUseTypeInfo(bool enable); - void update(const MemoryID& id, const wm::Memory& memory); void update(const wm::EntityInstance& instance, aron::type::ObjectPtr aronType = nullptr); void update() override; - //void addInstanceView(const wm::EntityInstance& instance, aron::type::ObjectPtr aronType = nullptr); - signals: - //void updated(); void instanceSelected(const MemoryID& id); - //void memoryIdResolutionRequested(const MemoryID& id); - //void actionsMenuRequested(const MemoryID& memoryID, QWidget* parent, - //const QPoint& pos, QMenu* menu); - private slots: void prepareTreeContextMenu(const QPoint& pos) override; - //void showImageView(const aron::Path& elementPath); - //void removeImageView(); - - private: aron::data::DictPtr getData() override; QMenu* buildActionsMenu(const QPoint& pos) override; void updateInstanceID(const MemoryID& id); - //void updateData(const aron::data::DictPtr& data, aron::type::ObjectPtr aronType = nullptr); void updateMetaData(const wm::EntityInstanceMetadata& metadata); - //void updateImageView(const aron::data::DictPtr& data); - - //void showErrorMessage(const std::string& message); - - //std::optional<aron::Path> getElementPath(const QTreeWidgetItem* item) const; - //std::optional<MemoryID> getElementMemoryID(const aron::Path& elementPath); - - /*QAction* makeActionResolveMemoryID(const MemoryID& id); - 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, - const aron::type::VariantPtr& elementType);*/ - private: std::optional<wm::EntityInstance> currentInstance; - //QSplitter* splitter; - - //QTreeWidget* tree; MemoryIDTreeWidgetItem* treeItemInstanceID; QTreeWidgetItem* treeItemMetadata; - //QTreeWidgetItem* treeItemData; - - - /*class ImageView : public QGroupBox - { - public: - ImageView(); - - QImage convertDepth32ToRGB32(const aron::data::NDArray& aron); - - instance::ImageView* view; - aron::Path elementPath; - - WidgetsWithToolbar* toolbar; - - - struct Limits - { - float min = std::numeric_limits<float>::max(); - float max = -std::numeric_limits<float>::max(); - }; - - /// Color map to visualize depth images. - simox::ColorMap cmap; - /// History over first n extremal depth values used to calibrate the colormap. - std::deque<Limits> limitsHistory; - /// In this context, n. - const size_t limitsHistoryMaxSize; - }; - ImageView* imageView = nullptr; - - QLabel* statusLabel = nullptr;*/ };