1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtWidgets module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39
40 #include "qkeyeventtransition.h"
41 #include "qbasickeyeventtransition_p.h"
42 #include <QtCore/qstatemachine.h>
43 #include <private/qeventtransition_p.h>
44
45 QT_BEGIN_NAMESPACE
46
47 /*!
48 \class QKeyEventTransition
49
50 \brief The QKeyEventTransition class provides a transition for key events.
51
52 \since 4.6
53 \ingroup statemachine
54 \inmodule QtWidgets
55
56 QKeyEventTransition is part of \l{The State Machine Framework}.
57
58 \sa QState::addTransition()
59 */
60
61 /*!
62 \property QKeyEventTransition::key
63
64 \brief the key that this key event transition is associated with
65 */
66
67 /*!
68 \property QKeyEventTransition::modifierMask
69
70 \brief the keyboard modifier mask that this key event transition checks for
71 */
72
73 class QKeyEventTransitionPrivate : public QEventTransitionPrivate
74 {
75 Q_DECLARE_PUBLIC(QKeyEventTransition)
76 public:
QKeyEventTransitionPrivate()77 QKeyEventTransitionPrivate() {}
78
79 QBasicKeyEventTransition *transition;
80 };
81
82 /*!
83 Constructs a new key event transition with the given \a sourceState.
84 */
QKeyEventTransition(QState * sourceState)85 QKeyEventTransition::QKeyEventTransition(QState *sourceState)
86 : QEventTransition(*new QKeyEventTransitionPrivate, sourceState)
87 {
88 Q_D(QKeyEventTransition);
89 d->transition = new QBasicKeyEventTransition();
90 }
91
92 /*!
93 Constructs a new key event transition for events of the given \a type for
94 the given \a object, with the given \a key and \a sourceState.
95 */
QKeyEventTransition(QObject * object,QEvent::Type type,int key,QState * sourceState)96 QKeyEventTransition::QKeyEventTransition(QObject *object, QEvent::Type type,
97 int key, QState *sourceState)
98 : QEventTransition(*new QKeyEventTransitionPrivate, object, type, sourceState)
99 {
100 Q_D(QKeyEventTransition);
101 d->transition = new QBasicKeyEventTransition(type, key);
102 }
103
104 /*!
105 Destroys this key event transition.
106 */
~QKeyEventTransition()107 QKeyEventTransition::~QKeyEventTransition()
108 {
109 Q_D(QKeyEventTransition);
110 delete d->transition;
111 }
112
113 /*!
114 Returns the key that this key event transition checks for.
115 */
key() const116 int QKeyEventTransition::key() const
117 {
118 Q_D(const QKeyEventTransition);
119 return d->transition->key();
120 }
121
122 /*!
123 Sets the \a key that this key event transition will check for.
124 */
setKey(int key)125 void QKeyEventTransition::setKey(int key)
126 {
127 Q_D(QKeyEventTransition);
128 d->transition->setKey(key);
129 }
130
131 /*!
132 Returns the keyboard modifier mask that this key event transition checks
133 for.
134 */
modifierMask() const135 Qt::KeyboardModifiers QKeyEventTransition::modifierMask() const
136 {
137 Q_D(const QKeyEventTransition);
138 return d->transition->modifierMask();
139 }
140
141 /*!
142 Sets the keyboard modifier mask that this key event transition will
143 check for to \a modifierMask.
144 */
setModifierMask(Qt::KeyboardModifiers modifierMask)145 void QKeyEventTransition::setModifierMask(Qt::KeyboardModifiers modifierMask)
146 {
147 Q_D(QKeyEventTransition);
148 d->transition->setModifierMask(modifierMask);
149 }
150
151 /*!
152 \reimp
153 */
eventTest(QEvent * event)154 bool QKeyEventTransition::eventTest(QEvent *event)
155 {
156 Q_D(const QKeyEventTransition);
157 if (!QEventTransition::eventTest(event))
158 return false;
159 QStateMachine::WrappedEvent *we = static_cast<QStateMachine::WrappedEvent*>(event);
160 d->transition->setEventType(we->event()->type());
161 return QAbstractTransitionPrivate::get(d->transition)->callEventTest(we->event());
162 }
163
164 /*!
165 \reimp
166 */
onTransition(QEvent * event)167 void QKeyEventTransition::onTransition(QEvent *event)
168 {
169 QEventTransition::onTransition(event);
170 }
171
172 QT_END_NAMESPACE
173
174 #include "moc_qkeyeventtransition.cpp"
175