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
qquickitemviewtransition_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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 QQUICKITEMVIEWTRANSITION_P_P_H
6#define QQUICKITEMVIEWTRANSITION_P_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 <QtQuick/private/qtquickglobal_p.h>
20
22
23#include <QtCore/qobject.h>
24#include <QtCore/qpoint.h>
25#include <QtQml/qqml.h>
26#include <private/qqmlguard_p.h>
27#include <private/qquicktransition_p.h>
28#include <private/qanimationjobutil_p.h>
29
30#include <QtCore/qpointer.h>
31
32QT_BEGIN_NAMESPACE
33
34class QQuickItem;
35class QQuickTransition;
36class QQuickItemViewTransitionableItem;
38
39
41{
42public:
43 QQuickItemViewTransitionChangeListener() {}
44 virtual ~QQuickItemViewTransitionChangeListener() {}
45
46 virtual void viewItemTransitionFinished(QQuickItemViewTransitionableItem *item) = 0;
47};
48
49
50class Q_QUICK_EXPORT QQuickItemViewTransitioner
51{
52public:
53 enum TransitionType {
54 NoTransition,
55 PopulateTransition,
56 AddTransition,
57 MoveTransition,
58 RemoveTransition
59 };
60
61 QQuickItemViewTransitioner();
62 virtual ~QQuickItemViewTransitioner();
63
64 bool canTransition(QQuickItemViewTransitioner::TransitionType type, bool asTarget) const;
65 void transitionNextReposition(QQuickItemViewTransitionableItem *item, QQuickItemViewTransitioner::TransitionType type, bool isTarget);
66
67 void addToTargetLists(QQuickItemViewTransitioner::TransitionType type, QQuickItemViewTransitionableItem *item, int index);
68 void resetTargetLists();
69
70 QQuickTransition *transitionObject(QQuickItemViewTransitioner::TransitionType type, bool asTarget) const;
71 const QList<int> &targetIndexes(QQuickItemViewTransitioner::TransitionType type) const;
72 const QList<QObject *> &targetItems(QQuickItemViewTransitioner::TransitionType type) const;
73
74 inline void setPopulateTransitionEnabled(bool b) { usePopulateTransition = b; }
75 inline bool populateTransitionEnabled() const { return usePopulateTransition; }
76
77 inline void setChangeListener(QQuickItemViewTransitionChangeListener *obj) { changeListener = obj; }
78
79 QSet<QQuickItemViewTransitionJob *> runningJobs;
80
81 QList<int> addTransitionIndexes;
82 QList<int> moveTransitionIndexes;
83 QList<int> removeTransitionIndexes;
84 QList<QObject *> addTransitionTargets;
85 QList<QObject *> moveTransitionTargets;
86 QList<QObject *> removeTransitionTargets;
87
88 QQmlGuard<QQuickTransition> populateTransition;
89 QQmlGuard<QQuickTransition> addTransition;
90 QQmlGuard<QQuickTransition> addDisplacedTransition;
91 QQmlGuard<QQuickTransition> moveTransition;
92 QQmlGuard<QQuickTransition> moveDisplacedTransition;
93 QQmlGuard<QQuickTransition> removeTransition;
94 QQmlGuard<QQuickTransition> removeDisplacedTransition;
95 QQmlGuard<QQuickTransition> displacedTransition;
96
97private:
98 friend class QQuickItemViewTransitionJob;
99
100 QQuickItemViewTransitionChangeListener *changeListener;
101 bool usePopulateTransition;
102
103 void finishedTransition(QQuickItemViewTransitionJob *job, QQuickItemViewTransitionableItem *item);
104};
105
106
107/*
108 An item that can be transitioned using QQuickViewTransitionJob.
109 */
111{
112public:
113 QQuickItemViewTransitionableItem(QQuickItem *i);
114 virtual ~QQuickItemViewTransitionableItem();
115
116 qreal itemX() const;
117 qreal itemY() const;
118
119 void moveTo(const QPointF &pos, bool immediate = false);
120
121 bool transitionScheduledOrRunning() const;
122 bool transitionRunning() const;
123 bool isPendingRemoval() const;
124
125 bool prepareTransition(QQuickItemViewTransitioner *transitioner, int index, const QRectF &viewBounds);
126 void startTransition(QQuickItemViewTransitioner *transitioner, int index);
127 void completeTransition(QQuickTransition *quickTransition);
128
129 SelfDeletable m_selfDeletable;
130 QPointF nextTransitionTo;
131 QPointF lastMovedTo;
132 QPointF nextTransitionFrom;
133 QQuickItem *item;
134 QQuickItemViewTransitionJob *transition;
135 QQuickItemViewTransitioner::TransitionType nextTransitionType;
136 bool isTransitionTarget : 1;
137 bool nextTransitionToSet : 1;
138 bool nextTransitionFromSet : 1;
139 bool lastMovedToSet : 1;
140 bool prepared : 1;
141
142private:
143 friend class QQuickItemViewTransitioner;
144 friend class QQuickItemViewTransitionJob;
145 void setNextTransition(QQuickItemViewTransitioner::TransitionType, bool isTargetItem);
146 bool transitionWillChangePosition() const;
147 void finishedTransition();
148 void resetNextTransitionPos();
149 void clearCurrentScheduledTransition();
150 void stopTransition();
151};
152
153
155{
156 Q_OBJECT
157
158 Q_PROPERTY(int index READ index NOTIFY indexChanged FINAL)
161
164
167 QML_UNCREATABLE("ViewTransition is only available via attached properties.")
169
170public:
172
173 int index() const { return m_index; }
174 QQuickItem *item() const { return m_item; }
175 QPointF destination() const { return m_destination; }
176
177 QList<int> targetIndexes() const { return m_targetIndexes; }
179
181
186
189
190private:
192 QPointF m_destination;
193 QList<int> m_targetIndexes;
194 QList<QObject *> m_targetItems;
195
196 QPointer<QQuickItem> m_item;
197 int m_index;
198};
199
200QT_END_NAMESPACE
201
202#endif // QQUICKITEMVIEWTRANSITION_P_P_H
QQuickItemViewTransitioner * m_transitioner
void startTransition(QQuickItemViewTransitionableItem *item, int index, QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, const QPointF &to, bool isTargetItem)
QQuickItemViewTransitionableItem * m_item
QQmlListProperty< QObject > targetItems()
static QQuickViewTransitionAttached * qmlAttachedProperties(QObject *)
static QT_BEGIN_NAMESPACE QList< int > qquickitemviewtransition_emptyIndexes
static QList< QObject * > qquickitemviewtransition_emptyTargets
QT_REQUIRE_CONFIG(quick_viewtransitions)