6#include <QtQml/qqmlinfo.h>
7#include <QtQuickTemplates2/private/qquickcontainer_p_p.h>
12
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
77 Q_DECLARE_PUBLIC(QQuickSwipeView)
98 Q_DECLARE_PUBLIC(QQuickSwipeViewAttached)
116 QQuickAnchors *anchors = QQuickItemPrivate::get(item)->_anchors;
118 if (anchors && (anchors->fill() || anchors->centerIn()) && !item->property(
"_q_QQuickSwipeView_warned").toBool()) {
119 qmlWarning(item) <<
"SwipeView has detected conflicting anchors. Unable to layout the item.";
120 item->setProperty(
"_q_QQuickSwipeView_warned",
true);
122 if (orientation == Qt::Horizontal)
123 item->setPosition({index * (contentItem->width() + spacing), 0});
125 item->setPosition({0, index * (contentItem->height() + spacing)});
126 item->setSize(QSizeF(contentItem->width(), contentItem->height()));
131 Q_Q(QQuickSwipeView);
132 const int count = q->count();
133 for (
int i = 0; i < count; ++i) {
134 QQuickItem *item = itemAt(i);
142 return view->d_func();
147 Q_Q(QQuickSwipeView);
148 QQuickContainerPrivate::itemImplicitWidthChanged(item);
149 if (item == q->currentItem())
150 updateImplicitContentWidth();
155 Q_Q(QQuickSwipeView);
156 QQuickContainerPrivate::itemImplicitHeightChanged(item);
157 if (item == q->currentItem())
158 updateImplicitContentHeight();
163 Q_Q(
const QQuickSwipeView);
164 QQuickItem *currentItem = q->currentItem();
165 return currentItem ? currentItem->implicitWidth() : 0;
170 Q_Q(
const QQuickSwipeView);
171 QQuickItem *currentItem = q->currentItem();
172 return currentItem ? currentItem->implicitHeight() : 0;
175QQuickSwipeView::QQuickSwipeView(QQuickItem *parent)
176 : QQuickContainer(*(
new QQuickSwipeViewPrivate), parent)
178 Q_D(QQuickSwipeView);
179 d->changeTypes |= QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight;
180 setFlag(ItemIsFocusScope);
181 setActiveFocusOnTab(
true);
182 QObjectPrivate::connect(
this, &QQuickContainer::currentItemChanged, d, &QQuickControlPrivate::updateImplicitContentSize);
186
187
188
189
190
191
192
193
194bool QQuickSwipeView::isInteractive()
const
196 Q_D(
const QQuickSwipeView);
197 return d->interactive;
200void QQuickSwipeView::setInteractive(
bool interactive)
202 Q_D(QQuickSwipeView);
203 if (d->interactive == interactive)
206 d->interactive = interactive;
207 emit interactiveChanged();
211
212
213
214
215
216
217
218
219
220
221
222Qt::Orientation QQuickSwipeView::orientation()
const
224 Q_D(
const QQuickSwipeView);
225 return d->orientation;
228void QQuickSwipeView::setOrientation(Qt::Orientation orientation)
230 Q_D(QQuickSwipeView);
231 if (d->orientation == orientation)
234 d->orientation = orientation;
235 if (isComponentComplete())
237 emit orientationChanged();
241
242
243
244
245
246
247
248
249bool QQuickSwipeView::isHorizontal()
const
251 Q_D(
const QQuickSwipeView);
252 return d->orientation == Qt::Horizontal;
256
257
258
259
260
261
262
263
264bool QQuickSwipeView::isVertical()
const
266 Q_D(
const QQuickSwipeView);
267 return d->orientation == Qt::Vertical;
270QQuickSwipeViewAttached *QQuickSwipeView::qmlAttachedProperties(QObject *object)
272 return new QQuickSwipeViewAttached(object);
275void QQuickSwipeView::componentComplete()
277 Q_D(QQuickSwipeView);
278 QQuickContainer::componentComplete();
282void QQuickSwipeView::geometryChange(
const QRectF &newGeometry,
const QRectF &oldGeometry)
284 Q_D(QQuickSwipeView);
285 QQuickContainer::geometryChange(newGeometry, oldGeometry);
289void QQuickSwipeView::itemAdded(
int index, QQuickItem *item)
291 Q_D(QQuickSwipeView);
292 if (isComponentComplete())
293 d->resizeItem(index, item);
294 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
296 QQuickSwipeViewAttachedPrivate::get(attached)->update(
this, index);
299void QQuickSwipeView::itemMoved(
int index, QQuickItem *item)
301 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
303 QQuickSwipeViewAttachedPrivate::get(attached)->update(
this, index);
306void QQuickSwipeView::itemRemoved(
int, QQuickItem *item)
308 QQuickSwipeViewAttached *attached = qobject_cast<QQuickSwipeViewAttached *>(qmlAttachedPropertiesObject<QQuickSwipeView>(item));
310 QQuickSwipeViewAttachedPrivate::get(attached)->update(
nullptr, -1);
313#if QT_CONFIG(accessibility)
314QAccessible::Role QQuickSwipeView::accessibleRole()
const
316 return QAccessible::PageTabList;
321
322
323
324
325
326
327
330
331
332
333
334
335
336
339
340
341
342
343
344
345
346
349
350
351
352
353
354
355
356
359
360
361
362
363
364
365
369 setCurrentIndex(swipeView ? swipeView->currentIndex() : -1);
377 Q_Q(QQuickSwipeViewAttached);
378 const bool wasCurrent = q->isCurrentItem();
379 const bool wasNext = q->isNextItem();
380 const bool wasPrevious = q->isPreviousItem();
383 if (wasCurrent != q->isCurrentItem())
384 emit q->isCurrentItemChanged();
385 if (wasNext != q->isNextItem())
386 emit q->isNextItemChanged();
387 if (wasPrevious != q->isPreviousItem())
388 emit q->isPreviousItemChanged();
393 Q_Q(QQuickSwipeViewAttached);
394 int oldIndex = index;
395 QQuickSwipeView *oldView = swipeView;
400 if (oldView != newView) {
402 disconnect(oldView, &QQuickSwipeView::currentIndexChanged,
403 this, &QQuickSwipeViewAttachedPrivate::updateCurrentIndex);
406 connect(newView, &QQuickSwipeView::currentIndexChanged,
407 this, &QQuickSwipeViewAttachedPrivate::updateCurrentIndex);
409 emit q->viewChanged();
411 if (oldIndex != newIndex)
412 emit q->indexChanged();
414 updateCurrentIndex();
417QQuickSwipeViewAttached::QQuickSwipeViewAttached(QObject *parent)
418 : QObject(*(
new QQuickSwipeViewAttachedPrivate), parent)
420 if (!qobject_cast<QQuickItem *>(parent))
421 qmlWarning(parent) <<
"SwipeView: attached properties must be accessed from within a child item";
424int QQuickSwipeViewAttached::index()
const
426 Q_D(
const QQuickSwipeViewAttached);
430bool QQuickSwipeViewAttached::isCurrentItem()
const
432 Q_D(
const QQuickSwipeViewAttached);
433 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex;
436QQuickSwipeView *QQuickSwipeViewAttached::view()
const
438 Q_D(
const QQuickSwipeViewAttached);
442bool QQuickSwipeViewAttached::isNextItem()
const
444 Q_D(
const QQuickSwipeViewAttached);
445 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex + 1;
448bool QQuickSwipeViewAttached::isPreviousItem()
const
450 Q_D(
const QQuickSwipeViewAttached);
451 return d->index != -1 && d->currentIndex != -1 && d->index == d->currentIndex - 1;
456#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.