diff options
author | Jan Arve Saether <jan-arve.saether@digia.com> | 2013-07-10 14:46:17 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-11 16:27:10 +0200 |
commit | 593f2d4ba5ffac15e0222da9b2981ec39f3906aa (patch) | |
tree | f7aecd43c2610ecdb3c86ca5241d397766f9990f /src/layouts | |
parent | 74be0a34e6d905f9f37513d6f5d28d94e68b5b13 (diff) | |
download | qtquickcontrols-593f2d4ba5ffac15e0222da9b2981ec39f3906aa.tar.gz |
Add support for RTL
Introduce the property layoutDirection. This matches the API of
Grid, Row, and Column.
Change-Id: I7282e3bc8ac1e1643f278b9069a319b2e5b1c323
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Diffstat (limited to 'src/layouts')
-rw-r--r-- | src/layouts/qquicklinearlayout.cpp | 72 | ||||
-rw-r--r-- | src/layouts/qquicklinearlayout_p.h | 22 |
2 files changed, 90 insertions, 4 deletions
diff --git a/src/layouts/qquicklinearlayout.cpp b/src/layouts/qquicklinearlayout.cpp index 931bfed5..c8015608 100644 --- a/src/layouts/qquicklinearlayout.cpp +++ b/src/layouts/qquicklinearlayout.cpp @@ -216,6 +216,42 @@ QSizeF QQuickGridLayoutBase::sizeHint(Qt::SizeHint whichSizeHint) const return d->engine.sizeHint(whichSizeHint, QSizeF()); } +/*! + \qmlproperty enumeration GridLayout::layoutDirection + + This property holds the layout direction of the grid layout - it controls whether items are + laid out from left ro right or right to left. If \c Qt.RightToLeft is specified, + left-aligned items will be right-aligned and right-aligned items will be left-aligned. + + Possible values: + + \list + \li Qt.LeftToRight (default) - Items are laid out from left to right. + \li Qt.RightToLeft - Items are laid out from right to left + \endlist + + \sa RowLayout::layoutDirection, ColumnLayout::layoutDirection +*/ +Qt::LayoutDirection QQuickGridLayoutBase::layoutDirection() const +{ + Q_D(const QQuickGridLayoutBase); + return d->m_layoutDirection; +} + +void QQuickGridLayoutBase::setLayoutDirection(Qt::LayoutDirection dir) +{ + Q_D(QQuickGridLayoutBase); + d->m_layoutDirection = dir; + invalidate(); +} + +Qt::LayoutDirection QQuickGridLayoutBase::effectiveLayoutDirection() const +{ + Q_D(const QQuickGridLayoutBase); + return !d->effectiveLayoutMirror == (layoutDirection() == Qt::LeftToRight) + ? Qt::LeftToRight : Qt::RightToLeft; +} + QQuickGridLayoutBase::~QQuickGridLayoutBase() { d_func()->m_isReady = false; @@ -420,7 +456,7 @@ void QQuickGridLayoutBase::rearrange(const QSizeF &size) return; quickLayoutDebug() << objectName() << "QQuickGridLayoutBase::rearrange()" << size; - Qt::LayoutDirection visualDir = Qt::LeftToRight; // ### Fix if RTL support is needed + Qt::LayoutDirection visualDir = effectiveLayoutDirection(); d->engine.setVisualDirection(visualDir); /* @@ -732,6 +768,40 @@ QQuickLinearLayout::QQuickLinearLayout(Qt::Orientation orientation, } /*! + \qmlproperty enumeration RowLayout::layoutDirection + + This property holds the layout direction of the row layout - it controls whether items are laid + out from left ro right or right to left. If \c Qt.RightToLeft is specified, + left-aligned items will be right-aligned and right-aligned items will be left-aligned. + + Possible values: + + \list + \li Qt.LeftToRight (default) - Items are laid out from left to right. + \li Qt.RightToLeft - Items are laid out from right to left + \endlist + + \sa GridLayout::layoutDirection, ColumnLayout::layoutDirection +*/ +/*! + \qmlproperty enumeration ColumnLayout::layoutDirection + + This property holds the layout direction of the column layout - it controls whether items are laid + out from left ro right or right to left. If \c Qt.RightToLeft is specified, + left-aligned items will be right-aligned and right-aligned items will be left-aligned. + + Possible values: + + \list + \li Qt.LeftToRight (default) - Items are laid out from left to right. + \li Qt.RightToLeft - Items are laid out from right to left + \endlist + + \sa GridLayout::layoutDirection, RowLayout::layoutDirection +*/ + + +/*! \qmlproperty real RowLayout::spacing This property holds the spacing between each cell. diff --git a/src/layouts/qquicklinearlayout_p.h b/src/layouts/qquicklinearlayout_p.h index b38bd97f..827767b3 100644 --- a/src/layouts/qquicklinearlayout_p.h +++ b/src/layouts/qquicklinearlayout_p.h @@ -58,16 +58,23 @@ class QQuickGridLayoutBasePrivate; class QQuickGridLayoutBase : public QQuickLayout { Q_OBJECT + + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) + public: explicit QQuickGridLayoutBase(QQuickGridLayoutBasePrivate &dd, Qt::Orientation orientation, QQuickItem *parent = 0); + ~QQuickGridLayoutBase(); void componentComplete(); void invalidate(QQuickItem *childItem = 0); Qt::Orientation orientation() const; void setOrientation(Qt::Orientation orientation); QSizeF sizeHint(Qt::SizeHint whichSizeHint) const Q_DECL_OVERRIDE; + Qt::LayoutDirection layoutDirection() const; + void setLayoutDirection(Qt::LayoutDirection dir); + Qt::LayoutDirection effectiveLayoutDirection() const; protected: void updateLayoutItems(); @@ -78,6 +85,9 @@ protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); bool shouldIgnoreItem(QQuickItem *child, QQuickLayoutAttached *&info, QSizeF *sizeHints); +signals: + void layoutDirectionChanged(); + protected slots: void onItemVisibleChanged(); void onItemDestroyed(); @@ -95,11 +105,16 @@ class QQuickGridLayoutBasePrivate : public QQuickLayoutPrivate Q_DECLARE_PUBLIC(QQuickGridLayoutBase) public: - QQuickGridLayoutBasePrivate() : m_disableRearrange(true), m_isReady(false) { } + QQuickGridLayoutBasePrivate() : m_disableRearrange(true) + , m_isReady(false) + , m_layoutDirection(Qt::LeftToRight) + {} QQuickGridLayoutEngine engine; Qt::Orientation orientation; - bool m_disableRearrange; - bool m_isReady; + unsigned m_disableRearrange : 1; + unsigned m_isReady : 1; + Qt::LayoutDirection m_layoutDirection : 2; + QSet<QQuickItem *> m_ignoredItems; }; @@ -112,6 +127,7 @@ class QQuickGridLayoutPrivate; class QQuickGridLayout : public QQuickGridLayoutBase { Q_OBJECT + Q_PROPERTY(qreal columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged) Q_PROPERTY(qreal rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged) Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged) |