7#include <QtQml/qqmlinfo.h>
8#include <QtQuickTemplates2/private/qquickcontainer_p_p.h>
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
79 Q_DECLARE_PUBLIC(QQuickSwipeView)
100 Q_DECLARE_PUBLIC(QQuickSwipeViewAttached)
118 QQuickAnchors *anchors = QQuickItemPrivate::get(item)->_anchors;
120 if (anchors && (anchors->fill() || anchors->centerIn()) && !item->property(
"_q_QQuickSwipeView_warned").toBool()) {
121 qmlWarning(item) <<
"SwipeView has detected conflicting anchors. Unable to layout the item.";
122 item->setProperty(
"_q_QQuickSwipeView_warned",
true);
124 if (orientation == Qt::Horizontal)
125 item->setPosition({index * (contentItem->width() + spacing), 0});
127 item->setPosition({0, index * (contentItem->height() + spacing)});
128 item->setSize(QSizeF(contentItem->width(), contentItem->height()));
133 Q_Q(QQuickSwipeView);
134 const int count = q->count();
135 for (
int i = 0; i < count; ++i) {
136 QQuickItem *item = itemAt(i);
144 return view->d_func();
149 Q_Q(QQuickSwipeView);
150 QQuickContainerPrivate::itemImplicitWidthChanged(item);
151 if (item == q->currentItem())
152 updateImplicitContentWidth();
157 Q_Q(QQuickSwipeView);
158 QQuickContainerPrivate::itemImplicitHeightChanged(item);
159 if (item == q->currentItem())
160 updateImplicitContentHeight();
165 Q_Q(
const QQuickSwipeView);
166 QQuickItem *currentItem = q->currentItem();
167 return currentItem ? currentItem->implicitWidth() : 0;
172 Q_Q(
const QQuickSwipeView);
173 QQuickItem *currentItem = q->currentItem();
174 return currentItem ? currentItem->implicitHeight() : 0;
177QQuickSwipeView::QQuickSwipeView(QQuickItem *parent)
178 : QQuickContainer(*(
new QQuickSwipeViewPrivate), parent)
180 Q_D(QQuickSwipeView);
181 d->changeTypes |= QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight;
182 setFlag(ItemIsFocusScope);
183 setActiveFocusOnTab(
true);
184 QObjectPrivate::connect(
this, &QQuickContainer::currentItemChanged, d, &QQuickControlPrivate::updateImplicitContentSize);
188
189
190
191
192
193
194
195
196bool QQuickSwipeView::isInteractive()
const
198 Q_D(
const QQuickSwipeView);
199 return d->interactive;
202void QQuickSwipeView::setInteractive(
bool interactive)
204 Q_D(QQuickSwipeView);
205 if (d->interactive == interactive)
208 d->interactive = interactive;
209 emit interactiveChanged();
213
214
215
216
217
218
219
220
221
222
223
224Qt::Orientation QQuickSwipeView::orientation()
const
226 Q_D(
const QQuickSwipeView);
227 return d->orientation;
230void QQuickSwipeView::setOrientation(Qt::Orientation orientation)
232 Q_D(QQuickSwipeView);
233 if (d->orientation == orientation)
236 d->orientation = orientation;
237 if (isComponentComplete())
239 emit orientationChanged();
243
244
245
246
247
248
249
250
251bool QQuickSwipeView::isHorizontal()
const
253 Q_D(
const QQuickSwipeView);
254 return d->orientation == Qt::Horizontal;
258
259
260
261
262
263
264
265
266bool QQuickSwipeView::isVertical()
const
268 Q_D(
const QQuickSwipeView);
269 return d->orientation == Qt::Vertical;
272QQuickSwipeViewAttached *QQuickSwipeView::qmlAttachedProperties(QObject *object)
274 return new QQuickSwipeViewAttached(object);
277void QQuickSwipeView::componentComplete()
279 Q_D(QQuickSwipeView);
280 QQuickContainer::componentComplete();
284void QQuickSwipeView::geometryChange(
const QRectF &newGeometry,
const QRectF &oldGeometry)
286 Q_D(QQuickSwipeView);
287 QQuickContainer::geometryChange(newGeometry, oldGeometry);
291void QQuickSwipeView::itemAdded(
int index, QQuickItem *item)
293 Q_D(QQuickSwipeView);
294 if (isComponentComplete())
295 d->resizeItem(index, item);
296 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
298 QQuickSwipeViewAttachedPrivate::get(attached)->update(
this, index);
301void QQuickSwipeView::itemMoved(
int index, QQuickItem *item)
303 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
305 QQuickSwipeViewAttachedPrivate::get(attached)->update(
this, index);
308void QQuickSwipeView::itemRemoved(
int, QQuickItem *item)
310 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
312 QQuickSwipeViewAttachedPrivate::get(attached)->update(
nullptr, -1);
315#if QT_CONFIG(accessibility)
316QAccessible::Role QQuickSwipeView::accessibleRole()
const
318 return QAccessible::PageTabList;
323
324
325
326
327
328
329
332
333
334
335
336
337
338
341
342
343
344
345
346
347
348
351
352
353
354
355
356
357
358
361
362
363
364
365
366
367
379 Q_Q(QQuickSwipeViewAttached);
380 const bool wasCurrent = q->isCurrentItem();
381 const bool wasNext = q->isNextItem();
382 const bool wasPrevious = q->isPreviousItem();
385 if (wasCurrent != q->isCurrentItem())
386 emit q->isCurrentItemChanged();
387 if (wasNext != q->isNextItem())
388 emit q->isNextItemChanged();
389 if (wasPrevious != q->isPreviousItem())
390 emit q->isPreviousItemChanged();
395 Q_Q(QQuickSwipeViewAttached);
396 int oldIndex = index;
397 QQuickSwipeView *oldView = swipeView;
402 if (oldView != newView) {
404 disconnect(oldView, &QQuickSwipeView::currentIndexChanged,
405 this, &QQuickSwipeViewAttachedPrivate::updateCurrentIndex);
408 connect(newView, &QQuickSwipeView::currentIndexChanged,
409 this, &QQuickSwipeViewAttachedPrivate::updateCurrentIndex);
411 emit q->viewChanged();
413 if (oldIndex != newIndex)
414 emit q->indexChanged();
416 updateCurrentIndex();
419QQuickSwipeViewAttached::QQuickSwipeViewAttached(QObject *parent)
420 : QObject(*(
new QQuickSwipeViewAttachedPrivate), parent)
422 if (!qobject_cast<QQuickItem *>(parent))
423 qmlWarning(parent) <<
"SwipeView: attached properties must be accessed from within a child item";
426int QQuickSwipeViewAttached::index()
const
428 Q_D(
const QQuickSwipeViewAttached);
432bool QQuickSwipeViewAttached::isCurrentItem()
const
434 Q_D(
const QQuickSwipeViewAttached);
435 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex;
438QQuickSwipeView *QQuickSwipeViewAttached::view()
const
440 Q_D(
const QQuickSwipeViewAttached);
444bool QQuickSwipeViewAttached::isNextItem()
const
446 Q_D(
const QQuickSwipeViewAttached);
447 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex + 1;
450bool QQuickSwipeViewAttached::isPreviousItem()
const
452 Q_D(
const QQuickSwipeViewAttached);
453 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex - 1;
458#include "moc_qquickswipeview_p.cpp"
void updateCurrentIndex()
\qmlattachedproperty int QtQuick.Controls::SwipeView::index \readonly
void setCurrentIndex(int i)
QQuickSwipeView * swipeView
Enables the user to navigate pages by swiping sideways.
void itemImplicitWidthChanged(QQuickItem *item) override
qreal getContentHeight() const override
qreal getContentWidth() const override
static QQuickSwipeViewPrivate * get(QQuickSwipeView *view)
Qt::Orientation orientation
void itemImplicitHeightChanged(QQuickItem *item) override
Combined button and popup list for selecting options.