diff --git a/source/ArmarXGui/applications/ArmarXGui/CMakeLists.txt b/source/ArmarXGui/applications/ArmarXGui/CMakeLists.txt index 2c734ff00cb89406b4ece73ef4d6707e42b16601..8fbbc25929025a09424afed9cec1226887e01561 100644 --- a/source/ArmarXGui/applications/ArmarXGui/CMakeLists.txt +++ b/source/ArmarXGui/applications/ArmarXGui/CMakeLists.txt @@ -40,6 +40,10 @@ set(HEADERS ArmarXGuiApp.h Widgets/GuiUseCaseSelector.ui ) +if ( CMAKE_COMPILER_IS_GNUCC ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=deprecated-enum-enum-conversion") +endif() + find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.cpp b/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.cpp index b50889f201da98dee4b69cf55df7c3c1d9f69e16..db34724ea0c4b0d261d9a3613923a8199dbbf04d 100644 --- a/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.cpp +++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.cpp @@ -35,14 +35,18 @@ namespace armarx EmergencyStopWidget::EmergencyStopWidget(QWidget* parent, ArmarXMainWindow* mainWindow) : mainWindow(mainWindow), iconNormal(QPixmap::fromImage(QImage(QString::fromUtf8(":/icons/emergency-stop.png")))), - iconDark(QPixmap::fromImage(QImage(QString::fromUtf8(":/icons/emergency-stop-dark.png")))), timer(new QTimer(this)) + iconDark(QPixmap::fromImage(QImage(QString::fromUtf8(":/icons/emergency-stop-dark.png")))), + timer(new QTimer(this)) { qRegisterMetaType<EmergencyStopState>("EmergencyStopState"); timer->setInterval(std::chrono::milliseconds(100)); connect(timer, &QTimer::timeout, this, &EmergencyStopWidget::updateEmergencyStopState); - connect(this, &EmergencyStopWidget::startPeriodicStateUpdate, timer, qOverload<>(&QTimer::start)); + connect(this, + &EmergencyStopWidget::startPeriodicStateUpdate, + timer, + qOverload<>(&QTimer::start)); connect(this, &EmergencyStopWidget::stopPeriodicStateUpdate, timer, &QTimer::stop); QIcon icon; icon.addPixmap(iconNormal, QIcon::Normal, QIcon::Off); @@ -60,12 +64,16 @@ namespace armarx layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); this->getWidget()->setLayout(gridLayout); - emergencyStopShortcut = new QShortcut(this->getWidget()); - emergencyStopShortcut->setContext(Qt::ApplicationShortcut); - emergencyStopShortcut->setKey(Qt::Key_Pause); - connect(emergencyStopShortcut, SIGNAL(activated()), this, SLOT(clicked())); - connect(button, SIGNAL(clicked(bool)), this, SLOT(clicked(bool))); + enableSS2Shortcut = new QShortcut(this->getWidget()); + enableSS2Shortcut->setContext(Qt::ApplicationShortcut); + enableSS2Shortcut->setKey(Qt::Key_Pause); + + releaseSS2Shortcut = new QShortcut(this->getWidget()); + releaseSS2Shortcut->setContext(Qt::ApplicationShortcut); + releaseSS2Shortcut->setKey(Qt::SHIFT | Qt::Key_Pause); + + connect(button, &QPushButton::clicked, this, &EmergencyStopWidget::clicked); std::stringstream str; str << "After EmergencyStop was activated, you have to wait " << deactivationWaitPeriod.count() << " ms before you can deactivate it."; @@ -91,6 +99,9 @@ namespace armarx emergencyStopMasterPrx = getProxy<EmergencyStopMasterInterfacePrx>(EMERGENCY_STOP_PROXY); QMetaObject::invokeMethod(button, "setVisible", Qt::QueuedConnection, Q_ARG(bool, true)); + connect(enableSS2Shortcut, &QShortcut::activated, this, &EmergencyStopWidget::enableSS2); + connect(releaseSS2Shortcut, &QShortcut::activated, this, &EmergencyStopWidget::releaseSS2); + QMetaObject::invokeMethod( this, "setChecked", @@ -118,32 +129,52 @@ namespace armarx { } -// void EmergencyStopWidget::reportEmergencyStopState(EmergencyStopState state, const Ice::Current&) -// { -// QMetaObject::invokeMethod(this, "setChecked", Qt::QueuedConnection, Q_ARG(EmergencyStopState, state)); -// } + // void EmergencyStopWidget::reportEmergencyStopState(EmergencyStopState state, const Ice::Current&) + // { + // QMetaObject::invokeMethod(this, "setChecked", Qt::QueuedConnection, Q_ARG(EmergencyStopState, state)); + // } void - EmergencyStopWidget::clicked(bool checked) + EmergencyStopWidget::enableSS2() { - EmergencyStopState state = emergencyStopMasterPrx->getEmergencyStopState(); - switch (state) + if (emergencyStopMasterPrx) { - case EmergencyStopState::eEmergencyStopActive: - if (clock_t::now() > timeLastActivated + deactivationWaitPeriod) - { - emergencyStopMasterPrx->setEmergencyStopState( - EmergencyStopState::eEmergencyStopInactive); - } - else - { - button->setChecked(true); - } - break; - case EmergencyStopState::eEmergencyStopInactive: + emergencyStopMasterPrx->setEmergencyStopState(EmergencyStopState::eEmergencyStopActive); + } + } + + void + EmergencyStopWidget::releaseSS2() + { + if (clock_t::now() > timeLastActivated + deactivationWaitPeriod) + { + if (emergencyStopMasterPrx) + { emergencyStopMasterPrx->setEmergencyStopState( - EmergencyStopState::eEmergencyStopActive); - break; + EmergencyStopState::eEmergencyStopInactive); + } + } + else + { + button->setChecked(true); + } + } + + void + EmergencyStopWidget::clicked(bool checked) + { + if (emergencyStopMasterPrx) + { + EmergencyStopState state = emergencyStopMasterPrx->getEmergencyStopState(); + switch (state) + { + case EmergencyStopState::eEmergencyStopActive: + releaseSS2(); + break; + case EmergencyStopState::eEmergencyStopInactive: + enableSS2(); + break; + } } } @@ -173,9 +204,18 @@ namespace armarx void EmergencyStopWidget::updateEmergencyStopState() { - if (emergencyStopMasterPrx) + try { - setChecked(emergencyStopMasterPrx->getEmergencyStopState()); + if (emergencyStopMasterPrx) + { + setChecked(emergencyStopMasterPrx->getEmergencyStopState()); + } + } + catch (Ice::Exception const& e) + { + ARMARX_ERROR << "Could not query SS2 state." << deactivateSpam(2); + setChecked(EmergencyStopState::eEmergencyStopActive); } } + } // namespace armarx diff --git a/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.h b/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.h index 37c984dd231889cf238d9b4800f6a7d112e901a6..64e0111a5510afd132354d5ec812dad04ca62561 100644 --- a/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.h +++ b/source/ArmarXGui/applications/ArmarXGui/Widgets/EmergencyStopWidget.h @@ -42,20 +42,21 @@ namespace armarx { class ArmarXMainWindow; - class EmergencyStopWidget : - public ArmarXComponentWidgetControllerTemplate<EmergencyStopWidget> + class EmergencyStopWidget : public ArmarXComponentWidgetControllerTemplate<EmergencyStopWidget> { Q_OBJECT public: explicit EmergencyStopWidget(QWidget* parent = 0, ArmarXMainWindow* mainWindow = 0); QWidget* getButtonWidget(); -// void reportEmergencyStopState(EmergencyStopState, const Ice::Current&) override; + // void reportEmergencyStopState(EmergencyStopState, const Ice::Current&) override; signals: void startPeriodicStateUpdate(); void stopPeriodicStateUpdate(); public slots: + void enableSS2(); + void releaseSS2(); void clicked(bool = true); // ManagedIceObject interface @@ -76,7 +77,8 @@ namespace armarx QPixmap iconDark; QToolButton* button; QAction* emergencyStopAction; - QShortcut* emergencyStopShortcut; + QShortcut* enableSS2Shortcut; + QShortcut* releaseSS2Shortcut; EmergencyStopMasterInterfacePrx emergencyStopMasterPrx;