From a30e67378bf56bac642d5480f8b9f3e5749dc2f6 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 4 Dec 2009 12:25:20 +1000 Subject: Cleanup. --- src/declarative/graphicsitems/qmlgraphicstext.cpp | 28 ++++++++++------------ src/declarative/util/qmltransition.cpp | 14 +++++------ .../auto/declarative/animations/data/badtype4.qml | 1 + .../declarative/animations/data/mixedtype1.qml | 1 + .../declarative/animations/data/mixedtype2.qml | 1 + .../auto/declarative/animations/tst_animations.cpp | 6 ++--- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicstext.cpp b/src/declarative/graphicsitems/qmlgraphicstext.cpp index 854d503..98ea80d 100644 --- a/src/declarative/graphicsitems/qmlgraphicstext.cpp +++ b/src/declarative/graphicsitems/qmlgraphicstext.cpp @@ -485,19 +485,19 @@ void QmlGraphicsTextPrivate::updateSize() //setup instance of QTextLayout for all cases other than richtext if (!richText) - { - tmp = text; - tmp.replace(QLatin1Char('\n'), QChar::LineSeparator); - singleline = !tmp.contains(QChar::LineSeparator); - if (singleline && elideMode != QmlGraphicsText::ElideNone && q->widthValid()) - tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...? - layout.clearLayout(); - layout.setFont(font); - layout.setText(tmp); - size = setupTextLayout(&layout); - cachedLayoutSize = size; - } - if (richText) { + { + tmp = text; + tmp.replace(QLatin1Char('\n'), QChar::LineSeparator); + singleline = !tmp.contains(QChar::LineSeparator); + if (singleline && elideMode != QmlGraphicsText::ElideNone && q->widthValid()) + tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...? + layout.clearLayout(); + layout.setFont(font); + layout.setText(tmp); + size = setupTextLayout(&layout); + cachedLayoutSize = size; + dy -= size.height(); + } else { singleline = false; // richtext can't elide or be optimized for single-line case doc->setDefaultFont(font); QTextOption option((Qt::Alignment)int(hAlign | vAlign)); @@ -511,8 +511,6 @@ void QmlGraphicsTextPrivate::updateSize() else doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug) dy -= (int)doc->size().height(); - } else { - dy -= size.height(); } int yoff = 0; diff --git a/src/declarative/util/qmltransition.cpp b/src/declarative/util/qmltransition.cpp index ec92cf9..dad6c37 100644 --- a/src/declarative/util/qmltransition.cpp +++ b/src/declarative/util/qmltransition.cpp @@ -85,7 +85,7 @@ public: QmlTransitionPrivate() : fromState(QLatin1String("*")), toState(QLatin1String("*")) , reversed(false), reversible(false), group(0), endState(0) { - operations.parent = this; + animations.parent = this; } QString fromState; @@ -115,7 +115,7 @@ public: QmlTransitionPrivate *parent; }; - AnimationList operations; + AnimationList animations; }; void QmlTransitionPrivate::AnimationList::append(QmlAbstractAnimation *a) @@ -169,12 +169,12 @@ void QmlTransition::prepare(QmlStateOperation::ActionList &actions, Q_D(QmlTransition); if (d->reversed) { - for (int ii = d->operations.count() - 1; ii >= 0; --ii) { - d->operations.at(ii)->transition(actions, after, QmlAbstractAnimation::Backward); + for (int ii = d->animations.count() - 1; ii >= 0; --ii) { + d->animations.at(ii)->transition(actions, after, QmlAbstractAnimation::Backward); } } else { - for (int ii = 0; ii < d->operations.count(); ++ii) { - d->operations.at(ii)->transition(actions, after, QmlAbstractAnimation::Forward); + for (int ii = 0; ii < d->animations.count(); ++ii) { + d->animations.at(ii)->transition(actions, after, QmlAbstractAnimation::Forward); } } @@ -254,7 +254,7 @@ void QmlTransition::setToState(const QString &t) QmlList* QmlTransition::animations() { Q_D(QmlTransition); - return &d->operations; + return &d->animations; } QT_END_NAMESPACE diff --git a/tests/auto/declarative/animations/data/badtype4.qml b/tests/auto/declarative/animations/data/badtype4.qml index 5db6c17..347e581 100644 --- a/tests/auto/declarative/animations/data/badtype4.qml +++ b/tests/auto/declarative/animations/data/badtype4.qml @@ -6,6 +6,7 @@ Rectangle { height: 320 Rectangle { id: MyRect + objectName: "MyRect" color: "red" width: 50; height: 50 x: 100; y: 100 diff --git a/tests/auto/declarative/animations/data/mixedtype1.qml b/tests/auto/declarative/animations/data/mixedtype1.qml index 5ecf14f..a91c6d3 100644 --- a/tests/auto/declarative/animations/data/mixedtype1.qml +++ b/tests/auto/declarative/animations/data/mixedtype1.qml @@ -6,6 +6,7 @@ Rectangle { height: 320 Rectangle { id: MyRect + objectName: "MyRect" color: "red" width: 50; height: 50 x: 100; y: 100 diff --git a/tests/auto/declarative/animations/data/mixedtype2.qml b/tests/auto/declarative/animations/data/mixedtype2.qml index 645f1d0..d12e913 100644 --- a/tests/auto/declarative/animations/data/mixedtype2.qml +++ b/tests/auto/declarative/animations/data/mixedtype2.qml @@ -6,6 +6,7 @@ Rectangle { height: 320 Rectangle { id: MyRect + objectName: "MyRect" color: "red" width: 50; height: 50 x: 100; y: 100 diff --git a/tests/auto/declarative/animations/tst_animations.cpp b/tests/auto/declarative/animations/tst_animations.cpp index 73bed79..a6cb490 100644 --- a/tests/auto/declarative/animations/tst_animations.cpp +++ b/tests/auto/declarative/animations/tst_animations.cpp @@ -284,7 +284,7 @@ void tst_animations::badTypes() rect->setState("state1"); QTest::qWait(1000 + 50); - QmlGraphicsRectangle *myRect = qobject_cast(rect->QGraphicsObject::children().at(3)); //### not robust + QmlGraphicsRectangle *myRect = rect->findChild("MyRect"); QVERIFY(myRect); QCOMPARE(myRect->x(),qreal(200)); } @@ -324,7 +324,7 @@ void tst_animations::mixedTypes() rect->setState("state1"); QTest::qWait(500); - QmlGraphicsRectangle *myRect = qobject_cast(rect->QGraphicsObject::children().at(3)); //### not robust + QmlGraphicsRectangle *myRect = rect->findChild("MyRect"); QVERIFY(myRect); //rather inexact -- is there a better way? @@ -340,7 +340,7 @@ void tst_animations::mixedTypes() rect->setState("state1"); QTest::qWait(500); - QmlGraphicsRectangle *myRect = qobject_cast(rect->QGraphicsObject::children().at(3)); //### not robust + QmlGraphicsRectangle *myRect = rect->findChild("MyRect"); QVERIFY(myRect); //rather inexact -- is there a better way? -- cgit v0.12 From bde55091ca0d3905357393e7063a163c0d639e19 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 4 Dec 2009 19:13:14 +1000 Subject: Stuff for package install. --- src/declarative/declarative.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/declarative/declarative.pro b/src/declarative/declarative.pro index 0669d13..9cb45f6 100644 --- a/src/declarative/declarative.pro +++ b/src/declarative/declarative.pro @@ -16,6 +16,9 @@ exists("qml_enable_gcov") { include(../qbase.pri) +#INCLUDEPATH -= $$QMAKE_INCDIR_QT/$$TARGET +#DESTDIR=. + #modules include(3rdparty/3rdparty.pri) include(util/util.pri) -- cgit v0.12 From f3a55136c0375d358e93929e94c2ab6c15dbfb93 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Fri, 4 Dec 2009 19:15:13 +1000 Subject: Make QmlScriptEngine reusable in WorkScript, so extra fns are available. Add Qt.resolvedUrl(url) --- src/declarative/qml/qmlengine.cpp | 117 +++++++++++++++++++----------- src/declarative/qml/qmlengine_p.h | 36 ++++++--- src/declarative/qml/qmlsqldatabase.cpp | 12 ++- src/declarative/qml/qmlworkerscript.cpp | 5 +- src/declarative/qml/qmlxmlhttprequest.cpp | 47 ++++++------ 5 files changed, 137 insertions(+), 80 deletions(-) diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index ce5b4a4..598f7ac 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -115,60 +115,99 @@ struct StaticQtMetaObject : public QObject QmlEnginePrivate::QmlEnginePrivate(QmlEngine *e) : rootContext(0), currentExpression(0), isDebugging(false), contextClass(0), sharedContext(0), sharedScope(0), objectClass(0), valueTypeClass(0), globalClass(0), - nodeListClass(0), namedNodeMapClass(0), sqlQueryClass(0), cleanup(0), erroredBindings(0), + cleanup(0), erroredBindings(0), inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttacheds(0), rootComponent(0), networkAccessManager(0), typeManager(e), uniqueId(1) { + globalClass = new QmlGlobalScriptClass(&scriptEngine); +} + +QUrl QmlScriptEngine::resolvedUrl(QScriptContext *context, const QUrl& url) +{ + if (p) { + QmlContext *ctxt = QmlEnginePrivate::get(this)->getContext(context); + Q_ASSERT(ctxt); + return ctxt->resolvedUrl(url); + } + return baseUrl.resolved(url); +} + +QmlScriptEngine::QmlScriptEngine(QmlEnginePrivate *priv) + : p(priv), + sqlQueryClass(0), + namedNodeMapClass(0), + nodeListClass(0) +{ // Note that all documentation for stuff put on the global object goes in // doc/src/declarative/globalobject.qdoc + + bool mainthread = priv != 0; + QScriptValue qtObject = - scriptEngine.newQMetaObject(StaticQtMetaObject::get()); - scriptEngine.globalObject().setProperty(QLatin1String("Qt"), qtObject); + newQMetaObject(StaticQtMetaObject::get()); + globalObject().setProperty(QLatin1String("Qt"), qtObject); offlineStoragePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QDir::separator() + QLatin1String("QML") + QDir::separator() + QLatin1String("OfflineStorage"); - qt_add_qmlxmlhttprequest(&scriptEngine); - qt_add_qmlsqldatabase(&scriptEngine); + qt_add_qmlxmlhttprequest(this); + qt_add_qmlsqldatabase(this); //types - qtObject.setProperty(QLatin1String("rgba"), scriptEngine.newFunction(QmlEnginePrivate::rgba, 4)); - qtObject.setProperty(QLatin1String("hsla"), scriptEngine.newFunction(QmlEnginePrivate::hsla, 4)); - qtObject.setProperty(QLatin1String("rect"), scriptEngine.newFunction(QmlEnginePrivate::rect, 4)); - qtObject.setProperty(QLatin1String("point"), scriptEngine.newFunction(QmlEnginePrivate::point, 2)); - qtObject.setProperty(QLatin1String("size"), scriptEngine.newFunction(QmlEnginePrivate::size, 2)); - qtObject.setProperty(QLatin1String("vector3d"), scriptEngine.newFunction(QmlEnginePrivate::vector, 3)); - - //color helpers - qtObject.setProperty(QLatin1String("lighter"), scriptEngine.newFunction(QmlEnginePrivate::lighter, 1)); - qtObject.setProperty(QLatin1String("darker"), scriptEngine.newFunction(QmlEnginePrivate::darker, 1)); - qtObject.setProperty(QLatin1String("tint"), scriptEngine.newFunction(QmlEnginePrivate::tint, 2)); + qtObject.setProperty(QLatin1String("rgba"), newFunction(QmlEnginePrivate::rgba, 4)); + qtObject.setProperty(QLatin1String("hsla"), newFunction(QmlEnginePrivate::hsla, 4)); + qtObject.setProperty(QLatin1String("rect"), newFunction(QmlEnginePrivate::rect, 4)); + qtObject.setProperty(QLatin1String("point"), newFunction(QmlEnginePrivate::point, 2)); + qtObject.setProperty(QLatin1String("size"), newFunction(QmlEnginePrivate::size, 2)); + qtObject.setProperty(QLatin1String("vector3d"), newFunction(QmlEnginePrivate::vector, 3)); + + if (mainthread) { + //color helpers + qtObject.setProperty(QLatin1String("lighter"), newFunction(QmlEnginePrivate::lighter, 1)); + qtObject.setProperty(QLatin1String("darker"), newFunction(QmlEnginePrivate::darker, 1)); + qtObject.setProperty(QLatin1String("tint"), newFunction(QmlEnginePrivate::tint, 2)); + } //misc methods - qtObject.setProperty(QLatin1String("closestAngle"), scriptEngine.newFunction(QmlEnginePrivate::closestAngle, 2)); - qtObject.setProperty(QLatin1String("playSound"), scriptEngine.newFunction(QmlEnginePrivate::playSound, 1)); - qtObject.setProperty(QLatin1String("openUrlExternally"),scriptEngine.newFunction(desktopOpenUrl, 1)); - qtObject.setProperty(QLatin1String("md5"),scriptEngine.newFunction(md5, 1)); - qtObject.setProperty(QLatin1String("btoa"),scriptEngine.newFunction(btoa, 1)); - qtObject.setProperty(QLatin1String("atob"),scriptEngine.newFunction(atob, 1)); - qtObject.setProperty(QLatin1String("quit"), scriptEngine.newFunction(QmlEnginePrivate::quit, 0)); + qtObject.setProperty(QLatin1String("closestAngle"), newFunction(QmlEnginePrivate::closestAngle, 2)); + qtObject.setProperty(QLatin1String("playSound"), newFunction(QmlEnginePrivate::playSound, 1)); + qtObject.setProperty(QLatin1String("openUrlExternally"),newFunction(QmlEnginePrivate::desktopOpenUrl, 1)); + qtObject.setProperty(QLatin1String("md5"),newFunction(QmlEnginePrivate::md5, 1)); + qtObject.setProperty(QLatin1String("btoa"),newFunction(QmlEnginePrivate::btoa, 1)); + qtObject.setProperty(QLatin1String("atob"),newFunction(QmlEnginePrivate::atob, 1)); + qtObject.setProperty(QLatin1String("quit"), newFunction(QmlEnginePrivate::quit, 0)); + qtObject.setProperty(QLatin1String("resolvedUrl"),newFunction(QmlScriptEngine::resolvedUrl, 1)); //firebug/webkit compat - QScriptValue consoleObject = scriptEngine.newObject(); - consoleObject.setProperty(QLatin1String("log"),scriptEngine.newFunction(consoleLog, 1)); - consoleObject.setProperty(QLatin1String("debug"),scriptEngine.newFunction(consoleLog, 1)); - scriptEngine.globalObject().setProperty(QLatin1String("console"), consoleObject); - - scriptEngine.globalObject().setProperty(QLatin1String("createQmlObject"), - scriptEngine.newFunction(QmlEnginePrivate::createQmlObject, 1)); - scriptEngine.globalObject().setProperty(QLatin1String("createComponent"), - scriptEngine.newFunction(QmlEnginePrivate::createComponent, 1)); + QScriptValue consoleObject = newObject(); + consoleObject.setProperty(QLatin1String("log"),newFunction(QmlEnginePrivate::consoleLog, 1)); + consoleObject.setProperty(QLatin1String("debug"),newFunction(QmlEnginePrivate::consoleLog, 1)); + globalObject().setProperty(QLatin1String("console"), consoleObject); + + if (mainthread) { + globalObject().setProperty(QLatin1String("createQmlObject"), + newFunction(QmlEnginePrivate::createQmlObject, 1)); + globalObject().setProperty(QLatin1String("createComponent"), + newFunction(QmlEnginePrivate::createComponent, 1)); + } // translation functions need to be installed // before the global script class is constructed (QTBUG-6437) - scriptEngine.installTranslatorFunctions(); + installTranslatorFunctions(); +} - globalClass = new QmlGlobalScriptClass(&scriptEngine); +QmlScriptEngine::~QmlScriptEngine() +{ + delete sqlQueryClass; + delete nodeListClass; + delete namedNodeMapClass; +} + +QScriptValue QmlScriptEngine::resolvedUrl(QScriptContext *ctxt, QScriptEngine *engine) +{ + QString arg = ctxt->argument(0).toString(); + QUrl r = QmlScriptEngine::get(engine)->resolvedUrl(ctxt,QUrl(arg)); + return QScriptValue(r.toString()); } QmlEnginePrivate::~QmlEnginePrivate() @@ -194,12 +233,6 @@ QmlEnginePrivate::~QmlEnginePrivate() typeNameClass = 0; delete listClass; listClass = 0; - delete nodeListClass; - nodeListClass = 0; - delete namedNodeMapClass; - namedNodeMapClass = 0; - delete sqlQueryClass; - sqlQueryClass = 0; for(int ii = 0; ii < bindValues.count(); ++ii) clear(bindValues[ii]); @@ -1347,13 +1380,13 @@ void QmlEngine::addImportPath(const QString& path) void QmlEngine::setOfflineStoragePath(const QString& dir) { Q_D(QmlEngine); - d->offlineStoragePath = dir; + d->scriptEngine.offlineStoragePath = dir; } QString QmlEngine::offlineStoragePath() const { Q_D(const QmlEngine); - return d->offlineStoragePath; + return d->scriptEngine.offlineStoragePath; } diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h index 68dcb2d..1d83d0f 100644 --- a/src/declarative/qml/qmlengine_p.h +++ b/src/declarative/qml/qmlengine_p.h @@ -104,6 +104,31 @@ class QmlCleanup; class QmlBindingData; class QmlWorkerScriptEngine; +class QmlScriptEngine : public QScriptEngine +{ +public: + QmlScriptEngine(QmlEnginePrivate *priv); + + ~QmlScriptEngine(); + + QUrl resolvedUrl(QScriptContext *context, const QUrl& url); // resolved against p's context, or baseUrl if no p + static QScriptValue resolvedUrl(QScriptContext *ctxt, QScriptEngine *engine); + + static QmlScriptEngine *get(QScriptEngine* e) { return static_cast(e); } + + QmlEnginePrivate *p; + + // User by SQL API + QScriptClass *sqlQueryClass; + QString offlineStoragePath; + + // Used by DOM Core 3 API + QScriptClass *namedNodeMapClass; + QScriptClass *nodeListClass; + + QUrl baseUrl; +}; + class QmlEnginePrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QmlEngine) @@ -137,11 +162,6 @@ public: QmlListScriptClass *listClass; // Global script class QScriptClass *globalClass; - // Used by DOM Core 3 API - QScriptClass *nodeListClass; - QScriptClass *namedNodeMapClass; - // Used by SQL database API - QScriptClass *sqlQueryClass; // Registered cleanup handlers QmlCleanup *cleanup; @@ -150,12 +170,6 @@ public: QmlBindingData *erroredBindings; int inProgressCreations; - struct QmlScriptEngine : public QScriptEngine - { - QmlScriptEngine(QmlEnginePrivate *priv) - : p(priv) {} - QmlEnginePrivate *p; - }; QmlScriptEngine scriptEngine; QmlWorkerScriptEngine *getWorkerScriptEngine(); diff --git a/src/declarative/qml/qmlsqldatabase.cpp b/src/declarative/qml/qmlsqldatabase.cpp index b550f96..e82c54e 100644 --- a/src/declarative/qml/qmlsqldatabase.cpp +++ b/src/declarative/qml/qmlsqldatabase.cpp @@ -173,7 +173,8 @@ static const char* sqlerror[] = { static QString databaseFile(const QString& connectionName, QScriptEngine *engine) { - QString basename = QmlEnginePrivate::get(engine)->offlineStoragePath + QmlScriptEngine *qmlengine = static_cast(engine); + QString basename = qmlengine->offlineStoragePath + QDir::separator() + QLatin1String("Databases") + QDir::separator(); basename += connectionName; return basename; @@ -198,6 +199,7 @@ static QScriptValue qmlsqldatabase_item(QScriptContext *context, QScriptEngine * static QScriptValue qmlsqldatabase_executeSql_outsidetransaction(QScriptContext *context, QScriptEngine *engine) { + qDebug() << QmlEngine::tr("executeSql called outside transaction()"); // XXX pending bug QTBUG-6507 THROW_SQL(DATABASE_ERR,QmlEngine::tr("executeSql called outside transaction()")); } @@ -224,9 +226,10 @@ static QScriptValue qmlsqldatabase_executeSql(QScriptContext *context, QScriptEn } if (query.exec()) { result = engine->newObject(); - if (!QmlEnginePrivate::get(engine)->sqlQueryClass) - QmlEnginePrivate::get(engine)->sqlQueryClass= new QmlSqlQueryScriptClass(engine); - QScriptValue rows = engine->newObject(QmlEnginePrivate::get(engine)->sqlQueryClass); + QmlScriptEngine *qmlengine = static_cast(engine); + if (!qmlengine->sqlQueryClass) + qmlengine->sqlQueryClass = new QmlSqlQueryScriptClass(engine); + QScriptValue rows = engine->newObject(qmlengine->sqlQueryClass); rows.setData(engine->newVariant(qVariantFromValue(query))); rows.setProperty(QLatin1String("item"), engine->newFunction(qmlsqldatabase_item,1), QScriptValue::SkipInEnumeration); result.setProperty(QLatin1String("rows"),rows); @@ -406,6 +409,7 @@ void qt_add_qmlsqldatabase(QScriptEngine *engine) { QScriptValue openDatabase = engine->newFunction(qmlsqldatabase_open_sync, 4); engine->globalObject().setProperty(QLatin1String("openDatabaseSync"), openDatabase); +qDebug() << "qt_add_qmlsqldatabase" << engine; QScriptValue sqlExceptionPrototype = engine->newObject(); for (int i=0; sqlerror[i]; ++i) diff --git a/src/declarative/qml/qmlworkerscript.cpp b/src/declarative/qml/qmlworkerscript.cpp index 2a3dbce..45bb535 100644 --- a/src/declarative/qml/qmlworkerscript.cpp +++ b/src/declarative/qml/qmlworkerscript.cpp @@ -101,9 +101,9 @@ class QmlWorkerScriptEnginePrivate : public QObject public: QmlWorkerScriptEnginePrivate(); - struct ScriptEngine : public QScriptEngine + struct ScriptEngine : public QmlScriptEngine { - ScriptEngine(QmlWorkerScriptEnginePrivate *parent) : p(parent) {} + ScriptEngine(QmlWorkerScriptEnginePrivate *parent) : QmlScriptEngine(0), p(parent) {} QmlWorkerScriptEnginePrivate *p; }; ScriptEngine *workerEngine; @@ -259,6 +259,7 @@ void QmlWorkerScriptEnginePrivate::processLoad(int id, const QUrl &url) QScriptContext *ctxt = workerEngine->pushContext(); ctxt->setActivationObject(activation); + workerEngine->baseUrl = url; workerEngine->evaluate(script); workerEngine->popContext(); diff --git a/src/declarative/qml/qmlxmlhttprequest.cpp b/src/declarative/qml/qmlxmlhttprequest.cpp index d1705a1..a955e02 100644 --- a/src/declarative/qml/qmlxmlhttprequest.cpp +++ b/src/declarative/qml/qmlxmlhttprequest.cpp @@ -754,10 +754,10 @@ QScriptValue NamedNodeMap::create(QScriptEngine *engine, NodeImpl *data, QListnewVariant(qVariantFromValue(map))); - if (!QmlEnginePrivate::get(engine)->namedNodeMapClass) - QmlEnginePrivate::get(engine)->namedNodeMapClass= new NamedNodeMapClass(engine); + if (!QmlScriptEngine::get(engine)->namedNodeMapClass) + QmlScriptEngine::get(engine)->namedNodeMapClass= new NamedNodeMapClass(engine); - instance.setScriptClass(QmlEnginePrivate::get(engine)->namedNodeMapClass); + instance.setScriptClass(QmlScriptEngine::get(engine)->namedNodeMapClass); return instance; } @@ -811,10 +811,10 @@ QScriptValue NodeList::create(QScriptEngine *engine, NodeImpl *data) instance.setData(engine->newVariant(qVariantFromValue(list))); - if (!QmlEnginePrivate::get(engine)->nodeListClass) - QmlEnginePrivate::get(engine)->nodeListClass= new NodeListClass(engine); + if (!QmlScriptEngine::get(engine)->nodeListClass) + QmlScriptEngine::get(engine)->nodeListClass= new NodeListClass(engine); - instance.setScriptClass(QmlEnginePrivate::get(engine)->nodeListClass); + instance.setScriptClass(QmlScriptEngine::get(engine)->nodeListClass); return instance; } @@ -939,7 +939,7 @@ public: Opened = 1, HeadersReceived = 2, Loading = 3, Done = 4 }; - QmlXMLHttpRequest(QmlEngine *engine); + QmlXMLHttpRequest(); virtual ~QmlXMLHttpRequest(); QScriptValue callback() const; @@ -965,8 +965,6 @@ private slots: void finished(); private: - QmlEngine *m_engine; - State m_state; bool m_errorFlag; bool m_sendFlag; @@ -987,13 +985,22 @@ private: QNetworkRequest m_request; QNetworkReply *m_network; void destroyNetwork(); + + QNetworkAccessManager *m_nam; + QNetworkAccessManager *networkAccessManager() + { + if (!m_nam) { + m_nam = new QNetworkAccessManager; + // XXX proxy, etc... + } + return m_nam; + } }; -QmlXMLHttpRequest::QmlXMLHttpRequest(QmlEngine *engine) -: m_engine(engine), m_state(Unsent), m_errorFlag(false), m_sendFlag(false), - m_network(0) +QmlXMLHttpRequest::QmlXMLHttpRequest() +: m_state(Unsent), m_errorFlag(false), m_sendFlag(false), + m_network(0), m_nam(0) { - Q_ASSERT(m_engine); } QmlXMLHttpRequest::~QmlXMLHttpRequest() @@ -1138,13 +1145,13 @@ void QmlXMLHttpRequest::send(const QByteArray &data) } if (m_method == QLatin1String("GET")) - m_network = m_engine->networkAccessManager()->get(request); + m_network = networkAccessManager()->get(request); else if (m_method == QLatin1String("HEAD")) - m_network = m_engine->networkAccessManager()->head(request); + m_network = networkAccessManager()->head(request); else if(m_method == QLatin1String("POST")) - m_network = m_engine->networkAccessManager()->post(request, data); + m_network = networkAccessManager()->post(request, data); else if(m_method == QLatin1String("PUT")) - m_network = m_engine->networkAccessManager()->put(request, data); + m_network = networkAccessManager()->put(request, data); QObject::connect(m_network, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(downloadProgress(qint64))); @@ -1291,9 +1298,7 @@ static QScriptValue qmlxmlhttprequest_open(QScriptContext *context, QScriptEngin QUrl url(context->argument(1).toString()); if (url.isRelative()) { - QmlContext *ctxt = QmlEnginePrivate::get(engine)->getContext(context); - Q_ASSERT(ctxt); - url = ctxt->resolvedUrl(url); + url = QmlScriptEngine::get(engine)->resolvedUrl(context,url); } // Argument 2 - async (optional) @@ -1527,7 +1532,7 @@ static QScriptValue qmlxmlhttprequest_onreadystatechange(QScriptContext *context static QScriptValue qmlxmlhttprequest_new(QScriptContext *context, QScriptEngine *engine) { if (context->isCalledAsConstructor()) { - context->thisObject().setData(engine->newQObject(new QmlXMLHttpRequest(QmlEnginePrivate::getEngine(engine)), QScriptEngine::ScriptOwnership)); + context->thisObject().setData(engine->newQObject(new QmlXMLHttpRequest(), QScriptEngine::ScriptOwnership)); } return engine->undefinedValue(); } -- cgit v0.12 From e4881731c58e53407fe995afa8ca5b8dceed39fc Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 7 Dec 2009 11:01:11 +1000 Subject: valueChanged() needs to be virtual? --- src/declarative/qml/qmlexpression.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qmlexpression.h b/src/declarative/qml/qmlexpression.h index 4fdfc3f..c019f21 100644 --- a/src/declarative/qml/qmlexpression.h +++ b/src/declarative/qml/qmlexpression.h @@ -92,7 +92,7 @@ public Q_SLOTS: QVariant value(bool *isUndefined = 0); Q_SIGNALS: - void valueChanged(); + virtual void valueChanged(); protected: QmlExpression(QmlContext *, const QString &, QObject *, -- cgit v0.12 From 560d32ddd80d5c6b21cd39ae93ea3f580da613da Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 7 Dec 2009 13:08:22 +1000 Subject: Minor cleanup/optimization. --- src/declarative/graphicsitems/qmlgraphicsitem_p.h | 2 -- src/declarative/graphicsitems/qmlgraphicstext_p_p.h | 10 +++++----- src/declarative/util/qmlanimation.cpp | 14 +++++++++++--- src/declarative/util/qmlanimation_p_p.h | 9 +++++---- src/declarative/util/qmltransition.cpp | 17 +++++++---------- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicsitem_p.h b/src/declarative/graphicsitems/qmlgraphicsitem_p.h index 82950c2..a8d77ea 100644 --- a/src/declarative/graphicsitems/qmlgraphicsitem_p.h +++ b/src/declarative/graphicsitems/qmlgraphicsitem_p.h @@ -119,8 +119,6 @@ public: heightIdx = QmlGraphicsItem::staticMetaObject.indexOfSignal("heightChanged()"); } } - ~QmlGraphicsItemPrivate() - { delete _anchors; } void init(QmlGraphicsItem *parent) { diff --git a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h index 0ddae57..6fbee50 100644 --- a/src/declarative/graphicsitems/qmlgraphicstext_p_p.h +++ b/src/declarative/graphicsitems/qmlgraphicstext_p_p.h @@ -101,11 +101,11 @@ public: QPixmap imgStyleCache; QmlGraphicsText::HAlignment hAlign; QmlGraphicsText::VAlignment vAlign; - QmlGraphicsText::TextElideMode elideMode; - bool dirty; - bool wrap; - bool richText; - bool singleline; + QmlGraphicsText::TextElideMode elideMode; + bool dirty:1; + bool wrap:1; + bool richText:1; + bool singleline:1; QTextControl *control; QTextDocument *doc; QTextLayout layout; diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp index 00e3056..0143791 100644 --- a/src/declarative/util/qmlanimation.cpp +++ b/src/declarative/util/qmlanimation.cpp @@ -1608,9 +1608,6 @@ void QmlPropertyAnimationPrivate::init() Q_Q(QmlPropertyAnimation); va = new QmlTimeLineValueAnimator; QmlGraphics_setParent_noEvent(va, q); - - va->setStartValue(QVariant(0.0f)); - va->setEndValue(QVariant(1.0f)); } /*! @@ -2022,6 +2019,12 @@ void QmlPropertyAnimation::prepare(QmlMetaProperty &p) else d->property = d->userProperty; + if (!d->rangeIsSet) { + d->va->setStartValue(QVariant(0.0f)); + d->va->setEndValue(QVariant(1.0f)); + d->rangeIsSet = true; + } + int propType = d->property.propertyType(); d->convertVariant(d->to, d->interpolatorType ? d->interpolatorType : propType); if (d->fromIsDefined) @@ -2179,6 +2182,11 @@ void QmlPropertyAnimation::transition(QmlStateActions &actions, } if (data->actions.count()) { + if (!d->rangeIsSet) { + d->va->setStartValue(QVariant(0.0f)); + d->va->setEndValue(QVariant(1.0f)); + d->rangeIsSet = true; + } d->va->setAnimValue(data, QAbstractAnimation::DeleteWhenStopped); } else { delete data; diff --git a/src/declarative/util/qmlanimation_p_p.h b/src/declarative/util/qmlanimation_p_p.h index 71b6caa..71fa9a3 100644 --- a/src/declarative/util/qmlanimation_p_p.h +++ b/src/declarative/util/qmlanimation_p_p.h @@ -343,7 +343,7 @@ class QmlPropertyAnimationPrivate : public QmlAbstractAnimationPrivate public: QmlPropertyAnimationPrivate() : QmlAbstractAnimationPrivate(), fromSourced(false), fromIsDefined(false), toIsDefined(false), - defaultToInterpolatorType(0), interpolatorType(0), interpolator(0), va(0), + rangeIsSet(false), defaultToInterpolatorType(0), interpolatorType(0), interpolator(0), va(0), value(this, &QmlPropertyAnimationPrivate::valueChanged) {} void init(); @@ -358,9 +358,10 @@ public: QList exclude; bool fromSourced; - bool fromIsDefined; - bool toIsDefined; - bool defaultToInterpolatorType; + bool fromIsDefined:1; + bool toIsDefined:1; + bool rangeIsSet:1; + bool defaultToInterpolatorType:1; int interpolatorType; QVariantAnimation::Interpolator interpolator; diff --git a/src/declarative/util/qmltransition.cpp b/src/declarative/util/qmltransition.cpp index dad6c37..b96ff61 100644 --- a/src/declarative/util/qmltransition.cpp +++ b/src/declarative/util/qmltransition.cpp @@ -83,7 +83,7 @@ class QmlTransitionPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QmlTransition) public: QmlTransitionPrivate() : fromState(QLatin1String("*")), toState(QLatin1String("*")) - , reversed(false), reversible(false), group(0), endState(0) + , reversed(false), reversible(false), endState(0) { animations.parent = this; } @@ -92,13 +92,12 @@ public: QString toState; bool reversed; bool reversible; - ParallelAnimationWrapper *group; + ParallelAnimationWrapper group; QmlTransitionManager *endState; void init() { - group = new ParallelAnimationWrapper; - group->trans = this; + group.trans = this; } void complete() @@ -121,7 +120,7 @@ public: void QmlTransitionPrivate::AnimationList::append(QmlAbstractAnimation *a) { QmlConcreteList::append(a); - parent->group->addAnimation(a->qtAnimation()); + parent->group.addAnimation(a->qtAnimation()); } void ParallelAnimationWrapper::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) @@ -146,14 +145,12 @@ QmlTransition::QmlTransition(QObject *parent) QmlTransition::~QmlTransition() { - Q_D(QmlTransition); - delete d->group; } void QmlTransition::stop() { Q_D(QmlTransition); - d->group->stop(); + d->group.stop(); } void QmlTransition::setReversed(bool r) @@ -179,8 +176,8 @@ void QmlTransition::prepare(QmlStateOperation::ActionList &actions, } d->endState = endState; - d->group->setDirection(d->reversed ? QAbstractAnimation::Backward : QAbstractAnimation::Forward); - d->group->start(); + d->group.setDirection(d->reversed ? QAbstractAnimation::Backward : QAbstractAnimation::Forward); + d->group.start(); } /*! -- cgit v0.12 From 55a3fda3baf545cc7fbfa6b2c00705be40a7319b Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 7 Dec 2009 13:22:25 +1000 Subject: Move target/property functions to their appropriate classes. --- src/declarative/util/qmlanimation.cpp | 138 +++++++++++++++++++++----------- src/declarative/util/qmlanimation_p.h | 21 +++-- src/declarative/util/qmlanimation_p_p.h | 12 +-- 3 files changed, 112 insertions(+), 59 deletions(-) diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp index 0143791..8afe667 100644 --- a/src/declarative/util/qmlanimation.cpp +++ b/src/declarative/util/qmlanimation.cpp @@ -422,50 +422,6 @@ void QmlAbstractAnimation::setGroup(QmlAnimationGroup *g) setParent(g); } -QObject *QmlAbstractAnimation::target() const -{ - Q_D(const QmlAbstractAnimation); - return d->target; -} - -void QmlAbstractAnimation::setTarget(QObject *o) -{ - Q_D(QmlAbstractAnimation); - if (d->target == o) - return; - - d->target = o; - if (d->target && !d->propertyName.isEmpty()) { - d->userProperty = d->createProperty(d->target, d->propertyName, this); - } else { - d->userProperty.invalidate(); - } - - emit targetChanged(d->target, d->propertyName); -} - -QString QmlAbstractAnimation::property() const -{ - Q_D(const QmlAbstractAnimation); - return d->propertyName; -} - -void QmlAbstractAnimation::setProperty(const QString &n) -{ - Q_D(QmlAbstractAnimation); - if (d->propertyName == n) - return; - - d->propertyName = n; - if (d->target && !d->propertyName.isEmpty()) { - d->userProperty = d->createProperty(d->target, d->propertyName, this); - } else { - d->userProperty.invalidate(); - } - - emit targetChanged(d->target, d->propertyName); -} - /*! \qmlmethod Animation::start() \brief Starts the animation. @@ -886,6 +842,28 @@ void QmlPropertyActionPrivate::init() is being used. Refer to the \l animation documentation for details. */ +QObject *QmlPropertyAction::target() const +{ + Q_D(const QmlPropertyAction); + return d->target; +} + +void QmlPropertyAction::setTarget(QObject *o) +{ + Q_D(QmlPropertyAction); + if (d->target == o) + return; + + d->target = o; + if (d->target && !d->propertyName.isEmpty()) { + d->userProperty = d->createProperty(d->target, d->propertyName, this); + } else { + d->userProperty.invalidate(); + } + + emit targetChanged(d->target, d->propertyName); +} + /*! \qmlproperty string PropertyAction::property This property holds an explicit property to animated. @@ -894,6 +872,28 @@ void QmlPropertyActionPrivate::init() is being used. Refer to the \l animation documentation for details. */ +QString QmlPropertyAction::property() const +{ + Q_D(const QmlPropertyAction); + return d->propertyName; +} + +void QmlPropertyAction::setProperty(const QString &n) +{ + Q_D(QmlPropertyAction); + if (d->propertyName == n) + return; + + d->propertyName = n; + if (d->target && !d->propertyName.isEmpty()) { + d->userProperty = d->createProperty(d->target, d->propertyName, this); + } else { + d->userProperty.invalidate(); + } + + emit targetChanged(d->target, d->propertyName); +} + /*! \qmlproperty string PropertyAction::matchProperties This property holds a comma-separated list of property names this action @@ -1445,10 +1445,10 @@ void QmlSequentialAnimation::transition(QmlStateActions &actions, } //needed for Behavior - if (d->userProperty.isValid() && d->propertyName.isEmpty() && !target()) { + if (d->userProperty.isValid()) { for (int i = 0; i < d->animations.count(); ++i) d->animations.at(i)->setTarget(d->userProperty); - } + } for (int ii = from; ii < d->animations.count() && ii >= 0; ii += inc) { d->animations.at(ii)->transition(actions, modified, direction); @@ -1517,7 +1517,7 @@ void QmlParallelAnimation::transition(QmlStateActions &actions, Q_D(QmlAnimationGroup); //needed for Behavior - if (d->userProperty.isValid() && d->propertyName.isEmpty() && !target()) { + if (d->userProperty.isValid()) { for (int i = 0; i < d->animations.count(); ++i) d->animations.at(i)->setTarget(d->userProperty); } @@ -1881,6 +1881,28 @@ void QmlPropertyAnimation::setEasing(const QString &e) \sa property matchTargets */ +QObject *QmlPropertyAnimation::target() const +{ + Q_D(const QmlPropertyAnimation); + return d->target; +} + +void QmlPropertyAnimation::setTarget(QObject *o) +{ + Q_D(QmlPropertyAnimation); + if (d->target == o) + return; + + d->target = o; + if (d->target && !d->propertyName.isEmpty()) { + d->userProperty = d->createProperty(d->target, d->propertyName, this); + } else { + d->userProperty.invalidate(); + } + + emit targetChanged(d->target, d->propertyName); +} + /*! \qmlproperty string PropertyAnimation::property This property holds an explicit property name to animate. @@ -1891,6 +1913,28 @@ void QmlPropertyAnimation::setEasing(const QString &e) \sa target matchProperties */ +QString QmlPropertyAnimation::property() const +{ + Q_D(const QmlPropertyAnimation); + return d->propertyName; +} + +void QmlPropertyAnimation::setProperty(const QString &n) +{ + Q_D(QmlPropertyAnimation); + if (d->propertyName == n) + return; + + d->propertyName = n; + if (d->target && !d->propertyName.isEmpty()) { + d->userProperty = d->createProperty(d->target, d->propertyName, this); + } else { + d->userProperty.invalidate(); + } + + emit targetChanged(d->target, d->propertyName); +} + /*! \qmlproperty string PropertyAnimation::matchProperties This property holds a comma-separated list of property names this animation diff --git a/src/declarative/util/qmlanimation_p.h b/src/declarative/util/qmlanimation_p.h index 707ed33..322f048 100644 --- a/src/declarative/util/qmlanimation_p.h +++ b/src/declarative/util/qmlanimation_p.h @@ -94,12 +94,6 @@ public: QmlAnimationGroup *group() const; void setGroup(QmlAnimationGroup *); - //### these belong at a lower level in the hierarchy - QObject *target() const; - void setTarget(QObject *); - QString property() const; - void setProperty(const QString &); - virtual void setTarget(const QmlMetaProperty &); void classBegin(); @@ -111,7 +105,6 @@ Q_SIGNALS: void runningChanged(bool); void pausedChanged(bool); void repeatChanged(bool); - void targetChanged(QObject *, const QString &); void alwaysRunToEndChanged(bool); public Q_SLOTS: @@ -202,6 +195,12 @@ public: QmlPropertyAction(QObject *parent=0); virtual ~QmlPropertyAction(); + QObject *target() const; + void setTarget(QObject *); + + QString property() const; + void setProperty(const QString &); + QString properties() const; void setProperties(const QString &); @@ -214,6 +213,7 @@ public: Q_SIGNALS: void valueChanged(const QVariant &); void propertiesChanged(const QString &); + void targetChanged(QObject *, const QString &); protected: virtual void transition(QmlStateActions &actions, @@ -286,6 +286,12 @@ public: QString easing() const; void setEasing(const QString &); + QObject *target() const; + void setTarget(QObject *); + + QString property() const; + void setProperty(const QString &); + QString properties() const; void setProperties(const QString &); @@ -305,6 +311,7 @@ Q_SIGNALS: void toChanged(QVariant); void easingChanged(const QString &); void propertiesChanged(const QString &); + void targetChanged(QObject *, const QString &); }; class Q_AUTOTEST_EXPORT QmlColorAnimation : public QmlPropertyAnimation diff --git a/src/declarative/util/qmlanimation_p_p.h b/src/declarative/util/qmlanimation_p_p.h index 71fa9a3..fbd7114 100644 --- a/src/declarative/util/qmlanimation_p_p.h +++ b/src/declarative/util/qmlanimation_p_p.h @@ -203,7 +203,7 @@ public: QmlAbstractAnimationPrivate() : running(false), paused(false), alwaysRunToEnd(false), repeat(false), connectedTimeLine(false), componentComplete(true), startOnCompletion(false), - target(0), group(0) {} + group(0) {} bool running:1; bool paused:1; @@ -217,8 +217,6 @@ public: void commence(); QmlNullableValue userProperty; - QObject *target; - QString propertyName; QmlMetaProperty property; QmlAnimationGroup *group; @@ -264,10 +262,12 @@ class QmlPropertyActionPrivate : public QmlAbstractAnimationPrivate Q_DECLARE_PUBLIC(QmlPropertyAction) public: QmlPropertyActionPrivate() - : QmlAbstractAnimationPrivate(), proxy(this), spa(0) {} + : QmlAbstractAnimationPrivate(), target(0), proxy(this), spa(0) {} void init(); + QObject *target; + QString propertyName; QString properties; QList targets; QList exclude; @@ -342,7 +342,7 @@ class QmlPropertyAnimationPrivate : public QmlAbstractAnimationPrivate Q_DECLARE_PUBLIC(QmlPropertyAnimation) public: QmlPropertyAnimationPrivate() - : QmlAbstractAnimationPrivate(), fromSourced(false), fromIsDefined(false), toIsDefined(false), + : QmlAbstractAnimationPrivate(), target(0), fromSourced(false), fromIsDefined(false), toIsDefined(false), rangeIsSet(false), defaultToInterpolatorType(0), interpolatorType(0), interpolator(0), va(0), value(this, &QmlPropertyAnimationPrivate::valueChanged) {} @@ -353,6 +353,8 @@ public: QString easing; + QObject *target; + QString propertyName; QString properties; QList targets; QList exclude; -- cgit v0.12 From 856b2cb8cdd0a5493f555b3d622fb819af9d826d Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 7 Dec 2009 13:49:29 +1000 Subject: Fix spurious logging problems. (printf patterns would be expanded!) --- src/declarative/qml/qmlengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 2aecfed..8258bcb 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -910,7 +910,7 @@ QScriptValue QmlEnginePrivate::consoleLog(QScriptContext *ctxt, QScriptEngine *e // does just ignore the format letter, which makes it pointless. } - qDebug(msg.constData()); + qDebug("%s",msg.constData()); return e->newVariant(QVariant(true)); } -- cgit v0.12