1// Copyright (C) 2017 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#ifndef QQUICKPOPUP_P_P_H
5#define QQUICKPOPUP_P_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtQuickTemplates2/private/qquickpopup_p.h>
19#include <QtQuickTemplates2/private/qquickcontrol_p.h>
20#include <QtQuickTemplates2/private/qquicktheme_p.h>
21
22#include <QtCore/private/qobject_p.h>
23#include <QtQuick/qquickitem.h>
24#include <QtQuick/private/qquickitemchangelistener_p.h>
25#include <QtQuick/private/qquicktransitionmanager_p_p.h>
26#include <QtQuick/private/qquickitem_p.h>
27
28#include <QtCore/qpointer.h>
29
30QT_BEGIN_NAMESPACE
31
32class QQuickTransition;
33class QQuickTransitionManager;
34class QQuickPopup;
35class QQuickPopupAnchors;
36class QQuickPopupItem;
37class QQuickPopupWindow;
38class QQuickPopupPrivate;
39class QQuickPopupPositioner;
40
41class Q_QUICKTEMPLATES2_EXPORT QQuickPopupTransitionManager : public QQuickTransitionManager
42{
43public:
44 QQuickPopupTransitionManager(QQuickPopupPrivate *popup);
45
46 void transitionEnter();
47 void transitionExit();
48
49protected:
50 void finished() override;
51
52private:
53 QQuickPopupPrivate *popup = nullptr;
54};
55
56class Q_QUICKTEMPLATES2_EXPORT QQuickPopupPrivate
57 : public QObjectPrivate
58 , public QQuickItemChangeListener
59 , public QQuickPaletteProviderPrivateBase<QQuickPopup, QQuickPopupPrivate>
60{
61public:
62 Q_DECLARE_PUBLIC(QQuickPopup)
63
64 QQuickPopupPrivate();
65
66 static QQuickPopupPrivate *get(QQuickPopup *popup)
67 {
68 return popup->d_func();
69 }
70
71 QQmlListProperty<QObject> contentData();
72 QQmlListProperty<QQuickItem> contentChildren();
73
74 void init();
75 void closeOrReject();
76 bool tryClose(const QPointF &pos, QQuickPopup::ClosePolicy flags);
77
78 bool contains(const QPointF &scenePos) const;
79
80#if QT_CONFIG(quicktemplates2_multitouch)
81 virtual bool acceptTouch(const QTouchEvent::TouchPoint &point);
82#endif
83 virtual bool blockInput(QQuickItem *item, const QPointF &point) const;
84
85 virtual bool handlePress(QQuickItem* item, const QPointF &point, ulong timestamp);
86 virtual bool handleMove(QQuickItem* item, const QPointF &point, ulong timestamp);
87 virtual bool handleRelease(QQuickItem* item, const QPointF &point, ulong timestamp);
88 virtual bool handleReleaseWithoutGrab(const QEventPoint &) { return false; }
89 virtual void handleUngrab();
90
91 bool handleMouseEvent(QQuickItem *item, QMouseEvent *event);
92 bool handleHoverEvent(QQuickItem *item, QHoverEvent *event);
93#if QT_CONFIG(quicktemplates2_multitouch)
94 bool handleTouchEvent(QQuickItem *item, QTouchEvent *event);
95#endif
96
97 QMarginsF windowInsets() const;
98 QPointF windowInsetsTopLeft() const;
99 void setEffectivePosFromWindowPos(const QPointF &windowPos);
100 void reposition();
101
102 bool usePopupWindow() const;
103 void adjustPopupItemParentAndWindow();
104 void createOverlay();
105 QQuickItem *createDimmer(QQmlComponent *component, QQuickPopup *popup, QQuickItem *parent) const;
106 void destroyDimmer();
107 void toggleOverlay();
108 void updateContentPalettes(const QPalette& parentPalette);
109
110 virtual QQuickPopup::PopupType resolvedPopupType() const;
111
112 virtual void showDimmer();
113 virtual void hideDimmer();
114 virtual void resizeDimmer();
115
116 virtual bool prepareEnterTransition();
117 virtual bool prepareExitTransition();
118 virtual void finalizeEnterTransition();
119 virtual void finalizeExitTransition();
120
121 virtual void opened();
122
123 virtual Qt::WindowFlags popupWindowType() const;
124
125 QMarginsF getMargins() const;
126
127 void setTopMargin(qreal value, bool reset = false);
128 void setLeftMargin(qreal value, bool reset = false);
129 void setRightMargin(qreal value, bool reset = false);
130 void setBottomMargin(qreal value, bool reset = false);
131
132 QQuickPopupAnchors *getAnchors();
133 virtual QQuickPopupPositioner *getPositioner();
134
135 void setWindow(QQuickWindow *window);
136 void itemDestroyed(QQuickItem *item) override;
137
138 QPalette defaultPalette() const override;
139
140 enum TransitionState {
141 NoTransition, EnterTransition, ExitTransition
142 };
143
144 static const QQuickPopup::ClosePolicy DefaultClosePolicy;
145
146 bool focus = false;
147 bool modal = false;
148 bool dim = false;
149 bool hasDim = false;
150 bool visible = false;
151 bool complete = true;
152 bool positioning = false;
153 bool hasWidth = false;
154 bool hasHeight = false;
155 bool hasTopMargin = false;
156 bool hasLeftMargin = false;
157 bool hasRightMargin = false;
158 bool hasBottomMargin = false;
159 bool hasZ = false;
160 bool allowVerticalFlip = false;
161 bool allowHorizontalFlip = false;
162 bool allowVerticalMove = true;
163 bool allowHorizontalMove = true;
164 bool allowVerticalResize = true;
165 bool allowHorizontalResize = true;
166 bool hadActiveFocusBeforeExitTransition = false;
167 bool interactive = true;
168 bool hasClosePolicy = false;
169 bool outsidePressed = false;
170 bool outsideParentPressed = false;
171 bool inDestructor = false;
172 bool relaxEdgeConstraint = false;
173 bool popupWindowDirty = false;
174 int touchId = -1;
175 qreal x = 0;
176 qreal y = 0;
177 QPointF effectivePos;
178 qreal margins = -1;
179 qreal topMargin = 0;
180 qreal leftMargin = 0;
181 qreal rightMargin = 0;
182 qreal bottomMargin = 0;
183 QPointF pressPoint;
184 TransitionState transitionState = NoTransition;
185 QQuickPopup::ClosePolicy closePolicy = DefaultClosePolicy;
186 QQuickItem *parentItem = nullptr;
187 QQuickItem *dimmer = nullptr;
188 QPointer<QQuickWindow> window;
189 QQuickTransition *enter = nullptr;
190 QQuickTransition *exit = nullptr;
191 QQuickPopupItem *popupItem = nullptr;
192 QQuickPopupWindow *popupWindow = nullptr;
193 QQuickPopupPositioner *positioner = nullptr;
194 QList<QQuickStateAction> enterActions;
195 QList<QQuickStateAction> exitActions;
196 QQuickPopupTransitionManager transitionManager;
197 QQuickPopupAnchors *anchors = nullptr;
198 qreal explicitDimmerOpacity = 0;
199 qreal prevOpacity = 0;
200 qreal prevScale = 0;
201 QString m_title;
202 QQuickPopup::PopupType m_popupType = QQuickPopup::Item;
203
204 friend class QQuickPopupTransitionManager;
205};
206
207QT_END_NAMESPACE
208
209#endif // QQUICKPOPUP_P_P_H
210

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtdeclarative/src/quicktemplates/qquickpopup_p_p.h