From 41b142ddf0f9978ca4b2f6f1be78eb131d5e0445 Mon Sep 17 00:00:00 2001 From: Raphael Grimm <raphael.grimm@kit.edu> Date: Fri, 6 Sep 2019 18:16:55 +0200 Subject: [PATCH] Do not update the sub widget if it is not visible --- .../QWidgets/ControlDevicesWidget.cpp | 5 +++- .../NJointControllerClassesWidget.cpp | 5 +++- .../QWidgets/NJointControllersWidget.cpp | 15 ++++++++--- .../QWidgets/RobotUnitWidgetBase.cpp | 25 ++++++++++++++++--- .../QWidgets/RobotUnitWidgetBase.h | 2 ++ .../QWidgets/SensorDevicesWidget.cpp | 5 +++- .../RobotUnitPluginWidgetController.cpp | 9 ++++++- 7 files changed, 56 insertions(+), 10 deletions(-) diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/ControlDevicesWidget.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/ControlDevicesWidget.cpp index e3ad0afa9..11e79d682 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/ControlDevicesWidget.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/ControlDevicesWidget.cpp @@ -78,7 +78,10 @@ namespace armarx if (statusUpdates[status.deviceName].timestampUSec < status.timestampUSec) { statusUpdates[status.deviceName] = status; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllerClassesWidget.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllerClassesWidget.cpp index b0bb952ea..81a9f43b7 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllerClassesWidget.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllerClassesWidget.cpp @@ -100,7 +100,10 @@ namespace armarx auto data = ru->getNJointControllerClassDescription(name); guard.lock(); nJointControllerClassDescriptions[data.className] = std::move(data); - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } void NJointControllerClassesWidget::updateDefaultNameOnControllerCreated(QString createdName, bool force) diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllersWidget.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllersWidget.cpp index 3e4f830f1..157900996 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllersWidget.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/NJointControllersWidget.cpp @@ -97,7 +97,10 @@ namespace armarx if (statusUpdates[status.instanceName].timestampUSec < status.timestampUSec) { statusUpdates[status.instanceName] = status; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } @@ -149,7 +152,10 @@ namespace armarx if (!entries.count(name)) { controllersCreated[name] = std::move(data); - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } @@ -157,7 +163,10 @@ namespace armarx { std::unique_lock<std::recursive_timed_mutex> guard {mutex}; controllersDeleted.emplace(name); - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } void NJointControllersWidget::loadSettings(QSettings* settings) diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp index cec5e3d55..74d4b1807 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.cpp @@ -59,6 +59,16 @@ namespace armarx QMetaObject::invokeMethod(this, "doReset", Qt::QueuedConnection); } + void RobotUnitWidgetBase::setVisible(bool visible) + { + doMetaCall = visible; + if (visible) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } + QWidget::setVisible(visible); + } + void RobotUnitWidgetBase::doReset() { std::unique_lock<std::recursive_timed_mutex> guard {mutex}; @@ -84,7 +94,10 @@ namespace armarx << armarx::GetHandledExceptionString(); } gotResetData = true; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } ARMARX_INFO << "Resetting of widget '" << objectName().toStdString() << "' done!"; } } .detach(); @@ -92,7 +105,10 @@ namespace armarx else { gotResetData = true; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } @@ -106,7 +122,10 @@ namespace armarx { killTimer(resetTimerId); resetTimerId = 0; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } } diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.h b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.h index d0fe28f26..c797891f0 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.h +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/RobotUnitWidgetBase.h @@ -53,6 +53,7 @@ namespace armarx virtual void loadSettings(QSettings*) {} virtual void saveSettings(QSettings*) {} + void setVisible(bool visible) override; protected slots: void updateContent(); private slots: @@ -80,6 +81,7 @@ namespace armarx int resetTimerId {0}; int resetCount {0}; std::atomic_bool isResetting {false}; + std::atomic_bool doMetaCall {false}; }; template<class UI> diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/SensorDevicesWidget.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/SensorDevicesWidget.cpp index 070f04019..5afd04ce7 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/SensorDevicesWidget.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/QWidgets/SensorDevicesWidget.cpp @@ -62,7 +62,10 @@ namespace armarx if (statusUpdates[status.deviceName].timestampUSec < status.timestampUSec) { statusUpdates[status.deviceName] = status; - QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + if (doMetaCall) + { + QMetaObject::invokeMethod(this, "updateContent", Qt::QueuedConnection); + } } } diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp index 8fdc20d0a..7a0b8ca72 100644 --- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp @@ -46,6 +46,7 @@ RobotUnitPluginWidgetController::RobotUnitPluginWidgetController() widget.groupBoxCDev->layout()->addWidget(controlDevices); widget.groupBoxCDev->setVisible(false); controlDevices->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); + controlDevices->setVisible(false); } //add subwidget SensorDevices { @@ -53,6 +54,7 @@ RobotUnitPluginWidgetController::RobotUnitPluginWidgetController() widget.groupBoxSDev->layout()->addWidget(sensorDevices); widget.groupBoxSDev->setVisible(false); sensorDevices->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); + sensorDevices->setVisible(false); } //add subwidget NJointControllers { @@ -60,6 +62,7 @@ RobotUnitPluginWidgetController::RobotUnitPluginWidgetController() widget.groupBoxNJointCtrl->layout()->addWidget(nJointControllers); widget.groupBoxNJointCtrl->setVisible(true); nJointControllers->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); + nJointControllers->setVisible(true); } //add subwidget NJointControllerClasses { @@ -67,6 +70,7 @@ RobotUnitPluginWidgetController::RobotUnitPluginWidgetController() widget.groupBoxNJointCtrlClasses->layout()->addWidget(nJointControllerClasses); widget.groupBoxNJointCtrlClasses->setVisible(false); nJointControllerClasses->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding); + nJointControllerClasses->setVisible(false); } updateToolBarActionCheckedState(); } @@ -157,6 +161,7 @@ QPointer<QWidget> RobotUnitPluginWidgetController::getCustomTitlebarWidget(QWidg showCDevs->setCheckable(true); showCDevs->setToolTip("Hide/Show the list of Control Devices"); connect(showCDevs, SIGNAL(toggled(bool)), widget.groupBoxCDev, SLOT(setVisible(bool))); + connect(showCDevs, SIGNAL(toggled(bool)), controlDevices, SLOT(setVisible(bool))); customToolbar->addAction(showCDevs); customToolbar->addSeparator(); @@ -166,6 +171,7 @@ QPointer<QWidget> RobotUnitPluginWidgetController::getCustomTitlebarWidget(QWidg showSDevs->setCheckable(true); showSDevs->setToolTip("Hide/Show the list of Sensor Devices"); connect(showSDevs, SIGNAL(toggled(bool)), widget.groupBoxSDev, SLOT(setVisible(bool))); + connect(showSDevs, SIGNAL(toggled(bool)), sensorDevices, SLOT(setVisible(bool))); customToolbar->addAction(showSDevs); customToolbar->addSeparator(); @@ -175,6 +181,7 @@ QPointer<QWidget> RobotUnitPluginWidgetController::getCustomTitlebarWidget(QWidg showNJoint->setCheckable(true); showNJoint->setToolTip("Hide/Show the list of NJointControllers"); connect(showNJoint, SIGNAL(toggled(bool)), widget.groupBoxNJointCtrl, SLOT(setVisible(bool))); + connect(showNJoint, SIGNAL(toggled(bool)), nJointControllers, SLOT(setVisible(bool))); customToolbar->addAction(showNJoint); customToolbar->addSeparator(); @@ -184,6 +191,7 @@ QPointer<QWidget> RobotUnitPluginWidgetController::getCustomTitlebarWidget(QWidg showNJointClasses->setCheckable(true); showNJointClasses->setToolTip("Hide/Show the list of NJointControllers Classes"); connect(showNJointClasses, SIGNAL(toggled(bool)), widget.groupBoxNJointCtrlClasses, SLOT(setVisible(bool))); + connect(showNJointClasses, SIGNAL(toggled(bool)), nJointControllerClasses, SLOT(setVisible(bool))); customToolbar->addAction(showNJointClasses); customToolbar->addSeparator(); @@ -265,7 +273,6 @@ void RobotUnitPluginWidgetController::updateToolBarActionCheckedState() } } - void armarx::RobotUnitPluginWidgetController::timerEvent(QTimerEvent*) { if (!robotUnitPrx) -- GitLab