blob: 3d8c5883a5e536832a0f8d691139acc8fbf84b7f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
** This file is part of the $MODULE$ of the Qt Toolkit.
**
** $TROLLTECH_DUAL_LICENSE$
**
****************************************************************************/
#include "qstatefinishedtransition.h"
#include "qstatefinishedevent.h"
#include "qtransition_p.h"
QT_BEGIN_NAMESPACE
/*!
\class QStateFinishedTransition
\brief The QStateFinishedTransition class provides a transition that triggers when a state is finished.
\ingroup statemachine
A state is finished when one of its final child states (a QFinalState) is
entered; this will cause a QStateFinishedEvent to be generated. The
QStateFinishedTransition class provides a way of associating a transition
with such an event. QStateFinishedTransition is part of \l{The State Machine
Framework}.
\code
QStateMachine machine;
QState *s1 = new QState(machine.rootState());
QState *s11 = new QState(s1);
QFinalState *s12 = new QFinalState(s1);
s11->addTransition(s12);
QState *s2 = new QState(machine.rootState());
QStateFinishedTransition *finishedTransition = new QStateFinishedTransition(s1);
finishedTransition->setTargetState(s2);
s1->addTransition(finishedTransition);
\endcode
\sa QState::addFinishedTransition(), QStateFinishedEvent
*/
/*!
\property QStateFinishedTransition::state
\brief the state whose QStateFinishedEvent this transition is associated with
*/
class QStateFinishedTransitionPrivate : public QTransitionPrivate
{
Q_DECLARE_PUBLIC(QStateFinishedTransition)
public:
QStateFinishedTransitionPrivate();
static QStateFinishedTransitionPrivate *get(QStateFinishedTransition *q);
QState *state;
};
QStateFinishedTransitionPrivate::QStateFinishedTransitionPrivate()
{
state = 0;
}
QStateFinishedTransitionPrivate *QStateFinishedTransitionPrivate::get(QStateFinishedTransition *q)
{
return q->d_func();
}
/*!
Constructs a new QStateFinishedTransition object that has the given \a
sourceState.
*/
QStateFinishedTransition::QStateFinishedTransition(QState *sourceState)
: QTransition(*new QStateFinishedTransitionPrivate, sourceState)
{
}
/*!
Constructs a new QStateFinishedTransition object associated with the given
\a state, and that has the given \a targets and \a sourceState.
*/
QStateFinishedTransition::QStateFinishedTransition(
QState *state, const QList<QAbstractState*> &targets, QState *sourceState)
: QTransition(*new QStateFinishedTransitionPrivate, targets, sourceState)
{
Q_D(QStateFinishedTransition);
d->state = state;
}
/*!
Destroys this QStateFinishedTransition.
*/
QStateFinishedTransition::~QStateFinishedTransition()
{
}
/*!
Returns the state associated with this QStateFinishedTransition.
*/
QState *QStateFinishedTransition::state() const
{
Q_D(const QStateFinishedTransition);
return d->state;
}
/*!
Sets the \a state associated with this QStateFinishedTransition.
*/
void QStateFinishedTransition::setState(QState *state)
{
Q_D(QStateFinishedTransition);
d->state = state;
}
/*!
\reimp
*/
bool QStateFinishedTransition::eventTest(QEvent *event) const
{
Q_D(const QStateFinishedTransition);
#ifndef QT_STATEMACHINE_SOLUTION
if (event->type() == QEvent::StateFinished) {
#else
if (event->type() == QEvent::Type(QEvent::User-2)) {
#endif
QStateFinishedEvent *sfe = static_cast<QStateFinishedEvent*>(event);
return (sfe->state() == d->state);
}
return false;
}
/*!
\reimp
*/
void QStateFinishedTransition::onTransition()
{
}
/*!
\reimp
*/
bool QStateFinishedTransition::event(QEvent *e)
{
return QTransition::event(e);
}
QT_END_NAMESPACE
|