Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquickpositioners_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
4#ifndef QQUICKPOSITIONERS_P_H
5#define QQUICKPOSITIONERS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtQuick/private/qtquickglobal_p.h>
19
20QT_REQUIRE_CONFIG(quick_positioners);
21
23#if QT_CONFIG(quick_viewtransitions)
25#endif
26
27#include <private/qpodvector_p.h>
28
29#include <QtCore/qobject.h>
30#include <QtCore/qstring.h>
31
33
35
37{
39
40public:
42
43 Q_PROPERTY(int index READ index NOTIFY indexChanged FINAL)
46
47 int index() const { return m_index; }
48 void setIndex(int index);
49
50 bool isFirstItem() const { return m_isFirstItem; }
51 void setIsFirstItem(bool isFirstItem);
52
53 bool isLastItem() const { return m_isLastItem; }
54 void setIsLastItem(bool isLastItem);
55
60
61private:
62 int m_index;
63 bool m_isFirstItem;
64 bool m_isLastItem;
65};
66
67class Q_QUICK_EXPORT QQuickBasePositioner : public QQuickImplicitSizeItem
68{
70
71 Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
72#if QT_CONFIG(quick_viewtransitions)
73 Q_PROPERTY(QQuickTransition *populate READ populate WRITE setPopulate NOTIFY populateChanged)
74 Q_PROPERTY(QQuickTransition *move READ move WRITE setMove NOTIFY moveChanged)
75 Q_PROPERTY(QQuickTransition *add READ add WRITE setAdd NOTIFY addChanged)
76#endif
77
78 Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged REVISION(2, 6))
79 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged REVISION(2, 6))
80 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged REVISION(2, 6))
81 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged REVISION(2, 6))
82 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION(2, 6))
83
84 QML_NAMED_ELEMENT(Positioner)
86 QML_UNCREATABLE("Positioner is an abstract type that is only available as an attached property.")
88
89public:
90 enum PositionerType { None = 0x0, Horizontal = 0x1, Vertical = 0x2, Both = 0x3 };
91
92 QQuickBasePositioner(PositionerType, QQuickItem *parent);
94
95 qreal spacing() const;
96 void setSpacing(qreal);
97
98#if QT_CONFIG(quick_viewtransitions)
99 QQuickTransition *populate() const;
100 void setPopulate(QQuickTransition *);
101
102 QQuickTransition *move() const;
103 void setMove(QQuickTransition *);
104
105 QQuickTransition *add() const;
106 void setAdd(QQuickTransition *);
107#endif
108
109 static QQuickPositionerAttached *qmlAttachedProperties(QObject *obj);
110
111 void updateAttachedProperties(QQuickPositionerAttached *specificProperty = nullptr, QQuickItem *specificPropertyOwner = nullptr) const;
112
113 qreal padding() const;
114 void setPadding(qreal padding);
115 void resetPadding();
116
117 qreal topPadding() const;
118 void setTopPadding(qreal padding);
119 void resetTopPadding();
120
121 qreal leftPadding() const;
122 void setLeftPadding(qreal padding);
123 void resetLeftPadding();
124
125 qreal rightPadding() const;
126 void setRightPadding(qreal padding);
127 void resetRightPadding();
128
129 qreal bottomPadding() const;
130 void setBottomPadding(qreal padding);
131 void resetBottomPadding();
132
133 Q_REVISION(2, 9) Q_INVOKABLE void forceLayout();
134
135protected:
137 void componentComplete() override;
138 void itemChange(ItemChange, const ItemChangeData &) override;
139
140 void updatePolish() override;
141
144 void populateChanged();
145 void moveChanged();
146 void addChanged();
147 Q_REVISION(2, 6) void paddingChanged();
148 Q_REVISION(2, 6) void topPaddingChanged();
149 Q_REVISION(2, 6) void leftPaddingChanged();
150 Q_REVISION(2, 6) void rightPaddingChanged();
151 Q_REVISION(2, 6) void bottomPaddingChanged();
152 Q_REVISION(2, 9) void positioningComplete();
153
154protected Q_SLOTS:
155 void prePositioning();
156
157protected:
158 virtual void doPositioning(QSizeF *contentSize)=0;
159 virtual void reportConflictingAnchors()=0;
160
162 {
163 public :
166 bool operator==(const PositionedItem &other) const { return other.item == item; }
167
168 qreal itemX() const;
169 qreal itemY() const;
170
171 void moveTo(const QPointF &pos);
172
173#if QT_CONFIG(quick_viewtransitions)
174 void transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget);
175 bool prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds);
176 void startTransition(QQuickItemViewTransitioner *transitioner);
177#endif
178
179 void updatePadding(qreal lp, qreal tp, qreal rp, qreal bp);
180
182#if QT_CONFIG(quick_viewtransitions)
183 QQuickItemViewTransitionableItem *transitionableItem;
184#endif
185 int index;
186 bool isNew;
188
193 };
194
195 QPODVector<PositionedItem,8> positionedItems;
196 QPODVector<PositionedItem,8> unpositionedItems;//Still 'in' the positioner, just not positioned
197
198 void positionItem(qreal x, qreal y, PositionedItem *target);
199 void positionItemX(qreal, PositionedItem *target);
200 void positionItemY(qreal, PositionedItem *target);
201
202 void removePositionedItem(QPODVector<PositionedItem,8> *items, int index);
203 void clearPositionedItems(QPODVector<PositionedItem,8> *items);
204
205private:
206 Q_DISABLE_COPY(QQuickBasePositioner)
207 Q_DECLARE_PRIVATE(QQuickBasePositioner)
208};
209
210class Q_QUICK_EXPORT QQuickColumn : public QQuickBasePositioner
211{
213 QML_NAMED_ELEMENT(Column)
215public:
216 QQuickColumn(QQuickItem *parent=nullptr);
217
218protected:
219 void doPositioning(QSizeF *contentSize) override;
220 void reportConflictingAnchors() override;
221};
222
223class QQuickRowPrivate;
224class Q_QUICK_EXPORT QQuickRow: public QQuickBasePositioner
225{
227 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
228 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
231
232public:
233 QQuickRow(QQuickItem *parent=nullptr);
234
235 Qt::LayoutDirection layoutDirection() const;
236 void setLayoutDirection (Qt::LayoutDirection);
237 Qt::LayoutDirection effectiveLayoutDirection() const;
238
240 void layoutDirectionChanged();
241 void effectiveLayoutDirectionChanged();
242
243protected:
244 void doPositioning(QSizeF *contentSize) override;
245 void reportConflictingAnchors() override;
246private:
247 Q_DECLARE_PRIVATE(QQuickRow)
248};
249
251class Q_QUICK_EXPORT QQuickGrid : public QQuickBasePositioner
252{
254 Q_PROPERTY(int rows READ rows WRITE setRows NOTIFY rowsChanged)
255 Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged)
256 Q_PROPERTY(qreal rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged RESET resetRowSpacing)
257 Q_PROPERTY(qreal columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged RESET resetColumnSpacing)
258 Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
259 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
260 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
261 Q_PROPERTY(HAlignment horizontalItemAlignment READ hItemAlign WRITE setHItemAlign NOTIFY horizontalAlignmentChanged REVISION(2, 1))
262 Q_PROPERTY(HAlignment effectiveHorizontalItemAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION(2, 1))
263 Q_PROPERTY(VAlignment verticalItemAlignment READ vItemAlign WRITE setVItemAlign NOTIFY verticalAlignmentChanged REVISION(2, 1))
266
267public:
268 QQuickGrid(QQuickItem *parent=nullptr);
269
270 int rows() const { return m_rows; }
271 void setRows(const int rows);
272
273 int columns() const { return m_columns; }
274 void setColumns(const int columns);
275
276 qreal rowSpacing() const { return m_rowSpacing; }
277 void setRowSpacing(qreal);
278 void resetRowSpacing() { m_useRowSpacing = false; }
279
280 qreal columnSpacing() const { return m_columnSpacing; }
281 void setColumnSpacing(qreal);
282 void resetColumnSpacing() { m_useColumnSpacing = false; }
283
284 enum Flow { LeftToRight, TopToBottom };
285 Q_ENUM(Flow)
286 Flow flow() const;
287 void setFlow(Flow);
288
289 Qt::LayoutDirection layoutDirection() const;
290 void setLayoutDirection (Qt::LayoutDirection);
291 Qt::LayoutDirection effectiveLayoutDirection() const;
292
293 enum HAlignment { AlignLeft = Qt::AlignLeft,
294 AlignRight = Qt::AlignRight,
295 AlignHCenter = Qt::AlignHCenter};
296 Q_ENUM(HAlignment)
297 enum VAlignment { AlignTop = Qt::AlignTop,
298 AlignBottom = Qt::AlignBottom,
299 AlignVCenter = Qt::AlignVCenter };
300 Q_ENUM(VAlignment)
301
302 HAlignment hItemAlign() const;
303 void setHItemAlign(HAlignment align);
304 HAlignment effectiveHAlign() const;
305
306 VAlignment vItemAlign() const;
307 void setVItemAlign(VAlignment align);
308
317 Q_REVISION(2, 1) void horizontalAlignmentChanged(HAlignment alignment);
318 Q_REVISION(2, 1) void effectiveHorizontalAlignmentChanged(HAlignment alignment);
319 Q_REVISION(2, 1) void verticalAlignmentChanged(VAlignment alignment);
320
321protected:
322 void doPositioning(QSizeF *contentSize) override;
323 void reportConflictingAnchors() override;
324
325private:
326 int m_rows;
327 int m_columns;
328 qreal m_rowSpacing;
329 qreal m_columnSpacing;
330 bool m_useRowSpacing;
331 bool m_useColumnSpacing;
332 Flow m_flow;
333 HAlignment m_hItemAlign;
334 VAlignment m_vItemAlign;
335 Q_DECLARE_PRIVATE(QQuickGrid)
336};
337
339class Q_QUICK_EXPORT QQuickFlow: public QQuickBasePositioner
340{
342 Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
343 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
344 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
347public:
348 QQuickFlow(QQuickItem *parent=nullptr);
349
350 enum Flow { LeftToRight, TopToBottom };
351 Q_ENUM(Flow)
352 Flow flow() const;
353 void setFlow(Flow);
354
355 Qt::LayoutDirection layoutDirection() const;
356 void setLayoutDirection (Qt::LayoutDirection);
357 Qt::LayoutDirection effectiveLayoutDirection() const;
358
363
364protected:
365 void doPositioning(QSizeF *contentSize) override;
366 void reportConflictingAnchors() override;
367protected:
369private:
370 Q_DECLARE_PRIVATE(QQuickFlow)
371};
372
374
375#endif // QQUICKPOSITIONERS_P_H
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
\inmodule QtCore\reentrant
Definition qpoint.h:217
bool operator==(const PositionedItem &other) const
For specifying a base for QQuickGraphics layouts.
QPODVector< PositionedItem, 8 > positionedItems
Q_REVISION(2, 9) Q_INVOKABLE void forceLayout()
QPODVector< PositionedItem, 8 > unpositionedItems
\qmltype Flow \instantiates QQuickFlow \inqmlmodule QtQuick \inherits Item
QQuickFlow(QQuickFlowPrivate &dd, QQuickItem *parent)
void flowChanged()
void layoutDirectionChanged()
void effectiveLayoutDirectionChanged()
\qmltype Grid \instantiates QQuickGrid \inqmlmodule QtQuick \inherits Item
void columnSpacingChanged()
void rowSpacingChanged()
void columnsChanged()
void effectiveLayoutDirectionChanged()
Q_REVISION(2, 1) void horizontalAlignmentChanged(HAlignment alignment)
qreal rowSpacing() const
void rowsChanged()
int columns() const
qreal columnSpacing() const
void layoutDirectionChanged()
void flowChanged()
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:63
ItemChange
Used in conjunction with QQuickItem::itemChange() to notify the item about certain types of changes.
Definition qquickitem.h:144
void setIndex(int index)
\qmlattachedproperty int QtQuick::Positioner::index
QQuickPositionerAttached(QObject *parent)
\qmltype Positioner \instantiates QQuickPositionerAttached \inqmlmodule QtQuick
void setIsFirstItem(bool isFirstItem)
\qmlattachedproperty bool QtQuick::Positioner::isFirstItem \qmlattachedproperty bool QtQuick::Positio...
void setIsLastItem(bool isLastItem)
\qmltype Row \instantiates QQuickRow \inqmlmodule QtQuick \inherits Item
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore
Definition qsize.h:208
void spacingChanged()
qreal spacing
uint alignment
Combined button and popup list for selecting options.
Definition qcompare.h:63
@ AlignRight
Definition qnamespace.h:146
@ AlignBottom
Definition qnamespace.h:154
@ AlignVCenter
Definition qnamespace.h:155
@ AlignTop
Definition qnamespace.h:153
@ AlignHCenter
Definition qnamespace.h:148
@ AlignLeft
Definition qnamespace.h:144
LayoutDirection
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
@ None
Definition qhash.cpp:531
GLint GLint GLint GLint GLint x
[0]
GLuint index
[2]
GLenum type
GLenum target
GLint y
GLhandleARB obj
[2]
static void add(QPainterPath &path, const QWingedEdge &list, int edge, QPathEdge::Traversal traversal)
#define QML_UNCREATABLE(REASON)
#define QML_NAMED_ELEMENT(NAME)
#define QML_ADDED_IN_VERSION(MAJOR, MINOR)
#define QML_ATTACHED(ATTACHED_TYPE)
static QList< QQuickStateAction > prepareTransition(QQuickDrawer *drawer, QQuickTransition *transition, qreal to)
#define QT_REQUIRE_CONFIG(feature)
#define Q_ENUM(x)
#define Q_PROPERTY(...)
#define Q_OBJECT
#define Q_REVISION(...)
#define Q_INVOKABLE
#define Q_SLOTS
#define Q_SIGNALS
double qreal
Definition qtypes.h:187
const char property[13]
Definition qwizard.cpp:101
QSharedPointer< T > other(t)
[5]
QGraphicsItem * item
QList< QTreeWidgetItem * > items
QAction * at
\inmodule QtQuick
Definition qquickitem.h:159