Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickstackview_p.h
Go to the documentation of this file.
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// Qt-Security score:significant reason:default
4
5#ifndef QQUICKSTACKVIEW_P_H
6#define QQUICKSTACKVIEW_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/qdebug.h>
20#include <QtCore/qvariantmap.h>
21#include <QtQuickTemplates2/private/qquickcontrol_p.h>
22
24
25class QQuickTransition;
28class QQuickStackViewAttached;
30class QQmlComponent;
31
32/*!
33 \internal
34
35 Input from the user that is turned into QQuickStackElements.
36
37 This was added to support the QML-compiler-friendly pushElement[s]
38 functions.
39*/
41{
42 Q_GADGET
43 QML_CONSTRUCTIBLE_VALUE
45
46public:
47 QQuickStackViewArg() = default;
52
53#ifndef QT_NO_DEBUG_STREAM
54 friend QDebug operator<<(QDebug debug, const QQuickStackViewArg &arg);
55#endif
56
57private:
59 friend class QQuickStackElement;
60
61 QQuickItem *mItem = nullptr;
62 QQmlComponent *mComponent = nullptr;
63 QUrl mUrl;
64 QVariantMap mProperties;
65};
66
67class Q_QUICKTEMPLATES2_EXPORT QQuickStackView : public QQuickControl
68{
69 Q_OBJECT
70 Q_PROPERTY(bool busy READ isBusy NOTIFY busyChanged FINAL)
71 Q_PROPERTY(int depth READ depth NOTIFY depthChanged FINAL)
72 Q_PROPERTY(QQuickItem *currentItem READ currentItem NOTIFY currentItemChanged FINAL)
73 Q_PROPERTY(QJSValue initialItem READ initialItem WRITE setInitialItem FINAL)
74#if QT_CONFIG(quick_viewtransitions)
75 Q_PROPERTY(QQuickTransition *popEnter READ popEnter WRITE setPopEnter NOTIFY popEnterChanged FINAL)
76 Q_PROPERTY(QQuickTransition *popExit READ popExit WRITE setPopExit NOTIFY popExitChanged FINAL)
77 Q_PROPERTY(QQuickTransition *pushEnter READ pushEnter WRITE setPushEnter NOTIFY pushEnterChanged FINAL)
78 Q_PROPERTY(QQuickTransition *pushExit READ pushExit WRITE setPushExit NOTIFY pushExitChanged FINAL)
79 Q_PROPERTY(QQuickTransition *replaceEnter READ replaceEnter WRITE setReplaceEnter NOTIFY replaceEnterChanged FINAL)
80 Q_PROPERTY(QQuickTransition *replaceExit READ replaceExit WRITE setReplaceExit NOTIFY replaceExitChanged FINAL)
81#endif
82 // 2.3 (Qt 5.10)
83 Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged FINAL REVISION(2, 3))
84 QML_NAMED_ELEMENT(StackView)
85 QML_ATTACHED(QQuickStackViewAttached)
86 QML_ADDED_IN_VERSION(2, 0)
87
88public:
89 explicit QQuickStackView(QQuickItem *parent = nullptr);
90 ~QQuickStackView();
91
92 static QQuickStackViewAttached *qmlAttachedProperties(QObject *object);
93
94 bool isBusy() const;
95 int depth() const;
96 QQuickItem *currentItem() const;
97
98 enum Status {
99 Inactive = 0,
100 Deactivating = 1,
101 Activating = 2,
102 Active = 3
103 };
104 Q_ENUM(Status)
105
106 QJSValue initialItem() const;
107 void setInitialItem(const QJSValue &item);
108
109#if QT_CONFIG(quick_viewtransitions)
110 QQuickTransition *popEnter() const;
111 void setPopEnter(QQuickTransition *enter);
112
113 QQuickTransition *popExit() const;
114 void setPopExit(QQuickTransition *exit);
115
116 QQuickTransition *pushEnter() const;
117 void setPushEnter(QQuickTransition *enter);
118
119 QQuickTransition *pushExit() const;
120 void setPushExit(QQuickTransition *exit);
121
122 QQuickTransition *replaceEnter() const;
123 void setReplaceEnter(QQuickTransition *enter);
124
125 QQuickTransition *replaceExit() const;
126 void setReplaceExit(QQuickTransition *exit);
127#endif
128
129 enum LoadBehavior {
130 DontLoad,
131 ForceLoad
132 };
133 Q_ENUM(LoadBehavior)
134
135 Q_INVOKABLE QQuickItem *get(int index, QQuickStackView::LoadBehavior behavior = DontLoad);
136 Q_INVOKABLE QQuickItem *find(const QJSValue &callback, QQuickStackView::LoadBehavior behavior = DontLoad);
137
138 enum Operation {
139 Transition = -1, // ### Deprecated in Qt 6; remove in Qt 7.
140 Immediate = 0,
141 PushTransition = 1,
142 ReplaceTransition = 2,
143 PopTransition = 3,
144 };
145 Q_ENUM(Operation)
146
147 Q_INVOKABLE void push(QQmlV4FunctionPtr args);
148 Q_INVOKABLE void pop(QQmlV4FunctionPtr args);
149 Q_INVOKABLE void replace(QQmlV4FunctionPtr args);
150
151 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *pushItems(QList<QQuickStackViewArg> args,
152 Operation operation = PushTransition);
153 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *pushItem(QQuickItem *item, const QVariantMap &properties = {},
154 Operation operation = PushTransition);
155 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *pushItem(QQmlComponent *component, const QVariantMap &properties = {},
156 Operation operation = PushTransition);
157 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *pushItem(const QUrl &url, const QVariantMap &properties = {},
158 Operation operation = PushTransition);
159
160 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *popToItem(QQuickItem *item, Operation operation = PopTransition);
161 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *popToIndex(int index, Operation operation = PopTransition);
162 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *popCurrentItem(Operation operation = PopTransition);
163
164 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *replaceCurrentItem(const QList<QQuickStackViewArg> &args,
165 Operation operation = ReplaceTransition);
166 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *replaceCurrentItem(QQuickItem *item,
167 const QVariantMap &properties = {}, Operation operation = ReplaceTransition);
168 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *replaceCurrentItem(QQmlComponent *component,
169 const QVariantMap &properties = {}, Operation operation = ReplaceTransition);
170 Q_REVISION(6, 7) Q_INVOKABLE QQuickItem *replaceCurrentItem(const QUrl &url,
171 const QVariantMap &properties = {}, Operation operation = ReplaceTransition);
172
173 // 2.3 (Qt 5.10)
174 bool isEmpty() const;
175
176public Q_SLOTS:
177 void clear(Operation operation = Immediate);
178
179Q_SIGNALS:
180 void busyChanged();
181 void depthChanged();
182 void currentItemChanged();
183#if QT_CONFIG(quick_viewtransitions)
184 void popEnterChanged();
185 void popExitChanged();
186 void pushEnterChanged();
187 void pushExitChanged();
188 void replaceEnterChanged();
189 void replaceExitChanged();
190#endif
191 // 2.3 (Qt 5.10)
192 Q_REVISION(2, 3) void emptyChanged();
193
194protected:
195 void componentComplete() override;
196 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
197 bool childMouseEventFilter(QQuickItem *, QEvent *) override;
198
199#if QT_CONFIG(quicktemplates2_multitouch)
200 void touchEvent(QTouchEvent *event) override;
201#endif
202
203#if QT_CONFIG(accessibility)
204 QAccessible::Role accessibleRole() const override;
205#endif
206
207private:
208 Q_DISABLE_COPY(QQuickStackView)
209 Q_DECLARE_PRIVATE(QQuickStackView)
210};
211
212class Q_QUICKTEMPLATES2_EXPORT QQuickStackViewAttached : public QObject
213{
214 Q_OBJECT
215 Q_PROPERTY(int index READ index NOTIFY indexChanged FINAL)
216 Q_PROPERTY(QQuickStackView *view READ view NOTIFY viewChanged FINAL)
217 Q_PROPERTY(QQuickStackView::Status status READ status NOTIFY statusChanged FINAL)
218 // 2.2 (Qt 5.9)
219 Q_PROPERTY(bool visible READ isVisible WRITE setVisible RESET resetVisible NOTIFY visibleChanged FINAL) // REVISION(2, 2)
220
221public:
222 explicit QQuickStackViewAttached(QObject *parent = nullptr);
223 ~QQuickStackViewAttached();
224
225 int index() const;
226 QQuickStackView *view() const;
227 QQuickStackView::Status status() const;
228
229 // 2.2 (Qt 5.9)
230 bool isVisible() const;
231 void setVisible(bool visible);
232 void resetVisible();
233
234Q_SIGNALS:
235 void indexChanged();
236 void viewChanged();
237 void statusChanged();
238 // 2.1 (Qt 5.8)
239 /*Q_REVISION(2, 1)*/ void activated();
240 /*Q_REVISION(2, 1)*/ void activating();
241 /*Q_REVISION(2, 1)*/ void deactivated();
242 /*Q_REVISION(2, 1)*/ void deactivating();
243 /*Q_REVISION(2, 1)*/ void removed();
244 // 2.2 (Qt 5.9)
245 /*Q_REVISION(2, 2)*/ void visibleChanged();
246
247private:
248 Q_DISABLE_COPY(QQuickStackViewAttached)
249 Q_DECLARE_PRIVATE(QQuickStackViewAttached)
250};
251
252QT_END_NAMESPACE
253
254#endif // QQUICKSTACKVIEW_P_H
void itemDestroyed(QQuickItem *item) override
static QQuickStackElement * fromStackViewArg(QQmlEngine *engine, QQuickStackView *view, QQuickStackViewArg arg)
QPointer< QQuickItem > originalParent
void initialize(QV4::ExecutionEngine *v4, RequiredProperties *requiredProperties)
void setVisible(bool visible)
static QQuickStackElement * fromString(QQmlEngine *engine, const QString &str, QQuickStackView *view, QString *error)
bool load(QV4::ExecutionEngine *v4, QQuickStackView *parent)
static QQuickStackElement * fromObject(QObject *object, QQuickStackView *view, QString *error)
void setStatus(QQuickStackView::Status status)
QV4::PersistentValue properties
void incubate(QV4::ExecutionEngine *v4, QObject *object, RequiredProperties *requiredProperties)
QQuickStackView::Status status
void setView(QQuickStackView *view)
QV4::PersistentValue qmlCallingContext
QQuickStackIncubator(QQuickStackElement *element)
void setInitialState(QObject *object) override
Called after the object is first created, but before complex property bindings are evaluated and,...
friend QDebug operator<<(QDebug debug, const QQuickStackViewArg &arg)