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