1 // Commit: 2c7cab4172f1acc86fd49345a2847417e162f2c3
2 /****************************************************************************
4 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
5 ** Contact: http://www.qt-project.org/
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
41 ****************************************************************************/
43 #ifndef QQUICKPOSITIONERS_P_H
44 #define QQUICKPOSITIONERS_P_H
46 #include "qquickimplicitsizeitem_p.h"
48 #include <QtQuick/private/qdeclarativestate_p.h>
49 #include <private/qpodvector_p.h>
51 #include <QtCore/qobject.h>
52 #include <QtCore/qstring.h>
58 class QQuickBasePositionerPrivate;
60 class QQuickPositionerAttached : public QObject
65 QQuickPositionerAttached(QObject *parent);
67 Q_PROPERTY(int index READ index NOTIFY indexChanged)
68 Q_PROPERTY(bool isFirstItem READ isFirstItem NOTIFY isFirstItemChanged)
69 Q_PROPERTY(bool isLastItem READ isLastItem NOTIFY isLastItemChanged)
71 int index() const { return m_index; }
72 void setIndex(int index);
74 bool isFirstItem() const { return m_isFirstItem; }
75 void setIsFirstItem(bool isFirstItem);
77 bool isLastItem() const { return m_isLastItem; }
78 void setIsLastItem(bool isLastItem);
82 void isFirstItemChanged();
83 void isLastItemChanged();
91 class Q_QUICK_PRIVATE_EXPORT QQuickBasePositioner : public QQuickImplicitSizeItem
95 Q_PROPERTY(int spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
96 Q_PROPERTY(QDeclarativeTransition *move READ move WRITE setMove NOTIFY moveChanged)
97 Q_PROPERTY(QDeclarativeTransition *add READ add WRITE setAdd NOTIFY addChanged)
99 enum PositionerType { None = 0x0, Horizontal = 0x1, Vertical = 0x2, Both = 0x3 };
100 QQuickBasePositioner(PositionerType, QQuickItem *parent);
101 ~QQuickBasePositioner();
104 void setSpacing(int);
106 QDeclarativeTransition *move() const;
107 void setMove(QDeclarativeTransition *);
109 QDeclarativeTransition *add() const;
110 void setAdd(QDeclarativeTransition *);
112 static QQuickPositionerAttached *qmlAttachedProperties(QObject *obj);
114 void updateAttachedProperties(QQuickPositionerAttached *specificProperty = 0, QQuickItem *specificPropertyOwner = 0) const;
117 QQuickBasePositioner(QQuickBasePositionerPrivate &dd, PositionerType at, QQuickItem *parent);
118 virtual void componentComplete();
119 virtual void itemChange(ItemChange, const ItemChangeData &);
120 void finishApplyTransitions();
122 virtual void updatePolish();
125 void spacingChanged();
130 void prePositioning();
133 virtual void doPositioning(QSizeF *contentSize)=0;
134 virtual void reportConflictingAnchors()=0;
135 class PositionedItem {
137 PositionedItem(QQuickItem *i) : item(i), isNew(false), isVisible(true) {}
138 bool operator==(const PositionedItem &other) const { return other.item == item; }
144 QPODVector<PositionedItem,8> positionedItems;
145 void positionX(int,const PositionedItem &target);
146 void positionY(int,const PositionedItem &target);
149 Q_DISABLE_COPY(QQuickBasePositioner)
150 Q_DECLARE_PRIVATE(QQuickBasePositioner)
153 class Q_AUTOTEST_EXPORT QQuickColumn : public QQuickBasePositioner
157 QQuickColumn(QQuickItem *parent=0);
160 virtual void doPositioning(QSizeF *contentSize);
161 virtual void reportConflictingAnchors();
163 Q_DISABLE_COPY(QQuickColumn)
166 class Q_AUTOTEST_EXPORT QQuickRow: public QQuickBasePositioner
169 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
170 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
172 QQuickRow(QQuickItem *parent=0);
174 Qt::LayoutDirection layoutDirection() const;
175 void setLayoutDirection (Qt::LayoutDirection);
176 Qt::LayoutDirection effectiveLayoutDirection() const;
179 void layoutDirectionChanged();
180 void effectiveLayoutDirectionChanged();
183 virtual void doPositioning(QSizeF *contentSize);
184 virtual void reportConflictingAnchors();
186 Q_DISABLE_COPY(QQuickRow)
189 class Q_AUTOTEST_EXPORT QQuickGrid : public QQuickBasePositioner
192 Q_PROPERTY(int rows READ rows WRITE setRows NOTIFY rowsChanged)
193 Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged)
194 Q_PROPERTY(int rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged)
195 Q_PROPERTY(int columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged)
196 Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
197 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
198 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
201 QQuickGrid(QQuickItem *parent=0);
203 int rows() const {return m_rows;}
204 void setRows(const int rows);
206 int columns() const {return m_columns;}
207 void setColumns(const int columns);
209 int rowSpacing() const { return m_rowSpacing; }
210 void setRowSpacing(int);
212 int columnSpacing() const { return m_columnSpacing; }
213 void setColumnSpacing(int);
216 enum Flow { LeftToRight, TopToBottom };
220 Qt::LayoutDirection layoutDirection() const;
221 void setLayoutDirection (Qt::LayoutDirection);
222 Qt::LayoutDirection effectiveLayoutDirection() const;
226 void columnsChanged();
228 void layoutDirectionChanged();
229 void effectiveLayoutDirectionChanged();
230 void rowSpacingChanged();
231 void columnSpacingChanged();
234 virtual void doPositioning(QSizeF *contentSize);
235 virtual void reportConflictingAnchors();
243 Q_DISABLE_COPY(QQuickGrid)
246 class QQuickFlowPrivate;
247 class Q_AUTOTEST_EXPORT QQuickFlow: public QQuickBasePositioner
250 Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
251 Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged)
252 Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged)
254 QQuickFlow(QQuickItem *parent=0);
257 enum Flow { LeftToRight, TopToBottom };
261 Qt::LayoutDirection layoutDirection() const;
262 void setLayoutDirection (Qt::LayoutDirection);
263 Qt::LayoutDirection effectiveLayoutDirection() const;
267 void layoutDirectionChanged();
268 void effectiveLayoutDirectionChanged();
271 virtual void doPositioning(QSizeF *contentSize);
272 virtual void reportConflictingAnchors();
274 QQuickFlow(QQuickFlowPrivate &dd, QQuickItem *parent);
276 Q_DISABLE_COPY(QQuickFlow)
277 Q_DECLARE_PRIVATE(QQuickFlow)
283 QML_DECLARE_TYPE(QQuickColumn)
284 QML_DECLARE_TYPE(QQuickRow)
285 QML_DECLARE_TYPE(QQuickGrid)
286 QML_DECLARE_TYPE(QQuickFlow)
288 QML_DECLARE_TYPE(QQuickBasePositioner)
289 QML_DECLARE_TYPEINFO(QQuickBasePositioner, QML_HAS_ATTACHED_PROPERTIES)
293 #endif // QQUICKPOSITIONERS_P_H