EmergencyStopWidget.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package ArmarXCore::ArmarXObjects::EmergencyStop
17  * @author Stefan Reither ( stef dot reither at web dot de )
18  * @date 2016
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #include "EmergencyStopWidget.h"
24 
25 #include <QGridLayout>
26 #include <QShortcut>
27 
28 
29 #define EMERGENCY_STOP_PROXY "EmergencyStopMaster"
30 #define EMERGENCY_STOP_TOPIC_NAME "EmergencyStop"
31 
32 namespace armarx
33 {
35  mainWindow(mainWindow),
36  iconNormal(QPixmap::fromImage(QImage(QString::fromUtf8(":/icons/emergency-stop.png")))),
37  iconDark(QPixmap::fromImage(QImage(QString::fromUtf8(":/icons/emergency-stop-dark.png"))))
38  {
39  qRegisterMetaType<EmergencyStopState>("EmergencyStopState");
40 
41  QIcon icon;
42  icon.addPixmap(iconNormal, QIcon::Normal, QIcon::Off);
43  icon.addPixmap(iconDark, QIcon::Normal, QIcon::On);
44 
45  QGridLayout* layout = new QGridLayout(this->getWidget());
46  button = new QToolButton();
47  button->setCheckable(true);
48  button->setIcon(icon);
49  button->setIconSize(QSize(68, 28));
50  button->setToolTip(QString::fromStdString("Controls the EmergencyStop. When pressed the EmergencyStop is active. Shortcut: Pause Key"));
51  button->setVisible(false);
52  layout->addWidget(button, 0, 0);
53  layout->setMargin(0);
54  layout->setContentsMargins(0, 0, 0, 0);
55  this->getWidget()->setLayout(layout);
56  emergencyStopShortcut = new QShortcut(this->getWidget());
57  emergencyStopShortcut->setContext(Qt::ApplicationShortcut);
58  emergencyStopShortcut->setKey(Qt::Key_Pause);
59  connect(emergencyStopShortcut, SIGNAL(activated()), this, SLOT(clicked()));
60 
61  connect(button, SIGNAL(clicked(bool)), this, SLOT(clicked(bool)));
62  std::stringstream str;
63  str << "After EmergencyStop was activated, you have to wait "
64  << deactivationWaitPeriod.count() << " ms before you can deactivate it.";
65  button->setToolTip(QString::fromStdString(str.str()));
66  }
67 
69  {
70  return this->getWidget();
71  }
72 
74  {
77  }
78 
80  {
81  emergencyStopMasterPrx = getProxy < EmergencyStopMasterInterfacePrx>(EMERGENCY_STOP_PROXY);
82  QMetaObject::invokeMethod(button, "setVisible", Qt::QueuedConnection, Q_ARG(bool, true));
83  QMetaObject::invokeMethod(this, "setChecked", Qt::QueuedConnection, Q_ARG(EmergencyStopState, emergencyStopMasterPrx->getEmergencyStopState()));
84  }
85 
87  {
88  QMetaObject::invokeMethod(button, "setVisible", Qt::QueuedConnection, Q_ARG(bool, false));
89  }
90 
91 
92  void EmergencyStopWidget::loadSettings(QSettings* settings)
93  {
94 
95  }
96 
97  void EmergencyStopWidget::saveSettings(QSettings* settings)
98  {
99 
100  }
101 
102  void EmergencyStopWidget::reportEmergencyStopState(EmergencyStopState state, const Ice::Current&)
103  {
104  QMetaObject::invokeMethod(this, "setChecked", Qt::QueuedConnection, Q_ARG(EmergencyStopState, state));
105  }
106 
107  void EmergencyStopWidget::clicked(bool checked)
108  {
109  EmergencyStopState state = emergencyStopMasterPrx->getEmergencyStopState();
110  switch (state)
111  {
112  case EmergencyStopState::eEmergencyStopActive :
113  if (clock_t::now() > timeLastActivated + deactivationWaitPeriod)
114  {
115  emergencyStopMasterPrx->setEmergencyStopState(EmergencyStopState::eEmergencyStopInactive);
116  }
117  else
118  {
119  button->setChecked(true);
120  }
121  break;
122  case EmergencyStopState::eEmergencyStopInactive :
123  emergencyStopMasterPrx->setEmergencyStopState(EmergencyStopState::eEmergencyStopActive);
124  break;
125  }
126  }
127 
129  {
130  return "EmergencyStopGuiWidget" + iceNameUUID;
131  }
132 
133  void EmergencyStopWidget::setChecked(const EmergencyStopState state)
134  {
135  switch (state)
136  {
137  case EmergencyStopState::eEmergencyStopActive :
138  button->setChecked(true);
139  break;
140  case EmergencyStopState::eEmergencyStopInactive :
141  button->setChecked(false);
142  timeLastActivated = clock_t::now();
143  break;
144  default :
145  button->setChecked(false);
146  }
147  }
148 }
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:42
armarx::EmergencyStopWidget::EmergencyStopWidget
EmergencyStopWidget(QWidget *parent=0, ArmarXMainWindow *mainWindow=0)
Definition: EmergencyStopWidget.cpp:34
EMERGENCY_STOP_TOPIC_NAME
#define EMERGENCY_STOP_TOPIC_NAME
Definition: EmergencyStopWidget.cpp:30
GfxTL::On
OnOff< true > On
Definition: OnOff.h:10
armarx::ArmarXMainWindow
The ArmarXMainWindow class.
Definition: ArmarXMainWindow.h:80
EMERGENCY_STOP_PROXY
#define EMERGENCY_STOP_PROXY
Definition: EmergencyStopWidget.cpp:29
armarx::EmergencyStopWidget::saveSettings
void saveSettings(QSettings *settings) override
Implement to save the settings as part of the GUI configuration.
Definition: EmergencyStopWidget.cpp:97
armarx::EmergencyStopWidget::reportEmergencyStopState
void reportEmergencyStopState(EmergencyStopState, const Ice::Current &) override
Definition: EmergencyStopWidget.cpp:102
EmergencyStopWidget.h
armarx::EmergencyStopWidget::onConnectComponent
void onConnectComponent() override
Pure virtual hook for the subclass.
Definition: EmergencyStopWidget.cpp:79
armarx::EmergencyStopWidget::onDisconnectComponent
void onDisconnectComponent() override
Hook for subclass.
Definition: EmergencyStopWidget.cpp:86
armarx::EmergencyStopWidget::getButtonWidget
QWidget * getButtonWidget()
Definition: EmergencyStopWidget.cpp:68
armarx::EmergencyStopWidget::onInitComponent
void onInitComponent() override
Pure virtual hook for the subclass.
Definition: EmergencyStopWidget.cpp:73
GfxTL::Off
OnOff< false > Off
Definition: OnOff.h:11
armarx::EmergencyStopWidget::clicked
void clicked(bool=true)
Definition: EmergencyStopWidget.cpp:107
armarx::ManagedIceObject::usingTopic
void usingTopic(const std::string &name, bool orderedPublishing=false)
Registers a proxy for subscription after initialization.
Definition: ManagedIceObject.cpp:248
armarx::EmergencyStopWidget::iceNameUUID
std::string iceNameUUID
Definition: EmergencyStopWidget.h:88
armarx::EmergencyStopWidget::loadSettings
void loadSettings(QSettings *settings) override
Implement to load the settings that are part of the GUI configuration.
Definition: EmergencyStopWidget.cpp:92
armarx::ArmarXWidgetController::getWidget
virtual QPointer< QWidget > getWidget()
getWidget returns a pointer to the a widget of this controller.
Definition: ArmarXWidgetController.cpp:54
armarx::ManagedIceObject::usingProxy
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
Definition: ManagedIceObject.cpp:151
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::EmergencyStopWidget::getDefaultName
std::string getDefaultName() const override
Retrieve default name of component.
Definition: EmergencyStopWidget.cpp:128