QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCAbstractState.cc
Go to the documentation of this file.
1#include "QGCAbstractState.h"
2#include "QGCStateMachine.h"
4
5QGCAbstractState::QGCAbstractState(const QString& stateName, QState* parent)
6 : QState(QState::ExclusiveStates, parent)
7{
8 setObjectName(stateName);
9}
10
12{
13 return qobject_cast<QGCStateMachine*>(QState::machine());
14}
15
17{
18 return machine() ? machine()->vehicle() : nullptr;
19}
20
22{
23 return machine() ? &machine()->context() : nullptr;
24}
25
27{
28 if (machine()) {
29 return QStringLiteral("%1:%2").arg(machine()->machineName(), objectName());
30 } else {
31 return objectName();
32 }
33}
34
36{
37 _entryCallback = std::move(onEntry);
38 _exitCallback = std::move(onExit);
39}
40
41void QGCAbstractState::onEntry(QEvent* event)
42{
43 QState::onEntry(event);
44 qCDebug(QGCStateMachineLog) << "Entered" << stateName();
45
46 if (_entryCallback) {
47 _entryCallback();
48 }
49
50 onEnter();
51}
52
53void QGCAbstractState::onExit(QEvent* event)
54{
55 onLeave();
56
57 if (_exitCallback) {
58 _exitCallback();
59 }
60
61 QState::onExit(event);
62 qCDebug(QGCStateMachineLog) << "Exited" << stateName();
63}
64
65bool QGCAbstractState::event(QEvent* event)
66{
67 if (_eventHandler && _eventHandler(event)) {
68 return true;
69 }
70
71 return QState::event(event);
72}
std::function< void()> EntryCallback
void onExit(QEvent *event) override
void setCallbacks(EntryCallback onEntry, ExitCallback onExit=nullptr)
Set both entry and exit callbacks.
void onEntry(QEvent *event) override
QGCAbstractState(const QString &stateName, QState *parent)
class StateContext * context() const
QString stateName() const
bool event(QEvent *event) override
virtual void onEnter()
Override to perform actions on state entry.
virtual void onLeave()
Override to perform actions on state exit.
std::function< void()> ExitCallback
QGCStateMachine * machine() const
Vehicle * vehicle() const
QGroundControl specific state machine with enhanced error handling.