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#include "qmouseeventtransition.h"
5#include "qbasicmouseeventtransition_p.h"
6#include "qstatemachine.h"
7
8#include <QtGui/qpainterpath.h>
9#include <private/qeventtransition_p.h>
10
11QT_BEGIN_NAMESPACE
12
13/*!
14 \class QMouseEventTransition
15
16 \brief The QMouseEventTransition class provides a transition for mouse events.
17
18 \since 4.6
19 \ingroup statemachine
20 \inmodule QtStateMachine
21
22 QMouseEventTransition is part of \l{Qt State Machine Overview}{Qt State Machine Framework}.
23
24 \sa QState::addTransition()
25*/
26
27/*!
28 \property QMouseEventTransition::button
29
30 \brief the button that this mouse event transition is associated with
31*/
32
33/*!
34 \property QMouseEventTransition::modifierMask
35
36 \brief the keyboard modifier mask that this mouse event transition checks for
37*/
38
39class QMouseEventTransitionPrivate : public QEventTransitionPrivate
40{
41 Q_DECLARE_PUBLIC(QMouseEventTransition)
42public:
43 QMouseEventTransitionPrivate();
44
45 QBasicMouseEventTransition *transition;
46};
47
48QMouseEventTransitionPrivate::QMouseEventTransitionPrivate()
49{
50}
51
52/*!
53 Constructs a new mouse event transition with the given \a sourceState.
54*/
55QMouseEventTransition::QMouseEventTransition(QState *sourceState)
56 : QEventTransition(*new QMouseEventTransitionPrivate, sourceState)
57{
58 Q_D(QMouseEventTransition);
59 d->transition = new QBasicMouseEventTransition();
60}
61
62/*!
63 Constructs a new mouse event transition for events of the given \a type for
64 the given \a object, with the given \a button and \a sourceState.
65*/
66QMouseEventTransition::QMouseEventTransition(QObject *object, QEvent::Type type,
67 Qt::MouseButton button,
68 QState *sourceState)
69 : QEventTransition(*new QMouseEventTransitionPrivate, object, type, sourceState)
70{
71 Q_D(QMouseEventTransition);
72 d->transition = new QBasicMouseEventTransition(type, button);
73}
74
75/*!
76 Destroys this mouse event transition.
77*/
78QMouseEventTransition::~QMouseEventTransition()
79{
80 Q_D(QMouseEventTransition);
81 delete d->transition;
82}
83
84/*!
85 Returns the button that this mouse event transition checks for.
86*/
87Qt::MouseButton QMouseEventTransition::button() const
88{
89 Q_D(const QMouseEventTransition);
90 return d->transition->button();
91}
92
93/*!
94 Sets the \a button that this mouse event transition will check for.
95*/
96void QMouseEventTransition::setButton(Qt::MouseButton button)
97{
98 Q_D(QMouseEventTransition);
99 d->transition->setButton(button);
100}
101
102QBindable<Qt::MouseButton> QMouseEventTransition::bindableButton()
103{
104 Q_D(QMouseEventTransition);
105 return d->transition->bindableButton();
106}
107
108/*!
109 Returns the keyboard modifier mask that this mouse event transition checks
110 for.
111*/
112Qt::KeyboardModifiers QMouseEventTransition::modifierMask() const
113{
114 Q_D(const QMouseEventTransition);
115 return d->transition->modifierMask();
116}
117
118/*!
119 Sets the keyboard modifier mask that this mouse event transition will
120 check for to \a modifierMask.
121*/
122void QMouseEventTransition::setModifierMask(Qt::KeyboardModifiers modifierMask)
123{
124 Q_D(QMouseEventTransition);
125 d->transition->setModifierMask(modifierMask);
126}
127
128QBindable<Qt::KeyboardModifiers> QMouseEventTransition::bindableModifierMask()
129{
130 Q_D(QMouseEventTransition);
131 return d->transition->bindableModifierMask();
132}
133
134
135/*!
136 Returns the hit test path for this mouse event transition.
137*/
138QPainterPath QMouseEventTransition::hitTestPath() const
139{
140 Q_D(const QMouseEventTransition);
141 return d->transition->hitTestPath();
142}
143
144/*!
145 Sets the hit test path for this mouse event transition to \a path.
146 If a valid path has been set, the transition will only trigger if the mouse
147 event position (QMouseEvent::pos()) is inside the path.
148
149 \sa QPainterPath::contains()
150*/
151void QMouseEventTransition::setHitTestPath(const QPainterPath &path)
152{
153 Q_D(QMouseEventTransition);
154 d->transition->setHitTestPath(path);
155}
156
157/*!
158 \reimp
159*/
160bool QMouseEventTransition::eventTest(QEvent *event)
161{
162 Q_D(const QMouseEventTransition);
163 if (!QEventTransition::eventTest(event))
164 return false;
165 QStateMachine::WrappedEvent *we = static_cast<QStateMachine::WrappedEvent*>(event);
166 d->transition->setEventType(we->event()->type());
167 return QAbstractTransitionPrivate::get(q: d->transition)->callEventTest(e: we->event());
168}
169
170/*!
171 \reimp
172*/
173void QMouseEventTransition::onTransition(QEvent *event)
174{
175 QEventTransition::onTransition(event);
176}
177
178QT_END_NAMESPACE
179
180#include "moc_qmouseeventtransition.cpp"
181

source code of qtscxml/src/statemachine/gui/qmouseeventtransition.cpp