diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui index 3e94dc5e5c3e13bd866c92c428f5d619317806ac..819331b5f27f58c036bb867e8a17dda8a0c8b977 100644 --- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui @@ -15,39 +15,43 @@ </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <layout class="QHBoxLayout" name="ltmControlWidgetLayout"> - <property name="spacing"> - <number>6</number> - </property> + <layout class="QHBoxLayout" name="topRowLayout"> <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> + <layout class="QHBoxLayout" name="updateWidgetLayout"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="updateWidgetLayout"> <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> + <layout class="QHBoxLayout" name="ltmControlWidgetLayout"> + <property name="spacing"> + <number>6</number> </property> - </spacer> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> </item> </layout> </item> diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp index f313b6951c2f201251787ec6a6e6b4b5b0026e4c..83d1d8743a3b6ed0ebfeca5c704c96334b22108a 100644 --- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp @@ -41,9 +41,9 @@ namespace armarx widget.setupUi(getWidget()); viewer = std::make_unique<MemoryViewer>( - widget.ltmControlWidgetLayout, widget.updateWidgetLayout, + widget.ltmControlWidgetLayout, widget.memoryGroupBox, widget.treesLayout, diff --git a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp index 3f40956a61149b1aca6af0b0fa2a9c3f129a18da..447b35332a60a3442b63e07a2c5e129b5b7b83d1 100644 --- a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp +++ b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp @@ -27,36 +27,43 @@ namespace armarx::armem::gui { MemoryViewer::MemoryViewer( - QBoxLayout* ltmControlWidgetLayout, QBoxLayout* updateWidgetLayout, - QGroupBox* _memoryGroupBox, QLayout* memoryGroupBoxParentLayout, - QGroupBox* _instanceGroupBox, QLayout* instanceGroupBoxParentLayout, - QLabel* statusLabel) + QBoxLayout* ltmControlWidgetLayout, + QGroupBox* memoryGroupBox, QLayout* memoryGroupBoxParentLayout, + QGroupBox* instanceGroupBox, QLayout* instanceGroupBoxParentLayout, + QLabel* statusLabel + ) { Logging::setTag("MemoryViewer"); this->statusLabel = statusLabel; this->statusLabel->clear(); - // LTM Control - this->ltmControlWidgetLayout = ltmControlWidgetLayout; - ltmControlWidget = new armem::gui::LTMControlWidget(); - ltmControlWidgetLayout->insertWidget(0, ltmControlWidget); - // Update timer this->updateWidgetLayout = updateWidgetLayout; updateWidget = new armem::gui::PeriodicUpdateWidget(2.0, 60); updateWidgetLayout->insertWidget(0, updateWidget); + // LTM Control + if (ltmControlWidgetLayout) + { + this->ltmControlWidgetLayout = ltmControlWidgetLayout; + ltmControlWidget = new armem::gui::LTMControlWidget(); + ltmControlWidgetLayout->addWidget(ltmControlWidget); + } + + // Memory View memoryGroup = new armem::gui::MemoryGroupBox(); - armarx::gui::replaceWidget(_memoryGroupBox, memoryGroup, memoryGroupBoxParentLayout); - ARMARX_CHECK_NULL(_memoryGroupBox); + armarx::gui::replaceWidget(memoryGroupBox, memoryGroup, memoryGroupBoxParentLayout); + ARMARX_CHECK_NULL(memoryGroupBox); + // Instance View this->instanceGroup = new armem::gui::InstanceGroupBox(); - armarx::gui::replaceWidget(_instanceGroupBox, instanceGroup, instanceGroupBoxParentLayout); + armarx::gui::replaceWidget(instanceGroupBox, instanceGroup, instanceGroupBoxParentLayout); this->instanceGroup->setStatusLabel(statusLabel); - ARMARX_CHECK_NULL(_instanceGroupBox); + ARMARX_CHECK_NULL(instanceGroupBox); + // Connections //connect(this, &This::connected, this, &This::updateMemory); connect(ltmControlWidget, &armem::gui::LTMControlWidget::store, this, &This::store); diff --git a/source/RobotAPI/libraries/armem_gui/MemoryViewer.h b/source/RobotAPI/libraries/armem_gui/MemoryViewer.h index c2c2e6f4c7d251f23f19cb2f7275878940a603d5..19ab5000d9d662080b80e621144650fd887a0bcd 100644 --- a/source/RobotAPI/libraries/armem_gui/MemoryViewer.h +++ b/source/RobotAPI/libraries/armem_gui/MemoryViewer.h @@ -44,10 +44,10 @@ namespace armarx::armem::gui public: MemoryViewer( - QBoxLayout* ltmControlWidgetLayout, QBoxLayout* updateWidgetLayout, - QGroupBox* _memoryGroupBox, QLayout* memoryGroupBoxParentLayout, - QGroupBox* _instanceGroupBox, QLayout* instanceGroupBoxParentLayout, + QBoxLayout* ltmControlWidgetLayout, + QGroupBox* memoryGroupBox, QLayout* memoryGroupBoxParentLayout, + QGroupBox* instanceGroupBox, QLayout* instanceGroupBoxParentLayout, QLabel* statusLabel ); @@ -106,15 +106,15 @@ namespace armarx::armem::gui std::map<std::string, armem::client::Reader> memoryReaders; std::map<std::string, std::optional<armem::wm::Memory>> memoryData; - QLayout* ltmControlWidgetLayout; - armem::gui::LTMControlWidget* ltmControlWidget; + QLayout* updateWidgetLayout = nullptr; + armem::gui::PeriodicUpdateWidget* updateWidget = nullptr; - QLayout* updateWidgetLayout; - armem::gui::PeriodicUpdateWidget* updateWidget; + QLayout* ltmControlWidgetLayout = nullptr; + armem::gui::LTMControlWidget* ltmControlWidget = nullptr; - armem::gui::MemoryGroupBox* memoryGroup; + armem::gui::MemoryGroupBox* memoryGroup = nullptr; - armem::gui::InstanceGroupBox* instanceGroup; + armem::gui::InstanceGroupBox* instanceGroup = nullptr; QLabel* statusLabel = nullptr; diff --git a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp index 3d4c50f66c6263ec474acd552233b86f895a7862..a410033a4dcdda6b0e17f0de7ab35e4f9a044f12 100644 --- a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp +++ b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.cpp @@ -74,7 +74,7 @@ namespace armarx::armem::gui::memory }); workingmemoryCoreSegmentBuilder.setUpdateItemFn([this](const std::string&, const wm::CoreSegment & coreSeg, QTreeWidgetItem * coreSegItem) { - updateTypedContainerItem(coreSeg, coreSegItem); + updateContainerItem(coreSeg, coreSegItem); updateChildren(coreSeg, coreSegItem); return true; }); @@ -86,7 +86,7 @@ namespace armarx::armem::gui::memory }); workingmemoryProvSegmentBuilder.setUpdateItemFn([this](const std::string&, const wm::ProviderSegment & provSeg, QTreeWidgetItem * provSegItem) { - updateTypedContainerItem(provSeg, provSegItem); + updateContainerItem(provSeg, provSegItem); updateChildren(provSeg, provSegItem); return true; }); @@ -279,28 +279,26 @@ namespace armarx::armem::gui::memory template <class... T> void TreeWidget::updateContainerItem( - const armem::wm::detail::MemoryContainer<T...>& container, QTreeWidgetItem* item) + const base::detail::MemoryContainerBase<T...>& container, QTreeWidgetItem* item) { updateItemItem(container, item); item->setText(int(Columns::SIZE), QString::number(container.size())); - } - template <class... T> - void TreeWidget::updateTypedContainerItem( - const armem::wm::detail::TypedEntityContainer<T...>& container, QTreeWidgetItem* item) - { - updateContainerItem(container, item); - std::string typeName; - if (container.aronType()) - { - typeName = container.aronType()->getName(); - typeName = instance::sanitizeTypeName(typeName); - } - else + if constexpr(std::is_base_of_v<base::detail::AronTyped, base::detail::MemoryContainerBase<T...>>) { - typeName = "(no Aron type)"; + const base::detail::AronTyped& cast = dynamic_cast<const base::detail::AronTyped&>(container); + std::string typeName; + if (cast.aronType()) + { + typeName = cast.aronType()->getName(); + typeName = instance::sanitizeTypeName(typeName); + } + else + { + typeName = "(no Aron type)"; + } + item->setText(int(Columns::TYPE), QString::fromStdString(typeName)); } - item->setText(int(Columns::TYPE), QString::fromStdString(typeName)); } } diff --git a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.h b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.h index 1ce80192013f4d045ff84b4f461589bbd4a43297..2bcf0fa1b6135534407044a3ce341b86afeab442 100644 --- a/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.h +++ b/source/RobotAPI/libraries/armem_gui/memory/TreeWidget.h @@ -71,9 +71,7 @@ namespace armarx::armem::gui::memory void updateItemItem(const armem::base::detail::MemoryItem& level, QTreeWidgetItem* item); template <class... T> - void updateContainerItem(const armem::wm::detail::MemoryContainer<T...>& container, QTreeWidgetItem* item); - template <class... T> - void updateTypedContainerItem(const armem::wm::detail::TypedEntityContainer<T...>& container, QTreeWidgetItem* item); + void updateContainerItem(const armem::base::detail::MemoryContainerBase<T...>& container, QTreeWidgetItem* item); private: