From 59a4a8429c4093404572c9a8745428438f8b4a62 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Fri, 30 Apr 2021 13:43:52 +0200 Subject: [PATCH] Move LTM control in MemoryViewer --- .../ArMemMemoryViewerWidget.ui | 62 ++++++++++--------- .../ArMemMemoryViewerWidgetController.cpp | 2 +- .../libraries/armem_gui/MemoryViewer.cpp | 33 ++++++---- .../libraries/armem_gui/MemoryViewer.h | 18 +++--- .../libraries/armem_gui/memory/TreeWidget.cpp | 34 +++++----- .../libraries/armem_gui/memory/TreeWidget.h | 4 +- 6 files changed, 80 insertions(+), 73 deletions(-) diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidget.ui index 3e94dc5e5..819331b5f 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 f313b6951..83d1d8743 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 3f40956a6..447b35332 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 c2c2e6f4c..19ab5000d 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 3d4c50f66..a410033a4 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 1ce801920..2bcf0fa1b 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: -- GitLab