1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#ifndef QQUICKTUMBLER_P_H
38#define QQUICKTUMBLER_P_H
39
40//
41// W A R N I N G
42// -------------
43//
44// This file is not part of the Qt API. It exists purely as an
45// implementation detail. This header file may change from version to
46// version without notice, or even be removed.
47//
48// We mean it.
49//
50
51#include <QtCore/qvariant.h>
52#include <QtQml/qqmlcomponent.h>
53#include <QtQuickTemplates2/private/qquickcontrol_p.h>
54
55QT_BEGIN_NAMESPACE
56
57class QQuickTumblerAttached;
58class QQuickTumblerPrivate;
59
60class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickTumbler : public QQuickControl
61{
62 Q_OBJECT
63 Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged FINAL)
64 Q_PROPERTY(int count READ count NOTIFY countChanged FINAL)
65 Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged FINAL)
66 Q_PROPERTY(QQuickItem *currentItem READ currentItem NOTIFY currentItemChanged FINAL)
67 Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged FINAL)
68 Q_PROPERTY(int visibleItemCount READ visibleItemCount WRITE setVisibleItemCount NOTIFY visibleItemCountChanged FINAL)
69 // 2.1 (Qt 5.8)
70 Q_PROPERTY(bool wrap READ wrap WRITE setWrap RESET resetWrap NOTIFY wrapChanged FINAL REVISION 1)
71 // 2.2 (Qt 5.9)
72 Q_PROPERTY(bool moving READ isMoving NOTIFY movingChanged FINAL REVISION 2)
73
74public:
75 explicit QQuickTumbler(QQuickItem *parent = nullptr);
76 ~QQuickTumbler();
77
78 QVariant model() const;
79 void setModel(const QVariant &model);
80
81 int count() const;
82
83 int currentIndex() const;
84 void setCurrentIndex(int currentIndex);
85 QQuickItem *currentItem() const;
86
87 QQmlComponent *delegate() const;
88 void setDelegate(QQmlComponent *delegate);
89
90 int visibleItemCount() const;
91 void setVisibleItemCount(int visibleItemCount);
92
93 static QQuickTumblerAttached *qmlAttachedProperties(QObject *object);
94
95 // 2.1 (Qt 5.8)
96 bool wrap() const;
97 void setWrap(bool wrap);
98 void resetWrap();
99
100 // 2.2 (Qt 5.9)
101 bool isMoving() const;
102
103 enum PositionMode {
104 Beginning,
105 Center,
106 End,
107 Visible, // ListView-only
108 Contain,
109 SnapPosition
110 };
111 Q_ENUM(PositionMode)
112
113 // 2.5 (Qt 5.12)
114 Q_REVISION(5) Q_INVOKABLE void positionViewAtIndex(int index, PositionMode mode);
115
116Q_SIGNALS:
117 void modelChanged();
118 void countChanged();
119 void currentIndexChanged();
120 void currentItemChanged();
121 void delegateChanged();
122 void visibleItemCountChanged();
123 // 2.1 (Qt 5.8)
124 Q_REVISION(1) void wrapChanged();
125 // 2.2 (Qt 5.9)
126 Q_REVISION(2) void movingChanged();
127
128protected:
129 void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
130 void componentComplete() override;
131 void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override;
132 void keyPressEvent(QKeyEvent *event) override;
133 void updatePolish() override;
134
135 QFont defaultFont() const override;
136 QPalette defaultPalette() const override;
137
138private:
139 Q_DISABLE_COPY(QQuickTumbler)
140 Q_DECLARE_PRIVATE(QQuickTumbler)
141
142 Q_PRIVATE_SLOT(d_func(), void _q_updateItemWidths())
143 Q_PRIVATE_SLOT(d_func(), void _q_updateItemHeights())
144 Q_PRIVATE_SLOT(d_func(), void _q_onViewCurrentIndexChanged())
145 Q_PRIVATE_SLOT(d_func(), void _q_onViewCountChanged())
146 Q_PRIVATE_SLOT(d_func(), void _q_onViewOffsetChanged())
147 Q_PRIVATE_SLOT(d_func(), void _q_onViewContentYChanged())
148};
149
150class QQuickTumblerAttachedPrivate;
151
152class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickTumblerAttached : public QObject
153{
154 Q_OBJECT
155 Q_PROPERTY(QQuickTumbler *tumbler READ tumbler CONSTANT FINAL)
156 Q_PROPERTY(qreal displacement READ displacement NOTIFY displacementChanged FINAL)
157
158public:
159 explicit QQuickTumblerAttached(QObject *parent = nullptr);
160
161 QQuickTumbler *tumbler() const;
162 qreal displacement() const;
163
164Q_SIGNALS:
165 void displacementChanged();
166
167private:
168 Q_DISABLE_COPY(QQuickTumblerAttached)
169 Q_DECLARE_PRIVATE(QQuickTumblerAttached)
170};
171
172QT_END_NAMESPACE
173
174QML_DECLARE_TYPE(QQuickTumbler)
175QML_DECLARE_TYPEINFO(QQuickTumbler, QML_HAS_ATTACHED_PROPERTIES)
176
177#endif // QQUICKTUMBLER_P_H
178

source code of qtquickcontrols2/src/quicktemplates2/qquicktumbler_p.h