From bbf8b8ee6cb202acc654b7a8aa85cb6c63460842 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 24 Sep 2010 11:29:02 +1000 Subject: Fix example. --- examples/declarative/ui-components/searchbox/SearchBox.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/declarative/ui-components/searchbox/SearchBox.qml b/examples/declarative/ui-components/searchbox/SearchBox.qml index 60fa799..d000750 100644 --- a/examples/declarative/ui-components/searchbox/SearchBox.qml +++ b/examples/declarative/ui-components/searchbox/SearchBox.qml @@ -54,7 +54,7 @@ FocusScope { source: "images/lineedit-bg-focus.png" width: parent.width; height: parent.height border { left: 4; top: 4; right: 4; bottom: 4 } - visible: parent.wantsFocus ? true : false + visible: parent.activeFocus ? true : false } Text { -- cgit v0.12 From 5536a86fdfc8e68c8541c0a9bb8fc20ccae3877f Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 24 Sep 2010 13:56:43 +1000 Subject: More declarative autotests. --- src/declarative/qml/qdeclarative.h | 2 +- .../qdeclarativedom/tst_qdeclarativedom.cpp | 13 ++++- .../qdeclarativeinfo/tst_qdeclarativeinfo.cpp | 64 ++++++++++++++++++++++ .../data/notAvailable.errors.txt | 1 + .../qdeclarativelanguage/data/notAvailable.qml | 4 ++ .../declarative/qdeclarativelanguage/testtypes.cpp | 2 + .../declarative/qdeclarativelanguage/testtypes.h | 6 ++ .../tst_qdeclarativelanguage.cpp | 1 + .../auto/declarative/qdeclarativeqt/data/quit.qml | 5 ++ .../qdeclarativeqt/tst_qdeclarativeqt.cpp | 14 +++++ 10 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml create mode 100644 tests/auto/declarative/qdeclarativeqt/data/quit.qml diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index 985ab72..f0c62f4 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -119,7 +119,7 @@ int qmlRegisterType() return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } -int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message); +int Q_AUTOTEST_EXPORT qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message); template int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason) diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp index dca5205..e1b4c1c 100644 --- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp +++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp @@ -493,9 +493,11 @@ void tst_qdeclarativedom::loadDynamicProperty() { QByteArray qml = "import Qt 4.7\n" "Item {\n" + " id: item\n" " property int a: 12\n" " property int b: a + 6\n" " default property QtObject c\n" + " property alias d: item.a\n" "}\n"; QDeclarativeDomDocument document; @@ -504,11 +506,12 @@ void tst_qdeclarativedom::loadDynamicProperty() QDeclarativeDomObject rootObject = document.rootObject(); QVERIFY(rootObject.isValid()); - QCOMPARE(rootObject.dynamicProperties().count(), 3); + QCOMPARE(rootObject.dynamicProperties().count(), 4); { QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(0); QVERIFY(d.isDefaultProperty() == false); + QVERIFY(d.isAlias() == false); QVERIFY(d.defaultValue().isValid()); QVERIFY(d.defaultValue().propertyName() == "a"); QVERIFY(d.defaultValue().value().isLiteral()); @@ -517,6 +520,7 @@ void tst_qdeclarativedom::loadDynamicProperty() { QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(1); QVERIFY(d.isDefaultProperty() == false); + QVERIFY(d.isAlias() == false); QVERIFY(d.defaultValue().isValid()); QVERIFY(d.defaultValue().propertyName() == "b"); QVERIFY(d.defaultValue().value().isBinding()); @@ -525,8 +529,15 @@ void tst_qdeclarativedom::loadDynamicProperty() { QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(2); QVERIFY(d.isDefaultProperty() == true); + QVERIFY(d.isAlias() == false); QVERIFY(d.defaultValue().isValid() == false); } + + { + QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(3); + QVERIFY(d.isDefaultProperty() == false); + QVERIFY(d.isAlias() == true); + } } } diff --git a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp index 03df71f..7fd6279 100644 --- a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp +++ b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp @@ -63,6 +63,8 @@ private slots: void nonQmlObject(); void nullObject(); void nonQmlContextedObject(); + void types(); + void chaining(); private: QDeclarativeEngine engine; @@ -139,6 +141,68 @@ void tst_qdeclarativeinfo::nonQmlContextedObject() qmlInfo(&object) << "Test Message"; } +void tst_qdeclarativeinfo::types() +{ + QTest::ignoreMessage(QtWarningMsg, ": false"); + qmlInfo(0) << false; + + QTest::ignoreMessage(QtWarningMsg, ": 1.1"); + qmlInfo(0) << 1.1; + + QTest::ignoreMessage(QtWarningMsg, ": 1.2"); + qmlInfo(0) << 1.2f; + + QTest::ignoreMessage(QtWarningMsg, ": 15"); + qmlInfo(0) << 15; + + QTest::ignoreMessage(QtWarningMsg, ": 'b'"); + qmlInfo(0) << QChar('b'); + + QTest::ignoreMessage(QtWarningMsg, ": \"Qt\""); + qmlInfo(0) << QByteArray("Qt"); + + QTest::ignoreMessage(QtWarningMsg, ": true"); + qmlInfo(0) << QBool(true); + + //### do we actually want QUrl to show up in the output? + //### why the extra space at the end? + QTest::ignoreMessage(QtWarningMsg, ": QUrl(\"http://qt.nokia.com\") "); + qmlInfo(0) << QUrl("http://qt.nokia.com"); + + //### should this be quoted? + QTest::ignoreMessage(QtWarningMsg, ": hello"); + qmlInfo(0) << QLatin1String("hello"); + + //### should this be quoted? + QTest::ignoreMessage(QtWarningMsg, ": World"); + QString str("Hello World"); + QStringRef ref(&str, 6, 5); + qmlInfo(0) << ref; + + //### should this be quoted? + QTest::ignoreMessage(QtWarningMsg, ": Quick"); + qmlInfo(0) << QString ("Quick"); +} + +void tst_qdeclarativeinfo::chaining() +{ + //### should more of these be automatically inserting spaces? + QString str("Hello World"); + QStringRef ref(&str, 6, 5); + QTest::ignoreMessage(QtWarningMsg, ": false 1.1 1.2 15 hello 'b' QUrl(\"http://qt.nokia.com\") World \"Qt\" true Quick "); + qmlInfo(0) << false << ' ' + << 1.1 << ' ' + << 1.2f << ' ' + << 15 << ' ' + << QLatin1String("hello") << ' ' + << QChar('b') << ' ' + << QUrl("http://qt.nokia.com") + << ref + << QByteArray("Qt") + << QBool(true) + << QString ("Quick"); +} + QTEST_MAIN(tst_qdeclarativeinfo) #include "tst_qdeclarativeinfo.moc" diff --git a/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt new file mode 100644 index 0000000..af95a53 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt @@ -0,0 +1 @@ +3:1:UnavailableType is unavailable for testing diff --git a/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml new file mode 100644 index 0000000..7c3c7ee --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml @@ -0,0 +1,4 @@ +import Test 1.0 + +UnavailableType { +} diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp index 20cd976..e697aeb 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp @@ -54,6 +54,8 @@ void registerTypes() qmlRegisterType(); qmlRegisterCustomType("Test", 1, 0, "MyCustomParserType", new MyCustomParserTypeParser); + + qmlRegisterTypeNotAvailable("Test",1,0,"UnavailableType", "UnavailableType is unavailable for testing"); } QVariant myCustomVariantTypeConverter(const QString &data) diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h index ac55bae..2b23a49 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h @@ -508,6 +508,12 @@ public: } }; +class UnavailableType : public QObject +{ + Q_OBJECT +public: + UnavailableType() {} +}; class MyDotPropertyObject : public QObject { diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 1825991..37e074b 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -376,6 +376,7 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("invalidOn") << "invalidOn.qml" << "invalidOn.errors.txt" << false; QTest::newRow("invalidProperty") << "invalidProperty.qml" << "invalidProperty.errors.txt" << false; QTest::newRow("nonScriptableProperty") << "nonScriptableProperty.qml" << "nonScriptableProperty.errors.txt" << false; + QTest::newRow("notAvailable") << "notAvailable.qml" << "notAvailable.errors.txt" << false; } diff --git a/tests/auto/declarative/qdeclarativeqt/data/quit.qml b/tests/auto/declarative/qdeclarativeqt/data/quit.qml new file mode 100644 index 0000000..f4c8441 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeqt/data/quit.qml @@ -0,0 +1,5 @@ +import Qt 4.7 + +QtObject { + Component.onCompleted: Qt.quit() +} diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp index 895ee6c..739b10a 100644 --- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp +++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -84,6 +85,7 @@ private slots: void btoa(); void atob(); void fontFamilies(); + void quit(); private: QDeclarativeEngine engine; @@ -518,6 +520,18 @@ void tst_qdeclarativeqt::fontFamilies() delete object; } +void tst_qdeclarativeqt::quit() +{ + QDeclarativeComponent component(&engine, TEST_FILE("quit.qml")); + + QSignalSpy spy(&engine, SIGNAL(quit())); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(spy.count(), 1); + + delete object; +} + QTEST_MAIN(tst_qdeclarativeqt) #include "tst_qdeclarativeqt.moc" -- cgit v0.12 From 4b26e5059fce5fcfa500729a1b34fe1c4021eab1 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 24 Sep 2010 17:24:38 +1000 Subject: Small fixes to Browser.qml - focus highlight should not be shown if user presses any physical key, only when up, down, left and right arrow keys are pressed - hybrid devices (touch + four-way rocker) showed two highlight at the same time after using rocker and pressing the screen with finger - touch highlight had gradient, focus highlight one didn't - the width of the focus highlight didn't update when listview changed size (for example after orientation change) Task-number: Reviewed-by: Martin Jones --- tools/qml/browser/Browser.qml | 48 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/tools/qml/browser/Browser.qml b/tools/qml/browser/Browser.qml index ff2bb47..279c42f 100644 --- a/tools/qml/browser/Browser.qml +++ b/tools/qml/browser/Browser.qml @@ -44,7 +44,7 @@ import Qt.labs.folderlistmodel 1.0 Rectangle { id: root - property bool keyPressed: false + property bool showFocusHighlight: false property variant folders: folders1 property variant view: view1 width: 320 @@ -95,6 +95,19 @@ Rectangle { view.focus = true; folders.folder = path; } + function keyPressed(key) { + switch (key) { + case Qt.Key_Up: + case Qt.Key_Down: + case Qt.Key_Left: + case Qt.Key_Right: + root.showFocusHighlight = true; + break; + default: + // do nothing + break; + } + } Component { id: folderDelegate @@ -113,6 +126,7 @@ Rectangle { Rectangle { id: highlight; visible: false anchors.fill: parent + color: palette.highlight gradient: Gradient { GradientStop { id: t1; position: 0.0; color: palette.highlight } GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } @@ -128,12 +142,16 @@ Rectangle { text: fileName anchors.leftMargin: 54 font.pixelSize: 32 - color: (wrapper.ListView.isCurrentItem && root.keyPressed) ? palette.highlightedText : palette.windowText + color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : palette.windowText elide: Text.ElideRight } MouseArea { id: mouseRegion anchors.fill: parent + onPressed: { + root.showFocusHighlight = false; + wrapper.ListView.view.currentIndex = index; + } onClicked: { if (folders == wrapper.ListView.view.model) launch() } } states: [ @@ -155,7 +173,15 @@ Rectangle { width: parent.width model: folders1 delegate: folderDelegate - highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view1.count != 0 } + highlight: Rectangle { + color: palette.highlight + visible: root.showFocusHighlight && view1.count != 0 + gradient: Gradient { + GradientStop { id: t1; position: 0.0; color: palette.highlight } + GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } + } + width: view1.currentItem.width + } highlightMoveSpeed: 1000 pressDelay: 100 focus: true @@ -186,7 +212,7 @@ Rectangle { NumberAnimation { properties: "x"; duration: 250 } } ] - Keys.onPressed: { root.keyPressed = true; } + Keys.onPressed: root.keyPressed(event.key) } ListView { @@ -197,7 +223,15 @@ Rectangle { width: parent.width model: folders2 delegate: folderDelegate - highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view2.count != 0 } + highlight: Rectangle { + color: palette.highlight + visible: root.showFocusHighlight && view2.count != 0 + gradient: Gradient { + GradientStop { id: t1; position: 0.0; color: palette.highlight } + GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } + } + width: view1.currentItem.width + } highlightMoveSpeed: 1000 pressDelay: 100 states: [ @@ -225,11 +259,11 @@ Rectangle { NumberAnimation { properties: "x"; duration: 250 } } ] - Keys.onPressed: { root.keyPressed = true; } + Keys.onPressed: root.keyPressed(event.key) } Keys.onPressed: { - root.keyPressed = true; + root.keyPressed(event.key); if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) { view.currentItem.launch(); event.accepted = true; -- cgit v0.12 From 9623a5d9c3d6c6ff655e3a27c6a89c3d18d36906 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 27 Sep 2010 10:00:37 +1000 Subject: Fix test. --- src/declarative/qml/qdeclarativetypenotavailable.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/declarative/qml/qdeclarativetypenotavailable.cpp b/src/declarative/qml/qdeclarativetypenotavailable.cpp index 7a84732..9b79d70 100644 --- a/src/declarative/qml/qdeclarativetypenotavailable.cpp +++ b/src/declarative/qml/qdeclarativetypenotavailable.cpp @@ -41,9 +41,13 @@ #include "qdeclarativetypenotavailable_p.h" +QT_BEGIN_NAMESPACE + int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message) { return qmlRegisterUncreatableType(uri,versionMajor,versionMinor,qmlName,message); } QDeclarativeTypeNotAvailable::QDeclarativeTypeNotAvailable() { } + +QT_END_NAMESPACE -- cgit v0.12 From ae5eae1a859f330922b1480f82498c5a6212ebd0 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 27 Sep 2010 10:21:35 +1000 Subject: Document PropertyAnimation::targets property --- src/declarative/util/qdeclarativeanimation.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index ea3da25..ba6f1e7 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -2192,6 +2192,13 @@ void QDeclarativePropertyAnimation::setProperties(const QString &prop) The singular forms are slightly optimized, so if you do have only a single target/property to animate you should try to use them. + The \c targets property allows multiple targets to be set. For example, this animates the + \c x property of both \c itemA and \c itemB: + + \qml + NumberAnimation { targets: [itemA, itemB]; properties: "x"; to: 500 } + \endqml + In many cases these properties do not need to be explicitly specified, as they can be inferred from the animation framework: @@ -2255,7 +2262,7 @@ void QDeclarativePropertyAnimation::setProperties(const QString &prop) As seen in the above example, properties is specified as a comma-separated string of property names to animate. - \sa exclude + \sa exclude, {QML Animation} */ QDeclarativeListProperty QDeclarativePropertyAnimation::targets() { -- cgit v0.12