1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QABSTRACTTRANSITION_H
5#define QABSTRACTTRANSITION_H
6
7#include <QtCore/qlist.h>
8#include <QtCore/qobject.h>
9
10#include <QtStateMachine/qstatemachineglobal.h>
11
12QT_BEGIN_NAMESPACE
13
14class QEvent;
15class QAbstractState;
16class QState;
17class QStateMachine;
18
19#if QT_CONFIG(animation)
20class QAbstractAnimation;
21#endif
22
23class QAbstractTransitionPrivate;
24class Q_STATEMACHINE_EXPORT QAbstractTransition : public QObject
25{
26 Q_OBJECT
27 Q_PROPERTY(QState* sourceState READ sourceState)
28 Q_PROPERTY(QAbstractState* targetState READ targetState WRITE setTargetState NOTIFY targetStateChanged)
29 Q_PROPERTY(QList<QAbstractState*> targetStates READ targetStates WRITE setTargetStates NOTIFY targetStatesChanged)
30 Q_PROPERTY(TransitionType transitionType READ transitionType WRITE setTransitionType
31 BINDABLE bindableTransitionType REVISION(1, 1))
32public:
33 enum TransitionType {
34 ExternalTransition,
35 InternalTransition
36 };
37 Q_ENUM(TransitionType)
38
39 QAbstractTransition(QState *sourceState = nullptr);
40 virtual ~QAbstractTransition();
41
42 QState *sourceState() const;
43 QAbstractState *targetState() const;
44 void setTargetState(QAbstractState* target);
45 QList<QAbstractState*> targetStates() const;
46 void setTargetStates(const QList<QAbstractState*> &targets);
47
48 TransitionType transitionType() const;
49 void setTransitionType(TransitionType type);
50 QBindable<QAbstractTransition::TransitionType> bindableTransitionType();
51
52 QStateMachine *machine() const;
53
54#if QT_CONFIG(animation)
55 void addAnimation(QAbstractAnimation *animation);
56 void removeAnimation(QAbstractAnimation *animation);
57 QList<QAbstractAnimation*> animations() const;
58#endif
59
60Q_SIGNALS:
61 void triggered(QPrivateSignal);
62 void targetStateChanged(QPrivateSignal);
63 void targetStatesChanged(QPrivateSignal);
64
65protected:
66 virtual bool eventTest(QEvent *event) = 0;
67
68 virtual void onTransition(QEvent *event) = 0;
69
70 bool event(QEvent *e) override;
71
72protected:
73 QAbstractTransition(QAbstractTransitionPrivate &dd, QState *parent);
74
75private:
76 Q_DISABLE_COPY(QAbstractTransition)
77 Q_DECLARE_PRIVATE(QAbstractTransition)
78};
79
80QT_END_NAMESPACE
81
82#endif
83

source code of qtscxml/src/statemachine/qabstracttransition.h