From 03ea41901bc8795a1c30e732c7fd16567e30bbb8 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 24 Jun 2021 15:43:54 +0200 Subject: [PATCH] Add reloading to Object/Class segment --- .../server/ObjectMemory/ObjectMemory.cpp | 23 ++++++++++++------- .../armem/server/ObjectMemory/ObjectMemory.h | 2 +- .../armem_objects/server/class/Segment.cpp | 15 +++++++++++- .../armem_objects/server/class/Segment.h | 3 +++ 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp index b6d997f68..8eed518e4 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp @@ -185,28 +185,35 @@ namespace armarx::armem::server::obj { using namespace armarx::RemoteGui::Client; - tab.instance.setup(*this); - tab.clazz.setup(classSegment); + tab.reset(new RemoteGuiTab); + + tab->instance.setup(*this); + tab->clazz.setup(classSegment); HBoxLayout segments = { - tab.instance.group, - tab.clazz.group + tab->instance.group, + tab->clazz.group }; VBoxLayout root = { segments, VSpacer() }; - RemoteGui_createTab(Component::getName(), root, &tab); + RemoteGui_createTab(Component::getName(), root, tab.get()); } + void ObjectMemory::RemoteGui_update() { // Non-atomic variables need to be guarded by a mutex if accessed by multiple threads - tab.instance.update(*this); - tab.clazz.update(classSegment); + tab->instance.update(*this); + tab->clazz.update(classSegment); + + if (tab->clazz.data.rebuild) + { + createRemoteGuiTab(); + } } } - diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h index 2dfd668d1..a513016a3 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h @@ -122,7 +122,7 @@ namespace armarx::armem::server::obj instance::SegmentAdapter::RemoteGui instance; clazz::Segment::RemoteGui clazz; }; - RemoteGuiTab tab; + std::unique_ptr<RemoteGuiTab> tab; }; diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp index 93989e18d..323a4df0d 100644 --- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp @@ -79,7 +79,10 @@ namespace armarx::armem::server::obj::clazz std::vector<ObjectInfo> infos = objectFinder.findAllObjects(checkPaths); const MemoryID providerID = coreSegment->id().withProviderSegmentName(objectFinder.getPackageName()); - coreSegment->addProviderSegment(providerID.providerSegmentName); + if (not coreSegment->hasProviderSegment(providerID.providerSegmentName)) + { + coreSegment->addProviderSegment(providerID.providerSegmentName); + } ARMARX_INFO << "Loading up to " << infos.size() << " object classes from '" << objectFinder.getPackageName() << "' ..."; @@ -225,12 +228,16 @@ namespace armarx::armem::server::obj::clazz { using namespace armarx::RemoteGui::Client; + reloadButton.setLabel("Reload"); + maxHistorySize.setValue(std::max(1, int(segment.p.maxHistorySize))); maxHistorySize.setRange(1, 1e6); infiniteHistory.setValue(segment.p.maxHistorySize == -1); GridLayout grid; int row = 0; + grid.add(reloadButton, {row, 0}, {1, 2}); + row++; grid.add(Label("Max History Size"), {row, 0}).add(maxHistorySize, {row, 1}); row++; grid.add(Label("Infinite History Size"), {row, 0}).add(infiniteHistory, {row, 1}); @@ -243,6 +250,12 @@ namespace armarx::armem::server::obj::clazz void Segment::RemoteGui::Data::update(Segment& segment) { + if (reloadButton.wasClicked()) + { + std::scoped_lock lock(segment.memoryMutex); + segment.loadByObjectFinder(); + rebuild = true; + } if (infiniteHistory.hasValueChanged() || maxHistorySize.hasValueChanged()) { std::scoped_lock lock(segment.memoryMutex); diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.h b/source/RobotAPI/libraries/armem_objects/server/class/Segment.h index 7356e6a1d..88eaedbef 100644 --- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.h +++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.h @@ -76,11 +76,14 @@ namespace armarx::armem::server::obj::clazz { armarx::RemoteGui::Client::GroupBox group; + armarx::RemoteGui::Client::Button reloadButton; armarx::RemoteGui::Client::IntSpinBox maxHistorySize; armarx::RemoteGui::Client::CheckBox infiniteHistory; void setup(const Segment& segment); void update(Segment& segment); + + bool rebuild = false; }; Data data; -- GitLab