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_H
5#define QQUICKPOPUP_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 <QtCore/qobject.h>
19#include <QtCore/qmargins.h>
20#include <QtGui/qevent.h>
21#include <QtCore/qlocale.h>
22#include <QtGui/qfont.h>
23#include <QtGui/qpalette.h>
24#include <QtQuickTemplates2/private/qtquicktemplates2global_p.h>
25#include <QtQml/qqml.h>
26#include <QtQml/qqmllist.h>
27#include <QtQml/qqmlparserstatus.h>
28#include <QtQuick/qquickitem.h>
29#include <QtQuick/private/qquicksafearea_p.h>
30
31#if QT_CONFIG(accessibility)
32#include <QtGui/qaccessible.h>
33#endif
34
35QT_BEGIN_NAMESPACE
36
37class QQuickWindow;
38class QQuickPopupAnchors;
39class QQuickPopupPrivate;
40class QQuickTransition;
41
42class Q_QUICKTEMPLATES2_EXPORT QQuickPopup : public QObject, public QQmlParserStatus, private QQuickSafeAreaAttachable
43{
44 Q_OBJECT
45 Q_INTERFACES(QQmlParserStatus)
46 Q_INTERFACES(QQuickSafeAreaAttachable)
47 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
48 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
49 Q_PROPERTY(qreal z READ z WRITE setZ RESET resetZ NOTIFY zChanged FINAL)
50 Q_PROPERTY(qreal width READ width WRITE setWidth RESET resetWidth NOTIFY widthChanged FINAL)
51 Q_PROPERTY(qreal height READ height WRITE setHeight RESET resetHeight NOTIFY heightChanged FINAL)
52 Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged FINAL)
53 Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged FINAL)
54 Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged FINAL)
55 Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged FINAL)
56 Q_PROPERTY(qreal availableWidth READ availableWidth NOTIFY availableWidthChanged FINAL)
57 Q_PROPERTY(qreal availableHeight READ availableHeight NOTIFY availableHeightChanged FINAL)
58 Q_PROPERTY(qreal margins READ margins WRITE setMargins RESET resetMargins NOTIFY marginsChanged FINAL)
59 Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin RESET resetTopMargin NOTIFY topMarginChanged FINAL)
60 Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin RESET resetLeftMargin NOTIFY leftMarginChanged FINAL)
61 Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin RESET resetRightMargin NOTIFY rightMarginChanged FINAL)
62 Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin RESET resetBottomMargin NOTIFY bottomMarginChanged FINAL)
63 Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged FINAL)
64 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged FINAL)
65 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged FINAL)
66 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged FINAL)
67 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged FINAL)
68 Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL)
69 Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL)
70 Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem RESET resetParentItem NOTIFY parentChanged FINAL)
71 Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
72 Q_PROPERTY(QQuickItem *contentItem READ contentItem WRITE setContentItem NOTIFY contentItemChanged FINAL)
73 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQmlListProperty<QObject> contentData READ contentData)
74 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQmlListProperty<QQuickItem> contentChildren READ contentChildren NOTIFY contentChildrenChanged FINAL)
75 Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged FINAL)
76 Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL)
77 Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged FINAL)
78 Q_PROPERTY(bool modal READ isModal WRITE setModal NOTIFY modalChanged FINAL)
79 Q_PROPERTY(bool dim READ dim WRITE setDim RESET resetDim NOTIFY dimChanged FINAL)
80 Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
81 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
82 Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged FINAL)
83 Q_PROPERTY(ClosePolicy closePolicy READ closePolicy WRITE setClosePolicy RESET resetClosePolicy NOTIFY closePolicyChanged FINAL)
84 Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin FINAL)
85 Q_PROPERTY(QQuickTransition *enter READ enter WRITE setEnter NOTIFY enterChanged FINAL)
86 Q_PROPERTY(QQuickTransition *exit READ exit WRITE setExit NOTIFY exitChanged FINAL)
87 // 2.1 (Qt 5.8)
88 Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing RESET resetSpacing NOTIFY spacingChanged FINAL REVISION(2, 1))
89 // 2.3 (Qt 5.10)
90 Q_PROPERTY(bool opened READ isOpened NOTIFY openedChanged FINAL REVISION(2, 3))
91 Q_PROPERTY(bool mirrored READ isMirrored NOTIFY mirroredChanged FINAL REVISION(2, 3))
92 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL REVISION(2, 3))
93 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQuickPalette *palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged REVISION(2, 3))
94 // 2.5 (Qt 5.12)
95 Q_PROPERTY(qreal horizontalPadding READ horizontalPadding WRITE setHorizontalPadding RESET resetHorizontalPadding NOTIFY horizontalPaddingChanged FINAL)
96 Q_PROPERTY(qreal verticalPadding READ verticalPadding WRITE setVerticalPadding RESET resetVerticalPadding NOTIFY verticalPaddingChanged FINAL)
97 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQuickPopupAnchors *anchors READ getAnchors DESIGNABLE false CONSTANT FINAL REVISION(2, 5))
98 Q_PROPERTY(qreal implicitContentWidth READ implicitContentWidth NOTIFY implicitContentWidthChanged FINAL REVISION(2, 5))
99 Q_PROPERTY(qreal implicitContentHeight READ implicitContentHeight NOTIFY implicitContentHeightChanged FINAL REVISION(2, 5))
100 Q_PROPERTY(qreal implicitBackgroundWidth READ implicitBackgroundWidth NOTIFY implicitBackgroundWidthChanged FINAL REVISION(2, 5))
101 Q_PROPERTY(qreal implicitBackgroundHeight READ implicitBackgroundHeight NOTIFY implicitBackgroundHeightChanged FINAL REVISION(2, 5))
102 Q_PROPERTY(qreal topInset READ topInset WRITE setTopInset RESET resetTopInset NOTIFY topInsetChanged FINAL REVISION(2, 5))
103 Q_PROPERTY(qreal leftInset READ leftInset WRITE setLeftInset RESET resetLeftInset NOTIFY leftInsetChanged FINAL REVISION(2, 5))
104 Q_PROPERTY(qreal rightInset READ rightInset WRITE setRightInset RESET resetRightInset NOTIFY rightInsetChanged FINAL REVISION(2, 5))
105 Q_PROPERTY(qreal bottomInset READ bottomInset WRITE setBottomInset RESET resetBottomInset NOTIFY bottomInsetChanged FINAL REVISION(2, 5))
106 Q_PROPERTY(PopupType popupType READ popupType WRITE setPopupType NOTIFY popupTypeChanged FINAL REVISION(6, 8))
107 Q_CLASSINFO("DeferredPropertyNames", "background,contentItem")
108 Q_CLASSINFO("DefaultProperty", "contentData")
109 QML_NAMED_ELEMENT(Popup)
110 QML_ADDED_IN_VERSION(2, 0)
111
112public:
113 explicit QQuickPopup(QObject *parent = nullptr);
114 ~QQuickPopup();
115
116 qreal x() const;
117 void setX(qreal x);
118
119 qreal y() const;
120 void setY(qreal y);
121
122 QPointF position() const;
123 void setPosition(const QPointF &pos);
124
125 qreal z() const;
126 void setZ(qreal z);
127 void resetZ();
128
129 qreal width() const;
130 void setWidth(qreal width);
131 void resetWidth();
132
133 qreal height() const;
134 void setHeight(qreal height);
135 void resetHeight();
136
137 qreal implicitWidth() const;
138 void setImplicitWidth(qreal width);
139
140 qreal implicitHeight() const;
141 void setImplicitHeight(qreal height);
142
143 qreal contentWidth() const;
144 void setContentWidth(qreal width);
145
146 qreal contentHeight() const;
147 void setContentHeight(qreal height);
148
149 qreal availableWidth() const;
150 qreal availableHeight() const;
151
152 qreal margins() const;
153 void setMargins(qreal margins);
154 void resetMargins();
155
156 qreal topMargin() const;
157 void setTopMargin(qreal margin);
158 void resetTopMargin();
159
160 qreal leftMargin() const;
161 void setLeftMargin(qreal margin);
162 void resetLeftMargin();
163
164 qreal rightMargin() const;
165 void setRightMargin(qreal margin);
166 void resetRightMargin();
167
168 qreal bottomMargin() const;
169 void setBottomMargin(qreal margin);
170 void resetBottomMargin();
171
172 qreal padding() const;
173 void setPadding(qreal padding);
174 void resetPadding();
175
176 qreal topPadding() const;
177 void setTopPadding(qreal padding);
178 void resetTopPadding();
179
180 qreal leftPadding() const;
181 void setLeftPadding(qreal padding);
182 void resetLeftPadding();
183
184 qreal rightPadding() const;
185 void setRightPadding(qreal padding);
186 void resetRightPadding();
187
188 qreal bottomPadding() const;
189 void setBottomPadding(qreal padding);
190 void resetBottomPadding();
191
192 QLocale locale() const;
193 void setLocale(const QLocale &locale);
194 void resetLocale();
195
196 QFont font() const;
197 void setFont(const QFont &font);
198 void resetFont();
199
200 QQuickWindow *window() const;
201 QQuickItem *popupItem() const;
202
203 QQuickItem *parentItem() const;
204 void setParentItem(QQuickItem *parent);
205 void resetParentItem();
206
207 QQuickItem *background() const;
208 void setBackground(QQuickItem *background);
209
210 QQuickItem *contentItem() const;
211 void setContentItem(QQuickItem *item);
212
213 bool clip() const;
214 void setClip(bool clip);
215
216 bool hasFocus() const;
217 void setFocus(bool focus);
218
219 bool hasActiveFocus() const;
220
221 bool isModal() const;
222 void setModal(bool modal);
223
224 bool dim() const;
225 void setDim(bool dim);
226 void resetDim();
227
228 virtual bool isVisible() const;
229 virtual void setVisible(bool visible);
230
231 qreal opacity() const;
232 virtual void setOpacity(qreal opacity);
233
234 qreal scale() const;
235 void setScale(qreal scale);
236
237 enum ClosePolicyFlag {
238 NoAutoClose = 0x00,
239 CloseOnPressOutside = 0x01,
240 CloseOnPressOutsideParent = 0x02,
241 CloseOnReleaseOutside = 0x04,
242 CloseOnReleaseOutsideParent = 0x08,
243 CloseOnEscape = 0x10
244 };
245 Q_DECLARE_FLAGS(ClosePolicy, ClosePolicyFlag)
246 Q_FLAG(ClosePolicy)
247
248 ClosePolicy closePolicy() const;
249 void setClosePolicy(ClosePolicy policy);
250 void resetClosePolicy();
251
252 // keep in sync with Item.TransformOrigin
253 enum TransformOrigin {
254 TopLeft, Top, TopRight,
255 Left, Center, Right,
256 BottomLeft, Bottom, BottomRight
257 };
258 Q_ENUM(TransformOrigin)
259
260 TransformOrigin transformOrigin() const;
261 void setTransformOrigin(TransformOrigin);
262
263 QQuickTransition *enter() const;
264 void setEnter(QQuickTransition *transition);
265
266 QQuickTransition *exit() const;
267 void setExit(QQuickTransition *transition);
268
269 bool filtersChildMouseEvents() const;
270 void setFiltersChildMouseEvents(bool filter);
271
272 Q_INVOKABLE void forceActiveFocus(Qt::FocusReason reason = Qt::OtherFocusReason);
273
274 // 2.1 (Qt 5.8)
275 qreal spacing() const;
276 void setSpacing(qreal spacing);
277 void resetSpacing();
278
279 // 2.3 (Qt 5.10)
280 bool isOpened() const;
281 bool isMirrored() const;
282
283 bool isEnabled() const;
284 void setEnabled(bool enabled);
285
286 // 2.5 (Qt 5.12)
287 qreal horizontalPadding() const;
288 void setHorizontalPadding(qreal padding);
289 void resetHorizontalPadding();
290
291 qreal verticalPadding() const;
292 void setVerticalPadding(qreal padding);
293 void resetVerticalPadding();
294
295 qreal implicitContentWidth() const;
296 qreal implicitContentHeight() const;
297
298 qreal implicitBackgroundWidth() const;
299 qreal implicitBackgroundHeight() const;
300
301 qreal topInset() const;
302 void setTopInset(qreal inset);
303 void resetTopInset();
304
305 qreal leftInset() const;
306 void setLeftInset(qreal inset);
307 void resetLeftInset();
308
309 qreal rightInset() const;
310 void setRightInset(qreal inset);
311 void resetRightInset();
312
313 qreal bottomInset() const;
314 void setBottomInset(qreal inset);
315 void resetBottomInset();
316
317 void setWindowModality(const Qt::WindowModality modality);
318
319 enum PopupType {
320 Item,
321 Window,
322 Native
323 };
324 Q_ENUM(PopupType)
325
326 PopupType popupType() const;
327 void setPopupType(PopupType);
328
329public Q_SLOTS:
330 void open();
331 void close();
332
333Q_SIGNALS:
334 void opened();
335 void closed();
336 void aboutToShow();
337 void aboutToHide();
338 void xChanged();
339 void yChanged();
340 void zChanged();
341 void widthChanged();
342 void heightChanged();
343 void implicitWidthChanged();
344 void implicitHeightChanged();
345 void contentWidthChanged();
346 void contentHeightChanged();
347 void availableWidthChanged();
348 void availableHeightChanged();
349 void marginsChanged();
350 void topMarginChanged();
351 void leftMarginChanged();
352 void rightMarginChanged();
353 void bottomMarginChanged();
354 void paddingChanged();
355 void topPaddingChanged();
356 void leftPaddingChanged();
357 void rightPaddingChanged();
358 void bottomPaddingChanged();
359 void fontChanged();
360 void localeChanged();
361 void parentChanged();
362 void backgroundChanged();
363 void contentItemChanged();
364 void contentChildrenChanged();
365 void clipChanged();
366 void focusChanged();
367 void activeFocusChanged();
368 void modalChanged();
369 void dimChanged();
370 void visibleChanged();
371 void opacityChanged();
372 void scaleChanged();
373 void closePolicyChanged();
374 void enterChanged();
375 void exitChanged();
376 void windowChanged(QQuickWindow *window);
377 // 2.1 (Qt 5.8)
378 Q_REVISION(2, 1) void spacingChanged();
379 // 2.3 (Qt 5.10)
380 Q_REVISION(2, 3) void openedChanged();
381 Q_REVISION(2, 3) void mirroredChanged();
382 Q_REVISION(2, 3) void enabledChanged();
383 Q_REVISION(2, 3) void paletteChanged();
384 Q_REVISION(2, 3) void paletteCreated();
385 // 2.5 (Qt 5.12)
386 Q_REVISION(2, 5) void horizontalPaddingChanged();
387 Q_REVISION(2, 5) void verticalPaddingChanged();
388 Q_REVISION(2, 5) void implicitContentWidthChanged();
389 Q_REVISION(2, 5) void implicitContentHeightChanged();
390 Q_REVISION(2, 5) void implicitBackgroundWidthChanged();
391 Q_REVISION(2, 5) void implicitBackgroundHeightChanged();
392 Q_REVISION(2, 5) void topInsetChanged();
393 Q_REVISION(2, 5) void leftInsetChanged();
394 Q_REVISION(2, 5) void rightInsetChanged();
395 Q_REVISION(2, 5) void bottomInsetChanged();
396 Q_REVISION(6, 8) void popupTypeChanged();
397
398protected:
399 QQuickPopup(QQuickPopupPrivate &dd, QObject *parent);
400
401 void classBegin() override;
402 void componentComplete() override;
403 bool isComponentComplete() const;
404
405 virtual bool childMouseEventFilter(QQuickItem *child, QEvent *event);
406 virtual void focusInEvent(QFocusEvent *event);
407 virtual void focusOutEvent(QFocusEvent *event);
408 virtual void keyPressEvent(QKeyEvent *event);
409 virtual void keyReleaseEvent(QKeyEvent *event);
410 virtual void mousePressEvent(QMouseEvent *event);
411 virtual void mouseMoveEvent(QMouseEvent *event);
412 virtual void mouseReleaseEvent(QMouseEvent *event);
413 virtual void mouseDoubleClickEvent(QMouseEvent *event);
414 virtual void mouseUngrabEvent();
415 virtual bool overlayEvent(QQuickItem *item, QEvent *event);
416#if QT_CONFIG(quicktemplates2_multitouch)
417 virtual void touchEvent(QTouchEvent *event);
418 virtual void touchUngrabEvent();
419#endif
420#if QT_CONFIG(wheelevent)
421 virtual void wheelEvent(QWheelEvent *event);
422#endif
423
424 virtual void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem);
425 virtual void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize);
426 virtual void fontChange(const QFont &newFont, const QFont &oldFont);
427 virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry);
428 virtual void localeChange(const QLocale &newLocale, const QLocale &oldLocale);
429 virtual void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data);
430 virtual void marginsChange(const QMarginsF &newMargins, const QMarginsF &oldMargins);
431 virtual void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding);
432 virtual void spacingChange(qreal newSpacing, qreal oldSpacing);
433 virtual void insetChange(const QMarginsF &newInset, const QMarginsF &oldInset);
434
435 virtual QFont defaultFont() const;
436
437#if QT_CONFIG(accessibility)
438 QAccessible::Role effectiveAccessibleRole() const;
439private:
440 virtual QAccessible::Role accessibleRole() const;
441protected:
442 virtual void accessibilityActiveChanged(bool active);
443#endif
444
445 QString accessibleName() const;
446 void maybeSetAccessibleName(const QString &name);
447
448 QVariant accessibleProperty(const char *propertyName);
449 bool setAccessibleProperty(const char *propertyName, const QVariant &value);
450
451private:
452 QQuickItem *findParentItem() const;
453
454 QQuickItem *safeAreaAttachmentItem() override;
455
456 Q_DISABLE_COPY(QQuickPopup)
457 Q_DECLARE_PRIVATE(QQuickPopup)
458 friend class QQuickPopupWindow;
459 friend class QQuickPopupItem;
460 friend class QQuickOverlay;
461 friend class QQuickOverlayPrivate;
462};
463
464Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickPopup::ClosePolicy)
465
466QT_END_NAMESPACE
467
468#endif // QQUICKPOPUP_P_H
469

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