1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
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 http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#ifndef QQUICKPOPUP_P_P_H
38#define QQUICKPOPUP_P_P_H
39
40//
41// W A R N I N G
42// -------------
43//
44// This file is not part of the Qt API. It exists purely as an
45// implementation detail. This header file may change from version to
46// version without notice, or even be removed.
47//
48// We mean it.
49//
50
51#include <QtQuickTemplates2/private/qquickpopup_p.h>
52#include <QtQuickTemplates2/private/qquickcontrol_p.h>
53
54#include <QtCore/private/qobject_p.h>
55#include <QtQuick/qquickitem.h>
56#include <QtQuick/private/qquickitemchangelistener_p.h>
57#include <QtQuick/private/qquicktransitionmanager_p_p.h>
58
59QT_BEGIN_NAMESPACE
60
61class QQuickTransition;
62class QQuickTransitionManager;
63class QQuickPopup;
64class QQuickPopupAnchors;
65class QQuickPopupItem;
66class QQuickPopupPrivate;
67class QQuickPopupPositioner;
68
69class QQuickPopupTransitionManager : public QQuickTransitionManager
70{
71public:
72 QQuickPopupTransitionManager(QQuickPopupPrivate *popup);
73
74 void transitionEnter();
75 void transitionExit();
76
77protected:
78 void finished() override;
79
80private:
81 QQuickPopupPrivate *popup = nullptr;
82};
83
84class Q_AUTOTEST_EXPORT QQuickPopupPrivate : public QObjectPrivate, public QQuickItemChangeListener
85{
86 Q_DECLARE_PUBLIC(QQuickPopup)
87
88public:
89 QQuickPopupPrivate();
90
91 static QQuickPopupPrivate *get(QQuickPopup *popup)
92 {
93 return popup->d_func();
94 }
95
96 QQmlListProperty<QObject> contentData();
97 QQmlListProperty<QQuickItem> contentChildren();
98
99 void init();
100 void closeOrReject();
101 bool tryClose(const QPointF &pos, QQuickPopup::ClosePolicy flags);
102
103 bool contains(const QPointF &scenePos) const;
104
105#if QT_CONFIG(quicktemplates2_multitouch)
106 virtual bool acceptTouch(const QTouchEvent::TouchPoint &point);
107#endif
108 virtual bool blockInput(QQuickItem *item, const QPointF &point) const;
109
110 virtual bool handlePress(QQuickItem* item, const QPointF &point, ulong timestamp);
111 virtual bool handleMove(QQuickItem* item, const QPointF &point, ulong timestamp);
112 virtual bool handleRelease(QQuickItem* item, const QPointF &point, ulong timestamp);
113 virtual void handleUngrab();
114
115 bool handleMouseEvent(QQuickItem *item, QMouseEvent *event);
116#if QT_CONFIG(quicktemplates2_multitouch)
117 bool handleTouchEvent(QQuickItem *item, QTouchEvent *event);
118#endif
119
120 void reposition();
121
122 void createOverlay();
123 void destroyOverlay();
124 void toggleOverlay();
125 virtual void showOverlay();
126 virtual void hideOverlay();
127 virtual void resizeOverlay();
128
129 virtual bool prepareEnterTransition();
130 virtual bool prepareExitTransition();
131 virtual void finalizeEnterTransition();
132 virtual void finalizeExitTransition();
133
134 QMarginsF getMargins() const;
135
136 void setTopMargin(qreal value, bool reset = false);
137 void setLeftMargin(qreal value, bool reset = false);
138 void setRightMargin(qreal value, bool reset = false);
139 void setBottomMargin(qreal value, bool reset = false);
140
141 QQuickPopupAnchors *getAnchors();
142 virtual QQuickPopupPositioner *getPositioner();
143
144 void setWindow(QQuickWindow *window);
145 void itemDestroyed(QQuickItem *item) override;
146
147 enum TransitionState {
148 NoTransition, EnterTransition, ExitTransition
149 };
150
151 static const QQuickPopup::ClosePolicy DefaultClosePolicy;
152
153 bool focus = false;
154 bool modal = false;
155 bool dim = false;
156 bool hasDim = false;
157 bool visible = false;
158 bool complete = true;
159 bool positioning = false;
160 bool hasWidth = false;
161 bool hasHeight = false;
162 bool hasTopMargin = false;
163 bool hasLeftMargin = false;
164 bool hasRightMargin = false;
165 bool hasBottomMargin = false;
166 bool allowVerticalFlip = false;
167 bool allowHorizontalFlip = false;
168 bool allowVerticalMove = true;
169 bool allowHorizontalMove = true;
170 bool allowVerticalResize = true;
171 bool allowHorizontalResize = true;
172 bool hadActiveFocusBeforeExitTransition = false;
173 bool interactive = true;
174 bool hasClosePolicy = false;
175 int touchId = -1;
176 qreal x = 0;
177 qreal y = 0;
178 qreal effectiveX = 0;
179 qreal effectiveY = 0;
180 qreal margins = -1;
181 qreal topMargin = 0;
182 qreal leftMargin = 0;
183 qreal rightMargin = 0;
184 qreal bottomMargin = 0;
185 QPointF pressPoint;
186 TransitionState transitionState = NoTransition;
187 QQuickPopup::ClosePolicy closePolicy = DefaultClosePolicy;
188 QQuickItem *parentItem = nullptr;
189 QQuickItem *dimmer = nullptr;
190 QPointer<QQuickWindow> window;
191 QQuickTransition *enter = nullptr;
192 QQuickTransition *exit = nullptr;
193 QQuickPopupItem *popupItem = nullptr;
194 QQuickPopupPositioner *positioner = nullptr;
195 QList<QQuickStateAction> enterActions;
196 QList<QQuickStateAction> exitActions;
197 QQuickPopupTransitionManager transitionManager;
198 QQuickPopupAnchors *anchors = nullptr;
199 qreal prevOpacity = 0;
200 qreal prevScale = 0;
201
202 friend class QQuickPopupTransitionManager;
203};
204
205QT_END_NAMESPACE
206
207#endif // QQUICKPOPUP_P_P_H
208

source code of qtquickcontrols2/src/quicktemplates2/qquickpopup_p_p.h