1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qabstract3dinputhandler_p.h"
5
6QT_BEGIN_NAMESPACE
7
8/*!
9 * \class QAbstract3DInputHandler
10 * \inmodule QtDataVisualization
11 * \brief The base class for implementations of input handlers.
12 * \since QtDataVisualization 1.0
13 *
14 * QAbstract3DInputHandler is the base class that is subclassed by different input handling implementations
15 * that take input events and translate those to camera and light movements. Input handlers also translate
16 * raw input events to slicing and selection events in the scene.
17 */
18
19/*!
20 * \enum QAbstract3DInputHandler::InputView
21 *
22 * Predefined input views for mouse and touch based input handlers.
23 *
24 * \value InputViewNone
25 * Mouse or touch not on a view.
26 * \value InputViewOnPrimary
27 * Mouse or touch input received on the primary view area. If secondary view is displayed when
28 * inputView becomes InputViewOnPrimary, secondary view is closed.
29 * \value InputViewOnSecondary
30 * Mouse or touch input received on the secondary view area.
31 */
32
33/*!
34 * \qmltype AbstractInputHandler3D
35 * \inqmlmodule QtDataVisualization
36 * \since QtDataVisualization 1.0
37 * \ingroup datavisualization_qml
38 * \instantiates QAbstract3DInputHandler
39 * \brief Base type for all QtDataVisualization input handlers.
40 *
41 * This type is uncreatable.
42 *
43 * For AbstractInputHandler3D enums, see \l{QAbstract3DInputHandler::InputView}.
44 */
45
46/*!
47 * Constructs the base class. An optional \a parent parameter can be given
48 * and is then passed to QObject constructor.
49 */
50QAbstract3DInputHandler::QAbstract3DInputHandler(QObject *parent) :
51 QObject(parent),
52 d_ptr(new QAbstract3DInputHandlerPrivate(this))
53{
54}
55
56/*!
57 * Destroys the base class.
58 */
59QAbstract3DInputHandler::~QAbstract3DInputHandler()
60{
61}
62
63// Input event listeners
64/*!
65 * Override this to handle mouse double click events.
66 * Mouse double click event is given in the \a event.
67 */
68void QAbstract3DInputHandler::mouseDoubleClickEvent(QMouseEvent *event)
69{
70 Q_UNUSED(event);
71}
72
73/*!
74 * Override this to handle touch input events.
75 * Touch event is given in the \a event.
76 */
77void QAbstract3DInputHandler::touchEvent(QTouchEvent *event)
78{
79 Q_UNUSED(event);
80}
81
82/*!
83 * Override this to handle mouse press events.
84 * Mouse press event is given in the \a event and the mouse position in \a mousePos.
85 */
86void QAbstract3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos)
87{
88 Q_UNUSED(event);
89 Q_UNUSED(mousePos);
90}
91
92/*!
93 * Override this to handle mouse release events.
94 * Mouse release event is given in the \a event and the mouse position in \a mousePos.
95 */
96void QAbstract3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos)
97{
98 Q_UNUSED(event);
99 Q_UNUSED(mousePos);
100}
101
102/*!
103 * Override this to handle mouse move events.
104 * Mouse move event is given in the \a event and the mouse position in \a mousePos.
105 */
106void QAbstract3DInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos)
107{
108 Q_UNUSED(event);
109 Q_UNUSED(mousePos);
110}
111
112#if QT_CONFIG(wheelevent)
113/*!
114 * Override this to handle wheel events.
115 * Wheel event is given in the \a event.
116 */
117void QAbstract3DInputHandler::wheelEvent(QWheelEvent *event)
118{
119 Q_UNUSED(event);
120}
121#endif
122
123// Property get/set
124/*!
125 * \property QAbstract3DInputHandler::inputView
126 *
127 * \brief The current enumerated input view based on the view of the processed
128 * input events.
129 *
130 * One of the InputView enum values.
131 *
132 * When the view changes, the \c inputViewChanged signal is emitted.
133 *
134 * \sa InputView
135 */
136QAbstract3DInputHandler::InputView QAbstract3DInputHandler::inputView() const
137{
138 return d_ptr->m_inputView;
139}
140
141void QAbstract3DInputHandler::setInputView(InputView inputView)
142{
143 if (inputView != d_ptr->m_inputView) {
144 d_ptr->m_inputView = inputView;
145 emit inputViewChanged(view: inputView);
146 }
147}
148
149/*!
150 * \property QAbstract3DInputHandler::inputPosition
151 *
152 * \brief The last input position based on the processed input events.
153 */
154QPoint QAbstract3DInputHandler::inputPosition() const
155{
156 return d_ptr->m_inputPosition;
157}
158
159void QAbstract3DInputHandler::setInputPosition(const QPoint &position)
160{
161 if (position != d_ptr->m_inputPosition) {
162 d_ptr->m_inputPosition = position;
163 emit positionChanged(position);
164 }
165}
166
167/*!
168 * Returns the manhattan length between last two input positions.
169 */
170int QAbstract3DInputHandler::prevDistance() const
171{
172 return d_ptr->m_prevDistance;
173}
174
175/*!
176 * Sets the \a distance (manhattan length) between last two input positions.
177 */
178void QAbstract3DInputHandler::setPrevDistance(int distance)
179{
180 d_ptr->m_prevDistance = distance;
181}
182
183/*!
184 * \property QAbstract3DInputHandler::scene
185 *
186 * \brief The 3D scene this abstract input handler is controlling.
187 *
188 * One input handler can control one scene. Setting a scene to an input handler
189 * does not transfer the ownership of the scene.
190 */
191Q3DScene *QAbstract3DInputHandler::scene() const
192{
193 return d_ptr->m_scene;
194}
195
196void QAbstract3DInputHandler::setScene(Q3DScene *scene)
197{
198 if (scene != d_ptr->m_scene) {
199 d_ptr->m_scene = scene;
200 emit sceneChanged(scene);
201 }
202}
203
204/*!
205 * Sets the previous input position to the point given by \a position.
206 */
207void QAbstract3DInputHandler::setPreviousInputPos(const QPoint &position)
208{
209 d_ptr->m_previousInputPos = position;
210}
211
212/*!
213 * Returns the previous input position.
214 */
215QPoint QAbstract3DInputHandler::previousInputPos() const
216{
217 return d_ptr->m_previousInputPos;
218}
219
220QAbstract3DInputHandlerPrivate::QAbstract3DInputHandlerPrivate(QAbstract3DInputHandler *q) :
221 q_ptr(q),
222 m_prevDistance(0),
223 m_previousInputPos(QPoint(0,0)),
224 m_inputView(QAbstract3DInputHandler::InputViewNone),
225 m_inputPosition(QPoint(0,0)),
226 m_scene(0),
227 m_isDefaultHandler(false)
228{
229}
230
231QAbstract3DInputHandlerPrivate::~QAbstract3DInputHandlerPrivate()
232{
233
234}
235
236QT_END_NAMESPACE
237

source code of qtdatavis3d/src/datavisualization/input/qabstract3dinputhandler.cpp