summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoona Petrell <joona.t.petrell@nokia.com>2011-01-04 07:25:48 (GMT)
committerJoona Petrell <joona.t.petrell@nokia.com>2011-01-07 05:06:47 (GMT)
commit0371e80ba76b7dcaf1809ba9345fd96610390222 (patch)
tree2d8d7c3132ee49d4eb4dd13585085681d48d36ce
parentd3a6fcd9174b893aaac9db7d5e541ceb54b12402 (diff)
downloadQt-0371e80ba76b7dcaf1809ba9345fd96610390222.zip
Qt-0371e80ba76b7dcaf1809ba9345fd96610390222.tar.gz
Qt-0371e80ba76b7dcaf1809ba9345fd96610390222.tar.bz2
Add layoutDirection property to Qt.application element
Task-number: QTBUG-16424 Reviewed-by: Martin Jones
-rw-r--r--src/declarative/util/qdeclarativeapplication.cpp32
-rw-r--r--src/declarative/util/qdeclarativeapplication_p.h3
-rw-r--r--tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp23
3 files changed, 56 insertions, 2 deletions
diff --git a/src/declarative/util/qdeclarativeapplication.cpp b/src/declarative/util/qdeclarativeapplication.cpp
index 53d196f..f724c16 100644
--- a/src/declarative/util/qdeclarativeapplication.cpp
+++ b/src/declarative/util/qdeclarativeapplication.cpp
@@ -47,8 +47,10 @@ class QDeclarativeApplicationPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QDeclarativeApplication)
public:
- QDeclarativeApplicationPrivate() : active(QApplication::activeWindow() != 0) {}
+ QDeclarativeApplicationPrivate() : active(QApplication::activeWindow() != 0),
+ layoutDirection(QApplication::layoutDirection()) {}
bool active;
+ Qt::LayoutDirection layoutDirection;
};
/*!
@@ -58,7 +60,8 @@ public:
\brief The Application element provides access to global application
state properties shared by many QML components.
- These properties include application activity property \c active.
+ These properties include application activity property \c active,
+ and default layout direction property \c layoutDirection.
\section1 Example Usage
@@ -97,6 +100,24 @@ bool QDeclarativeApplication::active() const
return d->active;
}
+/*!
+ \qmlproperty bool Application::layoutDirection
+
+ This property can be used to query the default layout direction of the
+ application. On system start-up, the default layout direction depends on the
+ application's language. The property has a value Qt.RightToLeft in locales
+ where text and graphic elements are read from right to left, and Qt.LeftToRight
+ where the reading direction flows from left to right. You can bind to the
+ property to customize your application layouts to support both layout
+ directions. This property is readonly.
+
+*/
+bool QDeclarativeApplication::layoutDirection() const
+{
+ Q_D(const QDeclarativeApplication);
+ return d->layoutDirection;
+}
+
bool QDeclarativeApplication::eventFilter(QObject *obj, QEvent *event)
{
Q_UNUSED(obj)
@@ -114,5 +135,12 @@ bool QDeclarativeApplication::eventFilter(QObject *obj, QEvent *event)
emit activeChanged();
}
}
+ if (event->type() == QEvent::LayoutDirectionChange) {
+ Qt::LayoutDirection direction = QApplication::layoutDirection();
+ if (d->layoutDirection != direction) {
+ d->layoutDirection = direction;
+ emit layoutDirectionChanged();
+ }
+ }
return false;
}
diff --git a/src/declarative/util/qdeclarativeapplication_p.h b/src/declarative/util/qdeclarativeapplication_p.h
index 59ea7fe..c5cd227 100644
--- a/src/declarative/util/qdeclarativeapplication_p.h
+++ b/src/declarative/util/qdeclarativeapplication_p.h
@@ -57,17 +57,20 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeApplication : public QObject
{
Q_OBJECT
Q_PROPERTY(bool active READ active NOTIFY activeChanged)
+ Q_PROPERTY(bool layoutDirection READ layoutDirection NOTIFY layoutDirectionChanged)
public:
explicit QDeclarativeApplication(QObject *parent = 0);
virtual ~QDeclarativeApplication();
bool active() const;
+ bool layoutDirection() const;
protected:
bool eventFilter(QObject *obj, QEvent *event);
Q_SIGNALS:
void activeChanged();
+ void layoutDirectionChanged();
private:
Q_DISABLE_COPY(QDeclarativeApplication)
diff --git a/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp b/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp
index 0d069dc..3011257 100644
--- a/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp
+++ b/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp
@@ -55,6 +55,7 @@ public:
private slots:
void active();
+ void layoutDirection();
private:
QDeclarativeEngine engine;
@@ -91,6 +92,28 @@ void tst_qdeclarativeapplication::active()
QCOMPARE(item->property("active").toBool(), QApplication::activeWindow() != 0);
}
+void tst_qdeclarativeapplication::layoutDirection()
+{
+ QDeclarativeComponent component(&engine);
+ component.setData("import QtQuick 1.0; Item { property bool layoutDirection: Qt.application.layoutDirection }", QUrl::fromLocalFile(""));
+ QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(component.create());
+ QVERIFY(item);
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ scene.addItem(item);
+
+ // not mirrored
+ QCOMPARE(Qt::LayoutDirection(item->property("layoutDirection").toInt()), Qt::LeftToRight);
+
+ // mirrored
+ QApplication::setLayoutDirection(Qt::RightToLeft);
+ QCOMPARE(Qt::LayoutDirection(item->property("layoutDirection").toInt()), Qt::RightToLeft);
+
+ // not mirrored again
+ QApplication::setLayoutDirection(Qt::LeftToRight);
+ QCOMPARE(Qt::LayoutDirection(item->property("layoutDirection").toInt()), Qt::LeftToRight);
+}
+
QTEST_MAIN(tst_qdeclarativeapplication)
#include "tst_qdeclarativeapplication.moc"