From 97cb8d856284efa7877c8127ad4e9ec2c02a6c7b Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Tue, 10 Nov 2009 21:06:48 +1000 Subject: SpringFollow autotest --- src/declarative/util/qmlspringfollow.cpp | 2 +- src/declarative/util/qmlspringfollow_p.h | 1 - tests/auto/declarative/declarative.pro | 1 + .../qmlspringfollow/data/springfollow1.qml | 4 + .../qmlspringfollow/data/springfollow2.qml | 8 ++ .../qmlspringfollow/data/springfollow3.qml | 8 ++ .../qmlspringfollow/qmlspringfollow.pro | 8 ++ .../qmlspringfollow/tst_qmlspringfollow.cpp | 137 +++++++++++++++++++++ 8 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qmlspringfollow/data/springfollow1.qml create mode 100644 tests/auto/declarative/qmlspringfollow/data/springfollow2.qml create mode 100644 tests/auto/declarative/qmlspringfollow/data/springfollow3.qml create mode 100644 tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro create mode 100644 tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp diff --git a/src/declarative/util/qmlspringfollow.cpp b/src/declarative/util/qmlspringfollow.cpp index 4a7c8b3..d6961b0 100644 --- a/src/declarative/util/qmlspringfollow.cpp +++ b/src/declarative/util/qmlspringfollow.cpp @@ -55,7 +55,7 @@ class QmlSpringFollowPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QmlSpringFollow) public: QmlSpringFollowPrivate() - : sourceValue(0), maxVelocity(0), lastTime(0) + : currentValue(0), sourceValue(0), maxVelocity(0), lastTime(0) , mass(1.0), spring(0.), damping(0.), velocity(0), epsilon(0.01) , modulus(0.0), useMass(false), haveModulus(false), enabled(true), mode(Track), clock(this) {} diff --git a/src/declarative/util/qmlspringfollow_p.h b/src/declarative/util/qmlspringfollow_p.h index b81539a..b7989e4 100644 --- a/src/declarative/util/qmlspringfollow_p.h +++ b/src/declarative/util/qmlspringfollow_p.h @@ -64,7 +64,6 @@ class Q_DECLARATIVE_EXPORT QmlSpringFollow : public QObject, Q_PROPERTY(qreal spring READ spring WRITE setSpring) Q_PROPERTY(qreal damping READ damping WRITE setDamping) Q_PROPERTY(qreal epsilon READ epsilon WRITE setEpsilon) - Q_PROPERTY(qreal modulus READ modulus WRITE setModulus) Q_PROPERTY(bool enabled READ enabled WRITE setEnabled) Q_PROPERTY(qreal value READ value NOTIFY valueChanged) Q_PROPERTY(qreal modulus READ modulus WRITE setModulus NOTIFY modulusChanged) diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 3106f90..6b2e39e 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -41,6 +41,7 @@ SUBDIRS += \ qmlpixmapcache \ # Cover qmlpropertymap \ # Cover qmlqt \ # Cover + qmlspringfollow \ # Cover qmlsystempalette \ # Cover qmltimer \ # Cover qmlxmllistmodel \ # Cover diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml new file mode 100644 index 0000000..959d206 --- /dev/null +++ b/tests/auto/declarative/qmlspringfollow/data/springfollow1.qml @@ -0,0 +1,4 @@ +import Qt 4.6 + +SpringFollow { +} diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml new file mode 100644 index 0000000..7c81fb5 --- /dev/null +++ b/tests/auto/declarative/qmlspringfollow/data/springfollow2.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +SpringFollow { + source: 1.44; velocity: 0.9 + spring: 1.0; damping: 0.5 + epsilon: 0.25; modulus: 360.0 + mass: 2.0; enabled: true +} diff --git a/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml b/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml new file mode 100644 index 0000000..6fec55b --- /dev/null +++ b/tests/auto/declarative/qmlspringfollow/data/springfollow3.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +SpringFollow { + source: 1.44; velocity: 0.9 + spring: 1.0; damping: 0.5 + epsilon: 0.25; modulus: 360.0 + mass: 2.0; enabled: false +} diff --git a/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro b/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro new file mode 100644 index 0000000..ffaa97f --- /dev/null +++ b/tests/auto/declarative/qmlspringfollow/qmlspringfollow.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlspringfollow.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp b/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp new file mode 100644 index 0000000..fe3a53a --- /dev/null +++ b/tests/auto/declarative/qmlspringfollow/tst_qmlspringfollow.cpp @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include +#include +#include +#include +#include "../../../shared/util.h" + +class tst_qmlspringfollow : public QObject +{ + Q_OBJECT +public: + tst_qmlspringfollow(); + +private slots: + void defaultValues(); + void values(); + void disabled(); + +private: + QmlEngine engine; +}; + +tst_qmlspringfollow::tst_qmlspringfollow() +{ +} + +void tst_qmlspringfollow::defaultValues() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/springfollow1.qml")); + QmlSpringFollow *obj = qobject_cast(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->sourceValue(), 0.); + QCOMPARE(obj->velocity(), 0.); + QCOMPARE(obj->spring(), 0.); + QCOMPARE(obj->damping(), 0.); + QCOMPARE(obj->epsilon(), 0.01); + QCOMPARE(obj->modulus(), 0.); + QCOMPARE(obj->value(), 0.); + QCOMPARE(obj->mass(), 1.); + QCOMPARE(obj->enabled(), true); + QCOMPARE(obj->inSync(), true); + + delete obj; +} + +void tst_qmlspringfollow::values() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/springfollow2.qml")); + QmlSpringFollow *obj = qobject_cast(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->sourceValue(), 1.44); + QCOMPARE(obj->velocity(), 0.9); + QCOMPARE(obj->spring(), 1.0); + QCOMPARE(obj->damping(), 0.5); + QCOMPARE(obj->epsilon(), 0.25); + QCOMPARE(obj->modulus(), 360.0); + QCOMPARE(obj->mass(), 2.0); + QCOMPARE(obj->enabled(), true); + + QTRY_COMPARE(obj->value(), 1.44); + QTRY_COMPARE(obj->inSync(), true); + + delete obj; +} + +void tst_qmlspringfollow::disabled() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/springfollow3.qml")); + QmlSpringFollow *obj = qobject_cast(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->sourceValue(), 1.44); + QCOMPARE(obj->velocity(), 0.9); + QCOMPARE(obj->spring(), 1.0); + QCOMPARE(obj->damping(), 0.5); + QCOMPARE(obj->epsilon(), 0.25); + QCOMPARE(obj->modulus(), 360.0); + QCOMPARE(obj->mass(), 2.0); + QCOMPARE(obj->enabled(), false); + + QCOMPARE(obj->value(), 0.0); + QCOMPARE(obj->inSync(), false); + + delete obj; +} + +QTEST_MAIN(tst_qmlspringfollow) + +#include "tst_qmlspringfollow.moc" -- cgit v0.12 From 2b3f5433d5b522a169cf466d9f0bc820d796b828 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Tue, 10 Nov 2009 13:38:13 +0100 Subject: qdoc3: Allow the full signature for QML signals and methods ...in the \qmlmethod and \qmlsignal commands, and the corresponding "attached" ones. Previously, the type was not allowed, but it really should be there, which means the \qmlmethod and \qmlsignal commands should be updated throughout. --- tools/qdoc3/cppcodeparser.cpp | 47 +++++++++++++++++++++++++------------------ tools/qdoc3/cppcodeparser.h | 10 ++++----- tools/qdoc3/node.cpp | 7 +++++++ tools/qdoc3/node.h | 2 ++ 4 files changed, 41 insertions(+), 25 deletions(-) diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index 90d83ca..ce71e51 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -686,9 +686,9 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, (command == COMMAND_QMLATTACHEDSIGNAL) || (command == COMMAND_QMLATTACHEDMETHOD)) { QString element; - QString name; + QString type; QmlClassNode* qmlClass = 0; - if (splitQmlArg(doc,arg,element,name)) { + if (splitQmlMethodArg(doc,arg,type,element)) { Node* n = tre->findNode(QStringList(element),Node::Fake); if (n && n->subType() == Node::QmlClass) { qmlClass = static_cast(n); @@ -717,15 +717,15 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, :: This function splits the argument into those three - parts, sets \a type, \a element, and \a property, + parts, sets \a type, \a element, and \a name, and returns true. If any of the parts isn't found, - a debug message is output and false is returned. + a qdoc warning is output and false is returned. */ bool CppCodeParser::splitQmlPropertyArg(const Doc& doc, const QString& arg, QString& type, QString& element, - QString& property) + QString& name) { QStringList blankSplit = arg.split(" "); if (blankSplit.size() > 1) { @@ -733,40 +733,47 @@ bool CppCodeParser::splitQmlPropertyArg(const Doc& doc, QStringList colonSplit(blankSplit[1].split("::")); if (colonSplit.size() > 1) { element = colonSplit[0]; - property = colonSplit[1]; + name = colonSplit[1]; return true; } else - doc.location().warning(tr("Missing QML element name or property name")); + doc.location().warning(tr("Missing parent QML element name")); } else - doc.location().warning(tr("Missing QML property type or property path")); + doc.location().warning(tr("Missing property type")); return false; } /*! A QML signal or method argument has the form... - :: + ::(, , ...) This function splits the argument into those two parts, sets \a element, and \a name, and returns true. If either of the parts isn't found, a debug message is output and false is returned. */ -bool CppCodeParser::splitQmlArg(const Doc& doc, - const QString& arg, - QString& element, - QString& name) +bool CppCodeParser::splitQmlMethodArg(const Doc& doc, + const QString& arg, + QString& type, + QString& element) { QStringList colonSplit(arg.split("::")); if (colonSplit.size() > 1) { - element = colonSplit[0]; - name = colonSplit[1]; + QStringList blankSplit = colonSplit[0].split(" "); + if (blankSplit.size() > 1) { + type = blankSplit[0]; + element = blankSplit[1]; + } + else { + type = QString(""); + element = colonSplit[0]; + } return true; } else - doc.location().warning(tr("Missing QML element name or signal/method name")); + doc.location().warning(tr("Missing parent QML element or method signature")); return false; } @@ -811,10 +818,10 @@ Node *CppCodeParser::processTopicCommandGroup(const Doc& doc, ++arg; while (arg != args.end()) { if (splitQmlPropertyArg(doc,(*arg),type,element,property)) { - QmlPropertyNode * qmlPropNode = new QmlPropertyNode(qmlPropGroup, - property, - type, - attached); + QmlPropertyNode* qmlPropNode = new QmlPropertyNode(qmlPropGroup, + property, + type, + attached); if (correspondingProperty) { bool writableList = type.startsWith("list") && correspondingProperty->dataType().endsWith('*'); qmlPropNode->setWritable(writableList || correspondingProperty->isWritable()); diff --git a/tools/qdoc3/cppcodeparser.h b/tools/qdoc3/cppcodeparser.h index 87c1b69..e2e9d55 100644 --- a/tools/qdoc3/cppcodeparser.h +++ b/tools/qdoc3/cppcodeparser.h @@ -99,11 +99,11 @@ class CppCodeParser : public CodeParser const QString& arg, QString& type, QString& element, - QString& property); - bool splitQmlArg(const Doc& doc, - const QString& arg, - QString& element, - QString& name); + QString& name); + bool splitQmlMethodArg(const Doc& doc, + const QString& arg, + QString& type, + QString& element); #endif virtual QSet otherMetaCommands(); virtual void processOtherMetaCommand(const Doc& doc, diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 1217042..373002c 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -1094,6 +1094,13 @@ QString FunctionNode::signature(bool values) const return s; } +/*! + Print some debugging stuff. + */ +void FunctionNode::debug() const +{ + qDebug() << "QML METHOD" << name() << "rt" << rt << "pp" << pp; +} /*! \class PropertyNode diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 4e12846..7fd3897 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -609,6 +609,8 @@ class FunctionNode : public LeafNode const QString& element() const { return parent()->name(); } bool isAttached() const { return att; } + void debug() const; + private: void setAssociatedProperty(PropertyNode *property); -- cgit v0.12 From 7c4287c9c36bf5382799eac6f6ceb97d4cec3f6f Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 11 Nov 2009 09:48:18 +1000 Subject: Add ability for viewer to slow down animations. This is useful for debugging complex transitions. --- tools/qmlviewer/qmlviewer.cpp | 15 +++++++++++++++ tools/qmlviewer/qmlviewer.h | 1 + 2 files changed, 16 insertions(+) diff --git a/tools/qmlviewer/qmlviewer.cpp b/tools/qmlviewer/qmlviewer.cpp index b6a3627..ea0936b 100644 --- a/tools/qmlviewer/qmlviewer.cpp +++ b/tools/qmlviewer/qmlviewer.cpp @@ -413,6 +413,16 @@ void QmlViewer::createMenu(QMenuBar *menu, QMenu *flatmenu) if (flatmenu) flatmenu->addSeparator(); + QMenu *debugMenu = flatmenu ? flatmenu->addMenu(tr("&Debugging")) : menu->addMenu(tr("&Debugging")); + + QAction *slowAction = new QAction(tr("&Slow Down Animations"), parent); + slowAction->setShortcut(QKeySequence("Ctrl+.")); + slowAction->setCheckable(true); + connect(slowAction, SIGNAL(triggered(bool)), this, SLOT(setSlowMode(bool))); + debugMenu->addAction(slowAction); + + if (flatmenu) flatmenu->addSeparator(); + QMenu *skinMenu = flatmenu ? flatmenu->addMenu(tr("&Skin")) : menu->addMenu(tr("&Skin")); QActionGroup *skinActions; @@ -627,6 +637,11 @@ void QmlViewer::toggleRecording() setRecording(recording); } +void QmlViewer::setSlowMode(bool enable) +{ + QUnifiedTimer::instance()->setSlowModeEnabled(enable); +} + void QmlViewer::addLibraryPath(const QString& lib) { canvas->engine()->addImportPath(lib); diff --git a/tools/qmlviewer/qmlviewer.h b/tools/qmlviewer/qmlviewer.h index b366401..78512a9 100644 --- a/tools/qmlviewer/qmlviewer.h +++ b/tools/qmlviewer/qmlviewer.h @@ -104,6 +104,7 @@ public slots: void proxySettingsChanged (); void setScaleView(); void executeErrors(); + void setSlowMode(bool); protected: virtual void keyPressEvent(QKeyEvent *); -- cgit v0.12 From 24ee7d2fe5481658f350172b9c211bc3b4d89a65 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 11 Nov 2009 09:57:25 +1000 Subject: Fix failing test. --- tests/auto/declarative/anchors/data/anchors.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/declarative/anchors/data/anchors.qml b/tests/auto/declarative/anchors/data/anchors.qml index b3fba30..b880762 100644 --- a/tests/auto/declarative/anchors/data/anchors.qml +++ b/tests/auto/declarative/anchors/data/anchors.qml @@ -97,7 +97,7 @@ Rectangle { id: rect18; objectName: "rect18" x: 180; width: 10 anchors.top: masterRect.bottom - anchors.bottom: Rect12.top + anchors.bottom: rect12.top } Rectangle { id: rect19; objectName: "rect19" -- cgit v0.12