aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates/qquicktumbler_p_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates/qquicktumbler_p_p.h')
-rw-r--r--src/quicktemplates/qquicktumbler_p_p.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/quicktemplates/qquicktumbler_p_p.h b/src/quicktemplates/qquicktumbler_p_p.h
new file mode 100644
index 0000000000..70a611bf0f
--- /dev/null
+++ b/src/quicktemplates/qquicktumbler_p_p.h
@@ -0,0 +1,124 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKTUMBLER_P_P_H
+#define QQUICKTUMBLER_P_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuickTemplates2/private/qquickcontrol_p_p.h>
+#include <QtQuickTemplates2/private/qquicktumbler_p.h>
+
+#include <QtCore/qpointer.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_QUICKTEMPLATES2_EXPORT QQuickTumblerPrivate : public QQuickControlPrivate
+{
+ Q_DECLARE_PUBLIC(QQuickTumbler)
+
+public:
+ enum ContentItemType {
+ NoContentItem,
+ UnsupportedContentItemType,
+ PathViewContentItem,
+ ListViewContentItem
+ };
+
+ QQuickItem *determineViewType(QQuickItem *contentItem);
+ void resetViewData();
+ QList<QQuickItem *> viewContentItemChildItems() const;
+
+ static QQuickTumblerPrivate *get(QQuickTumbler *tumbler);
+
+ QPalette defaultPalette() const override;
+
+ QVariant model;
+ QQmlComponent *delegate = nullptr;
+ int visibleItemCount = 5;
+ bool wrap = true;
+ bool explicitWrap = false;
+ bool modelBeingSet = false;
+ bool currentIndexSetDuringModelChange = false;
+ QQuickItem *view = nullptr;
+ QQuickItem *viewContentItem = nullptr;
+ ContentItemType viewContentItemType = UnsupportedContentItemType;
+ union {
+ qreal viewOffset; // PathView
+ qreal viewContentY; // ListView
+ };
+ int currentIndex = -1;
+ int pendingCurrentIndex = -1;
+ bool ignoreCurrentIndexChanges = false;
+ int count = 0;
+ bool ignoreSignals = false;
+
+ void _q_updateItemHeights();
+ void _q_updateItemWidths();
+ void _q_onViewCurrentIndexChanged();
+ void _q_onViewCountChanged();
+ void _q_onViewOffsetChanged();
+ void _q_onViewContentYChanged();
+
+ void calculateDisplacements();
+
+ void disconnectFromView();
+ void setupViewData(QQuickItem *newControlContentItem);
+ void warnAboutIncorrectContentItem();
+ void syncCurrentIndex();
+ void setPendingCurrentIndex(int index);
+
+ enum PropertyChangeReason {
+ UserChange,
+ InternalChange
+ };
+
+ static QString propertyChangeReasonToString(PropertyChangeReason changeReason);
+
+ void setCurrentIndex(int newCurrentIndex, PropertyChangeReason changeReason = InternalChange);
+ void setCount(int newCount);
+ void setWrapBasedOnCount();
+ void setWrap(bool shouldWrap, bool isExplicit);
+ void beginSetModel();
+ void endSetModel();
+
+ void itemChildAdded(QQuickItem *, QQuickItem *) override;
+ void itemChildRemoved(QQuickItem *, QQuickItem *) override;
+ void itemGeometryChanged(QQuickItem *, QQuickGeometryChange , const QRectF &) override;
+};
+
+class QQuickTumblerAttachedPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QQuickTumblerAttached)
+
+public:
+ static QQuickTumblerAttachedPrivate *get(QQuickTumblerAttached *attached)
+ {
+ return attached->d_func();
+ }
+
+ void init(QQuickItem *delegateItem);
+
+ void calculateDisplacement();
+ void emitIfDisplacementChanged(qreal oldDisplacement, qreal newDisplacement);
+
+ // The Tumbler that contains the delegate. Required to calculated the displacement.
+ QPointer<QQuickTumbler> tumbler;
+ // The index of the delegate. Used to calculate the displacement.
+ int index = -1;
+ // The displacement for our delegate.
+ qreal displacement = 0;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKTUMBLER_P_P_H