summaryrefslogtreecommitdiff
path: root/src/layouts
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@digia.com>2013-07-10 14:46:17 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-07-11 16:27:10 +0200
commit593f2d4ba5ffac15e0222da9b2981ec39f3906aa (patch)
treef7aecd43c2610ecdb3c86ca5241d397766f9990f /src/layouts
parent74be0a34e6d905f9f37513d6f5d28d94e68b5b13 (diff)
downloadqtquickcontrols-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.cpp72
-rw-r--r--src/layouts/qquicklinearlayout_p.h22
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)