diff options
Diffstat (limited to 'src/declarative/qml')
42 files changed, 213 insertions, 281 deletions
diff --git a/src/declarative/qml/qml.h b/src/declarative/qml/qml.h index bb7ae24..2c03aad 100644 --- a/src/declarative/qml/qml.h +++ b/src/declarative/qml/qml.h @@ -46,11 +46,11 @@ #include <QtCore/qstringlist.h> #include <QtCore/qurl.h> #include <QtCore/qmetaobject.h> -#include <QtDeclarative/qmlmetatype.h> -#include <QtDeclarative/qmlmetaproperty.h> -#include <QtDeclarative/qmlparserstatus.h> -#include <QtDeclarative/qmlpropertyvaluesource.h> -#include <QtDeclarative/qmllist.h> +#include <qmlmetatype.h> +#include <qmlmetaproperty.h> +#include <qmlparserstatus.h> +#include <qmlpropertyvaluesource.h> +#include <qmllist.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlbinding.cpp b/src/declarative/qml/qmlbinding.cpp index b0a4d6e..ef92308 100644 --- a/src/declarative/qml/qmlbinding.cpp +++ b/src/declarative/qml/qmlbinding.cpp @@ -175,7 +175,18 @@ void QmlBinding::update(QmlMetaProperty::WriteFlags flags) bool isUndefined = false; QVariant value = this->value(&isUndefined); - if (!isUndefined && data->property.object() && + if (isUndefined && !data->error.isValid()) { + + QUrl url = data->url; + int line = data->line; + if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>")); + + data->error.setUrl(url); + data->error.setLine(line); + data->error.setColumn(-1); + data->error.setDescription(QLatin1String("Unable to assign [undefined] to ") + QLatin1String(QMetaType::typeName(data->property.propertyType()))); + + } else if (!isUndefined && data->property.object() && !data->property.write(value, flags)) { QUrl url = data->url; diff --git a/src/declarative/qml/qmlbinding.h b/src/declarative/qml/qmlbinding.h index 8814e77..8fbe441 100644 --- a/src/declarative/qml/qmlbinding.h +++ b/src/declarative/qml/qmlbinding.h @@ -43,9 +43,9 @@ #define QMLBINDING_H #include <QtCore/QObject> -#include <QtDeclarative/qml.h> -#include <QtDeclarative/qmlpropertyvaluesource.h> -#include <QtDeclarative/qmlexpression.h> +#include <qml.h> +#include <qmlpropertyvaluesource.h> +#include <qmlexpression.h> #include <QtCore/QMetaProperty> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlbinding_p.h b/src/declarative/qml/qmlbinding_p.h index e4de239..30a31ab 100644 --- a/src/declarative/qml/qmlbinding_p.h +++ b/src/declarative/qml/qmlbinding_p.h @@ -53,8 +53,8 @@ // We mean it. // -#include <QtDeclarative/qmlbinding.h> -#include <QtDeclarative/qmlmetaproperty.h> +#include <qmlbinding.h> +#include <qmlmetaproperty.h> #include "qmlexpression_p.h" QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlbindingoptimizations_p.h b/src/declarative/qml/qmlbindingoptimizations_p.h index 5a00eb2..2cdc07d 100644 --- a/src/declarative/qml/qmlbindingoptimizations_p.h +++ b/src/declarative/qml/qmlbindingoptimizations_p.h @@ -54,7 +54,7 @@ // #include <private/qmlexpression_p.h> -#include <QtDeclarative/qmlbinding.h> +#include <qmlbinding.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlboundsignal_p.h b/src/declarative/qml/qmlboundsignal_p.h index 35679fd..e801892 100644 --- a/src/declarative/qml/qmlboundsignal_p.h +++ b/src/declarative/qml/qmlboundsignal_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QtDeclarative/qmlexpression.h> +#include <qmlexpression.h> #include <private/qobject_p.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index 8e92eb4..2cb44a3 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -69,7 +69,7 @@ #include <private/qmlexpression_p.h> #include "qmlmetaproperty_p.h" #include "qmlrewrite_p.h" -#include <QtDeclarative/qmlscriptstring.h> +#include <qmlscriptstring.h> #include <private/qmlglobal_p.h> #include "qmlscriptparser_p.h" @@ -2340,6 +2340,7 @@ bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder, QByteArray typeName; int propIdx = -1; + int flags = 0; bool writable = false; if (alias.count() == 2) { propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData()); @@ -2359,8 +2360,12 @@ bool QmlCompiler::compileAlias(QMetaObjectBuilder &builder, typeName += "*"; } + if (typeName.endsWith('*')) + flags |= QML_ALIAS_FLAG_PTR; + data.append((const char *)&idObject->idIndex, sizeof(idObject->idIndex)); data.append((const char *)&propIdx, sizeof(propIdx)); + data.append((const char *)&flags, sizeof(flags)); builder.addSignal(prop.name + "Changed()"); QMetaPropertyBuilder propBuilder = diff --git a/src/declarative/qml/qmlcompiler_p.h b/src/declarative/qml/qmlcompiler_p.h index 51c165e..8f28ac9 100644 --- a/src/declarative/qml/qmlcompiler_p.h +++ b/src/declarative/qml/qmlcompiler_p.h @@ -55,8 +55,8 @@ #include <QtCore/qbytearray.h> #include <QtCore/qset.h> -#include <QtDeclarative/qml.h> -#include <QtDeclarative/qmlerror.h> +#include <qml.h> +#include <qmlerror.h> #include <private/qmlinstruction_p.h> #include <private/qmlcompositetypemanager_p.h> #include <private/qmlparser_p.h> diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index 3c142a7..e31a1b5 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -236,7 +236,9 @@ QmlComponent::Status QmlComponent::status() const } /*! - Returns true if the component is in the Null state, false otherwise. + \property QmlComponent::isNull + + Is true if the component is in the Null state, false otherwise. Equivalent to status() == QmlComponent::Null. */ @@ -246,7 +248,9 @@ bool QmlComponent::isNull() const } /*! - Returns true if the component is in the Ready state, false otherwise. + \property QmlComponent::isReady + + Is true if the component is in the Ready state, false otherwise. Equivalent to status() == QmlComponent::Ready. */ @@ -256,7 +260,9 @@ bool QmlComponent::isReady() const } /*! - Returns true if the component is in the Error state, false otherwise. + \property QmlComponent::isError + + Is true if the component is in the Error state, false otherwise. Equivalent to status() == QmlComponent::Error. */ @@ -266,7 +272,9 @@ bool QmlComponent::isError() const } /*! - Returns true if the component is in the Loading state, false otherwise. + \property QmlComponent::isLoading + + Is true if the component is in the Loading state, false otherwise. Equivalent to status() == QmlComponent::Loading. */ diff --git a/src/declarative/qml/qmlcomponent.h b/src/declarative/qml/qmlcomponent.h index bfb4d53..835bdc5 100644 --- a/src/declarative/qml/qmlcomponent.h +++ b/src/declarative/qml/qmlcomponent.h @@ -45,8 +45,8 @@ #include <QtCore/qobject.h> #include <QtCore/qstring.h> #include <QtScript/qscriptvalue.h> -#include <QtDeclarative/qml.h> -#include <QtDeclarative/qmlerror.h> +#include <qml.h> +#include <qmlerror.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlcomponent_p.h b/src/declarative/qml/qmlcomponent_p.h index e69f541..61a8a10 100644 --- a/src/declarative/qml/qmlcomponent_p.h +++ b/src/declarative/qml/qmlcomponent_p.h @@ -60,9 +60,9 @@ #include <private/qmlengine_p.h> #include <private/qmlcompositetypemanager_p.h> #include <private/qbitfield_p.h> -#include <QtDeclarative/qmlerror.h> -#include <QtDeclarative/qmlcomponent.h> -#include <QtDeclarative/qml.h> +#include <qmlerror.h> +#include <qmlcomponent.h> +#include <qml.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp index 3c4982b..7dbe788 100644 --- a/src/declarative/qml/qmlcompositetypemanager.cpp +++ b/src/declarative/qml/qmlcompositetypemanager.cpp @@ -42,12 +42,12 @@ #include <private/qmlcompositetypedata_p.h> #include <private/qmlcompositetypemanager_p.h> #include <private/qmlscriptparser_p.h> -#include <QtDeclarative/qmlengine.h> +#include <qmlengine.h> #include <QtNetwork/qnetworkreply.h> #include <private/qmlengine_p.h> #include <QtCore/qdebug.h> #include <QtCore/qfile.h> -#include <QtDeclarative/qmlcomponent.h> +#include <qmlcomponent.h> #include <private/qmlcomponent_p.h> #include <private/qmlcompiler_p.h> diff --git a/src/declarative/qml/qmlcompositetypemanager_p.h b/src/declarative/qml/qmlcompositetypemanager_p.h index af028df..0abbfb5 100644 --- a/src/declarative/qml/qmlcompositetypemanager_p.h +++ b/src/declarative/qml/qmlcompositetypemanager_p.h @@ -56,8 +56,8 @@ #include <QtCore/qglobal.h> #include <private/qmlscriptparser_p.h> #include <private/qmlrefcount_p.h> -#include <QtDeclarative/qmlerror.h> -#include <QtDeclarative/qmlengine.h> +#include <qmlerror.h> +#include <qmlengine.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp index 105c673..42f467b 100644 --- a/src/declarative/qml/qmlcontext.cpp +++ b/src/declarative/qml/qmlcontext.cpp @@ -49,7 +49,7 @@ #include <QtCore/qdebug.h> #include <private/qmlbindingoptimizations_p.h> #include <private/qscriptdeclarativeclass_p.h> -#include <QtDeclarative/qmlinfo.h> +#include <qmlinfo.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlcontext_p.h b/src/declarative/qml/qmlcontext_p.h index 22d981f..a9c25a3 100644 --- a/src/declarative/qml/qmlcontext_p.h +++ b/src/declarative/qml/qmlcontext_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QtDeclarative/qmlcontext.h> +#include <qmlcontext.h> #include <private/qobject_p.h> #include <private/qmldeclarativedata_p.h> #include <QtCore/qhash.h> diff --git a/src/declarative/qml/qmlcustomparser_p.h b/src/declarative/qml/qmlcustomparser_p.h index 74bed25..88a264f 100644 --- a/src/declarative/qml/qmlcustomparser_p.h +++ b/src/declarative/qml/qmlcustomparser_p.h @@ -55,8 +55,8 @@ #include <QtCore/qbytearray.h> #include <QtCore/qxmlstream.h> -#include <QtDeclarative/qmlmetatype.h> -#include <QtDeclarative/qmlerror.h> +#include <qmlmetatype.h> +#include <qmlerror.h> #include <private/qmlparser_p.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmldom.cpp b/src/declarative/qml/qmldom.cpp index 39d6730..f4a137c 100644 --- a/src/declarative/qml/qmldom.cpp +++ b/src/declarative/qml/qmldom.cpp @@ -57,13 +57,6 @@ QmlDomDocumentPrivate::QmlDomDocumentPrivate() { } -QmlDomDocumentPrivate::QmlDomDocumentPrivate(const QmlDomDocumentPrivate &other) -: QSharedData(other), root(0) -{ - root = other.root; - if (root) root->addref(); -} - QmlDomDocumentPrivate::~QmlDomDocumentPrivate() { if (root) root->release(); @@ -141,7 +134,7 @@ QList<QmlDomImport> QmlDomDocument::imports() const /*! Loads a QmlDomDocument from \a data. \a data should be valid QML data. On success, true is returned. If the \a data is malformed, false - is returned and QmlDomDocument::loadError() contains an error description. + is returned and QmlDomDocument::errors() contains an error description. \sa QmlDomDocument::loadError() */ @@ -160,7 +153,8 @@ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data, const QUrl td->release(); component->release(); return false; - } else if(td->status == QmlCompositeTypeData::Waiting) { + } else if(td->status == QmlCompositeTypeData::Waiting || + td->status == QmlCompositeTypeData::WaitingResources) { QmlError error; error.setDescription(QLatin1String("QmlDomDocument supports local types only")); d->errors << error; @@ -234,13 +228,6 @@ QmlDomPropertyPrivate::QmlDomPropertyPrivate() { } -QmlDomPropertyPrivate::QmlDomPropertyPrivate(const QmlDomPropertyPrivate &other) -: QSharedData(other), property(0) -{ - property = other.property; - if (property) property->addref(); -} - QmlDomPropertyPrivate::~QmlDomPropertyPrivate() { if (property) property->release(); @@ -251,13 +238,6 @@ QmlDomDynamicPropertyPrivate::QmlDomDynamicPropertyPrivate(): { } -QmlDomDynamicPropertyPrivate::QmlDomDynamicPropertyPrivate(const QmlDomDynamicPropertyPrivate &other) -: QSharedData(other), valid(other.valid) -{ - property = other.property; - if (valid && property.defaultValue) property.defaultValue->addref(); -} - QmlDomDynamicPropertyPrivate::~QmlDomDynamicPropertyPrivate() { if (valid && property.defaultValue) property.defaultValue->release(); @@ -307,6 +287,15 @@ QmlDomProperty &QmlDomProperty::operator=(const QmlDomProperty &other) } /*! + Returns true if this is a valid QmlDomProperty, false otherwise. +*/ +bool QmlDomProperty::isValid() const +{ + return d->property != 0; +} + + +/*! Return the name of this property. \qml @@ -482,7 +471,7 @@ int QmlDomDynamicProperty::propertyType() const return QMetaType::type("QColor"); case QmlParser::Object::DynamicProperty::Date: - return QMetaType::type("QDateTime"); + return QMetaType::type("QDate"); case QmlParser::Object::DynamicProperty::Int: return QMetaType::type("int"); @@ -507,6 +496,14 @@ int QmlDomDynamicProperty::propertyType() const return -1; } +QByteArray QmlDomDynamicProperty::propertyTypeName() const +{ + if (isValid()) + return d->property.customType; + + return QByteArray(); +} + /*! Return true if this property is used as a default property in the QML document. @@ -539,6 +536,7 @@ QmlDomProperty QmlDomDynamicProperty::defaultValue() const if (isValid() && d->property.defaultValue) { rp.d->property = d->property.defaultValue; + rp.d->propertyName = propertyName(); rp.d->property->addref(); } @@ -570,18 +568,10 @@ int QmlDomDynamicProperty::length() const } QmlDomObjectPrivate::QmlDomObjectPrivate() -: object(0), isVirtualComponent(false) +: object(0) { } -QmlDomObjectPrivate::QmlDomObjectPrivate(const QmlDomObjectPrivate &other) -: QSharedData(other), object(0), isVirtualComponent(false) -{ - object = other.object; - if (object) object->addref(); - isVirtualComponent = other.isVirtualComponent; -} - QmlDomObjectPrivate::~QmlDomObjectPrivate() { if (object) object->release(); @@ -665,16 +655,6 @@ QmlDomObject::QmlDomObject() } /*! - Construct a new QmlDomObject with the specified \a objectType. -*/ -QmlDomObject::QmlDomObject(const QByteArray &objectType) -: d(new QmlDomObjectPrivate) -{ - Q_UNUSED(objectType); - qWarning("QmlDomObject::QmlDomObject(const QByteArray &): Not implemented"); -} - -/*! Create a copy of \a other QmlDomObject. */ QmlDomObject::QmlDomObject(const QmlDomObject &other) @@ -785,7 +765,7 @@ QList<QmlDomProperty> QmlDomObject::properties() const { QList<QmlDomProperty> rv; - if (!d->object) + if (!d->object || isComponent()) return rv; QmlDomObjectPrivate::Properties properties = d->properties(); @@ -853,6 +833,9 @@ QmlDomDynamicProperty QmlDomObject::dynamicProperty(const QByteArray &name) cons { QmlDomDynamicProperty p; + if (!isValid()) + return p; + for (int i = 0; i < d->object->dynamicProperties.size(); ++i) { if (d->object->dynamicProperties.at(i).name == name) { p.d = new QmlDomDynamicPropertyPrivate; @@ -900,8 +883,7 @@ QByteArray QmlDomObject::customTypeData() const */ bool QmlDomObject::isComponent() const { - return d->isVirtualComponent || - (d->object && d->object->typeName == "Qt/Component"); + return (d->object && d->object->typeName == "Qt/Component"); } /*! @@ -958,13 +940,6 @@ QmlDomBasicValuePrivate::QmlDomBasicValuePrivate() { } -QmlDomBasicValuePrivate::QmlDomBasicValuePrivate(const QmlDomBasicValuePrivate &other) -: QSharedData(other), value(0) -{ - value = other.value; - if (value) value->addref(); -} - QmlDomBasicValuePrivate::~QmlDomBasicValuePrivate() { if (value) value->release(); @@ -1250,15 +1225,6 @@ QmlDomValuePrivate::QmlDomValuePrivate() { } -QmlDomValuePrivate::QmlDomValuePrivate(const QmlDomValuePrivate &other) -: QSharedData(other), property(0), value(0) -{ - property = other.property; - value = other.value; - if (property) property->addref(); - if (value) value->addref(); -} - QmlDomValuePrivate::~QmlDomValuePrivate() { if (property) property->release(); @@ -1754,10 +1720,7 @@ Item { QmlDomObject QmlDomComponent::componentRoot() const { QmlDomObject rv; - if (d->isVirtualComponent) { - rv.d->object = d->object; - rv.d->object->addref(); - } else if (d->object) { + if (d->object) { QmlParser::Object *obj = 0; if (d->object->defaultProperty && d->object->defaultProperty->values.count() == 1 && @@ -1778,11 +1741,6 @@ QmlDomImportPrivate::QmlDomImportPrivate() { } -QmlDomImportPrivate::QmlDomImportPrivate(const QmlDomImportPrivate &other) -: QSharedData(other) -{ -} - QmlDomImportPrivate::~QmlDomImportPrivate() { } diff --git a/src/declarative/qml/qmldom.h b/src/declarative/qml/qmldom.h index 8c43c4a..ad28d0d 100644 --- a/src/declarative/qml/qmldom.h +++ b/src/declarative/qml/qmldom.h @@ -44,7 +44,7 @@ #include <QtCore/qlist.h> #include <QtCore/qshareddata.h> -#include <QtDeclarative/qmlerror.h> +#include <qmlerror.h> QT_BEGIN_HEADER @@ -92,6 +92,8 @@ public: ~QmlDomProperty(); QmlDomProperty &operator=(const QmlDomProperty &); + bool isValid() const; + QByteArray propertyName() const; QList<QByteArray> propertyNameParts() const; @@ -121,6 +123,7 @@ public: QByteArray propertyName() const; int propertyType() const; + QByteArray propertyTypeName() const; bool isDefaultProperty() const; @@ -139,7 +142,6 @@ class Q_DECLARATIVE_EXPORT QmlDomObject { public: QmlDomObject(); - QmlDomObject(const QByteArray &); QmlDomObject(const QmlDomObject &); ~QmlDomObject(); QmlDomObject &operator=(const QmlDomObject &); diff --git a/src/declarative/qml/qmldom_p.h b/src/declarative/qml/qmldom_p.h index 4b4de80..cb0d884 100644 --- a/src/declarative/qml/qmldom_p.h +++ b/src/declarative/qml/qmldom_p.h @@ -62,7 +62,8 @@ class QmlDomDocumentPrivate : public QSharedData { public: QmlDomDocumentPrivate(); - QmlDomDocumentPrivate(const QmlDomDocumentPrivate &); + QmlDomDocumentPrivate(const QmlDomDocumentPrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomDocumentPrivate(); QList<QmlError> errors; @@ -75,7 +76,8 @@ class QmlDomObjectPrivate : public QSharedData { public: QmlDomObjectPrivate(); - QmlDomObjectPrivate(const QmlDomObjectPrivate &); + QmlDomObjectPrivate(const QmlDomObjectPrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomObjectPrivate(); typedef QList<QPair<QmlParser::Property *, QByteArray> > Properties; @@ -83,14 +85,14 @@ public: Properties properties(QmlParser::Property *) const; QmlParser::Object *object; - bool isVirtualComponent; }; class QmlDomPropertyPrivate : public QSharedData { public: QmlDomPropertyPrivate(); - QmlDomPropertyPrivate(const QmlDomPropertyPrivate &); + QmlDomPropertyPrivate(const QmlDomPropertyPrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomPropertyPrivate(); QByteArray propertyName; @@ -101,7 +103,8 @@ class QmlDomDynamicPropertyPrivate : public QSharedData { public: QmlDomDynamicPropertyPrivate(); - QmlDomDynamicPropertyPrivate(const QmlDomDynamicPropertyPrivate &); + QmlDomDynamicPropertyPrivate(const QmlDomDynamicPropertyPrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomDynamicPropertyPrivate(); bool valid; @@ -112,7 +115,8 @@ class QmlDomValuePrivate : public QSharedData { public: QmlDomValuePrivate(); - QmlDomValuePrivate(const QmlDomValuePrivate &); + QmlDomValuePrivate(const QmlDomValuePrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomValuePrivate(); QmlParser::Property *property; @@ -123,7 +127,8 @@ class QmlDomBasicValuePrivate : public QSharedData { public: QmlDomBasicValuePrivate(); - QmlDomBasicValuePrivate(const QmlDomBasicValuePrivate &); + QmlDomBasicValuePrivate(const QmlDomBasicValuePrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomBasicValuePrivate(); QmlParser::Value *value; @@ -133,7 +138,8 @@ class QmlDomImportPrivate : public QSharedData { public: QmlDomImportPrivate(); - QmlDomImportPrivate(const QmlDomImportPrivate &); + QmlDomImportPrivate(const QmlDomImportPrivate &o) + : QSharedData(o) { qFatal("Not impl"); } ~QmlDomImportPrivate(); enum Type { Library, File }; diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 177818f..b6f3bde 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -86,8 +86,9 @@ #include <private/qmlsqldatabase_p.h> #include <private/qmltypenamescriptclass_p.h> #include <private/qmllistscriptclass_p.h> -#include <QtDeclarative/qmlscriptstring.h> +#include <qmlscriptstring.h> #include <private/qmlglobal_p.h> +#include <QtCore/qcryptographichash.h> #ifdef Q_OS_WIN // for %APPDATA% #include "qt_windows.h" @@ -150,6 +151,7 @@ QmlEnginePrivate::QmlEnginePrivate(QmlEngine *e) 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)); scriptEngine.globalObject().setProperty(QLatin1String("createQmlObject"), scriptEngine.newFunction(QmlEnginePrivate::createQmlObject, 1)); @@ -816,6 +818,18 @@ QScriptValue QmlEnginePrivate::desktopOpenUrl(QScriptContext *ctxt, QScriptEngin return e->newVariant(QVariant(ret)); } +QScriptValue QmlEnginePrivate::md5(QScriptContext *ctxt, QScriptEngine *e) +{ + QByteArray data; + + if (ctxt->argumentCount() >= 1) + data = ctxt->argument(0).toString().toUtf8(); + + QByteArray result = QCryptographicHash::hash(data, QCryptographicHash::Md5); + + return QScriptValue(QLatin1String(result.toHex())); +} + QScriptValue QmlEnginePrivate::closestAngle(QScriptContext *ctxt, QScriptEngine *e) { if(ctxt->argumentCount() < 2) @@ -1140,7 +1154,7 @@ QmlEnginePrivate::Imports::~Imports() delete d; } -#include <QtDeclarative/qmlmetatype.h> +#include <qmlmetatype.h> #include <private/qmltypenamecache_p.h> static QmlTypeNameCache *cacheForNamespace(QmlEngine *engine, const QmlEnginePrivate::ImportedNamespace &set, QmlTypeNameCache *cache) { diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h index 3c60b5c..2e880bb 100644 --- a/src/declarative/qml/qmlengine_p.h +++ b/src/declarative/qml/qmlengine_p.h @@ -64,12 +64,12 @@ #include <private/qmlclassfactory_p.h> #include <private/qmlcompositetypemanager_p.h> #include <private/qpodvector_p.h> -#include <QtDeclarative/qml.h> +#include <qml.h> #include <private/qmlbasicscript_p.h> #include <private/qmlvaluetype_p.h> -#include <QtDeclarative/qmlcontext.h> -#include <QtDeclarative/qmlengine.h> -#include <QtDeclarative/qmlexpression.h> +#include <qmlcontext.h> +#include <qmlengine.h> +#include <qmlexpression.h> #include <QtScript/qscriptengine.h> #include <private/qmlmetaproperty_p.h> #include <private/qmlpropertycache_p.h> @@ -272,6 +272,7 @@ public: static QScriptValue closestAngle(QScriptContext*, QScriptEngine*); static QScriptValue playSound(QScriptContext*, QScriptEngine*); static QScriptValue desktopOpenUrl(QScriptContext*, QScriptEngine*); + static QScriptValue md5(QScriptContext*, QScriptEngine*); static QScriptEngine *getScriptEngine(QmlEngine *e) { return &e->d_func()->scriptEngine; } static QmlEngine *getEngine(QScriptEngine *e) { return static_cast<QmlScriptEngine*>(e)->p->q_func(); } diff --git a/src/declarative/qml/qmlenginedebug.cpp b/src/declarative/qml/qmlenginedebug.cpp index 7e09fe6..6871236 100644 --- a/src/declarative/qml/qmlenginedebug.cpp +++ b/src/declarative/qml/qmlenginedebug.cpp @@ -43,8 +43,8 @@ #include "qmlboundsignal_p.h" #include <QtCore/qdebug.h> #include <QtCore/qmetaobject.h> -#include <QtDeclarative/qmlengine.h> -#include <QtDeclarative/qmlmetatype.h> +#include <qmlengine.h> +#include <qmlmetatype.h> #include <qmlmetaproperty.h> #include <qmlbinding.h> #include "qmlcontext_p.h" diff --git a/src/declarative/qml/qmlexpression.h b/src/declarative/qml/qmlexpression.h index 9b123be..cbea58a 100644 --- a/src/declarative/qml/qmlexpression.h +++ b/src/declarative/qml/qmlexpression.h @@ -44,7 +44,7 @@ #include <QtCore/qobject.h> #include <QtCore/qvariant.h> -#include <QtDeclarative/qmlerror.h> +#include <qmlerror.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlinfo.cpp b/src/declarative/qml/qmlinfo.cpp index 9a19b80..bbd6022 100644 --- a/src/declarative/qml/qmlinfo.cpp +++ b/src/declarative/qml/qmlinfo.cpp @@ -41,13 +41,13 @@ #include "qmlinfo.h" #include <private/qmldeclarativedata_p.h> -#include <QtDeclarative/qmlcontext.h> +#include <qmlcontext.h> #include <QtGui/qapplication.h> QT_BEGIN_NAMESPACE /*! - \fn void qmlInfo(const QString& message, const QObject *object) + \fn QmlInfo qmlInfo(const QObject *object) \brief Prints warnings messages that include the file and line number for QML types. diff --git a/src/declarative/qml/qmlintegercache.cpp b/src/declarative/qml/qmlintegercache.cpp index d1927b3..1103ef2 100644 --- a/src/declarative/qml/qmlintegercache.cpp +++ b/src/declarative/qml/qmlintegercache.cpp @@ -41,7 +41,7 @@ #include "qmlintegercache_p.h" #include <private/qmlengine_p.h> -#include <QtDeclarative/qmlmetatype.h> +#include <qmlmetatype.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmllist.h b/src/declarative/qml/qmllist.h index c631d9e..e51b078 100644 --- a/src/declarative/qml/qmllist.h +++ b/src/declarative/qml/qmllist.h @@ -42,7 +42,7 @@ #ifndef QMLLIST_H #define QMLLIST_H -#include <QtDeclarative/qmlprivate.h> +#include <qmlprivate.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlmetaproperty.cpp b/src/declarative/qml/qmlmetaproperty.cpp index 4ad9aac..8bde318 100644 --- a/src/declarative/qml/qmlmetaproperty.cpp +++ b/src/declarative/qml/qmlmetaproperty.cpp @@ -50,7 +50,7 @@ #include "qmlboundsignal_p.h" #include <math.h> #include <QtCore/qdebug.h> -#include <QtDeclarative/qmlengine.h> +#include <qmlengine.h> #include <private/qmlengine_p.h> #include <private/qmldeclarativedata_p.h> diff --git a/src/declarative/qml/qmlmetatype.h b/src/declarative/qml/qmlmetatype.h index 1f493f8..99d6743 100644 --- a/src/declarative/qml/qmlmetatype.h +++ b/src/declarative/qml/qmlmetatype.h @@ -45,10 +45,10 @@ #include <QtCore/qglobal.h> #include <QtCore/qvariant.h> #include <QtCore/qbitarray.h> -#include <QtDeclarative/qmlprivate.h> -#include <QtDeclarative/qmlparserstatus.h> -#include <QtDeclarative/qmlpropertyvaluesource.h> -#include <QtDeclarative/qmlpropertyvalueinterceptor.h> +#include <qmlprivate.h> +#include <qmlparserstatus.h> +#include <qmlpropertyvaluesource.h> +#include <qmlpropertyvalueinterceptor.h> QT_BEGIN_HEADER @@ -220,7 +220,7 @@ int qmlRegisterExtendedType(const char *typeName) attachedMo = QmlPrivate::attachedPropertiesMetaObject<T>(); } - return QmlMetaType::registerType(ids, QmlPrivate::list_nocreate_op<T>, 0, 0, 0, 0, 0, + return QmlMetaType::registerType(ids, QmlPrivate::list_nocreate_op<T>, 0, 0, 0, 0, &T::staticMetaObject, attached, attachedMo, QmlPrivate::StaticCastSelector<T,QmlParserStatus>::cast(), QmlPrivate::StaticCastSelector<T,QObject>::cast(), diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp index c5641e5..1a6f724 100644 --- a/src/declarative/qml/qmlobjectscriptclass.cpp +++ b/src/declarative/qml/qmlobjectscriptclass.cpp @@ -46,7 +46,7 @@ #include <private/qmldeclarativedata_p.h> #include <private/qmltypenamescriptclass_p.h> #include <private/qmllistscriptclass_p.h> -#include <QtDeclarative/qmlbinding.h> +#include <qmlbinding.h> #include <QtCore/qtimer.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h index 4f080e5..2ece51f 100644 --- a/src/declarative/qml/qmlparser_p.h +++ b/src/declarative/qml/qmlparser_p.h @@ -56,7 +56,7 @@ #include <QtCore/QByteArray> #include <QtCore/QList> #include <QtCore/qstring.h> -#include <QtDeclarative/qml.h> +#include <qml.h> #include <private/qmlrefcount_p.h> #include <private/qobject_p.h> diff --git a/src/declarative/qml/qmlpropertycache.cpp b/src/declarative/qml/qmlpropertycache.cpp index 339bdef..b7a5fad 100644 --- a/src/declarative/qml/qmlpropertycache.cpp +++ b/src/declarative/qml/qmlpropertycache.cpp @@ -41,7 +41,7 @@ #include "qmlpropertycache_p.h" #include <private/qmlengine_p.h> -#include <QtDeclarative/qmlbinding.h> +#include <qmlbinding.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlproxymetaobject_p.h b/src/declarative/qml/qmlproxymetaobject_p.h index 8ab3b6c..7f9163c 100644 --- a/src/declarative/qml/qmlproxymetaobject_p.h +++ b/src/declarative/qml/qmlproxymetaobject_p.h @@ -57,7 +57,7 @@ #include <QtCore/QObject> #include <private/qmetaobjectbuilder_p.h> #include <private/qobject_p.h> -#include <QtDeclarative/qml.h> +#include <qml.h> QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp index 526894e..b622c24 100644 --- a/src/declarative/qml/qmlscriptparser.cpp +++ b/src/declarative/qml/qmlscriptparser.cpp @@ -342,10 +342,17 @@ ProcessAST::defineObjectBinding_helper(AST::UiQualifiedId *propertyName, Value *v = new Value; v->object = obj; v->location = obj->location; - if (state.property) + if (state.property) { state.property->addValue(v); - else - state.object->getDefaultProperty()->addValue(v); + } else { + Property *defaultProp = state.object->getDefaultProperty(); + if (defaultProp->location.start.line == -1) { + defaultProp->location = v->location; + defaultProp->location.end = defaultProp->location.start; + defaultProp->location.range.length = 0; + } + defaultProp->addValue(v); + } } } @@ -583,8 +590,8 @@ bool ProcessAST::visit(AST::UiPublicMember *node) QmlScriptParser::TypeReference *typeRef = _parser->findOrCreateType(memberType); typeRef->refObjects.append(_stateStack.top().object); - property.customType = memberType.toUtf8(); } + property.customType = memberType.toUtf8(); property.name = name.toUtf8(); property.location = location(node->firstSourceLocation(), node->lastSourceLocation()); diff --git a/src/declarative/qml/qmlscriptparser_p.h b/src/declarative/qml/qmlscriptparser_p.h index d4cdeda..cb3e9e9 100644 --- a/src/declarative/qml/qmlscriptparser_p.h +++ b/src/declarative/qml/qmlscriptparser_p.h @@ -54,7 +54,7 @@ #include <QtCore/QList> #include <QtCore/QUrl> -#include <QtDeclarative/qmlerror.h> +#include <qmlerror.h> #include "qmlparser_p.h" QT_BEGIN_HEADER diff --git a/src/declarative/qml/qmlsqldatabase.cpp b/src/declarative/qml/qmlsqldatabase.cpp index 01d0590..c7d2e12 100644 --- a/src/declarative/qml/qmlsqldatabase.cpp +++ b/src/declarative/qml/qmlsqldatabase.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include <QtCore/qobject.h> -#include <QtDeclarative/qmlengine.h> +#include <qmlengine.h> #include <private/qmlengine_p.h> #include <QtScript/qscriptvalue.h> #include <QtScript/qscriptvalueiterator.h> diff --git a/src/declarative/qml/qmlvaluetype_p.h b/src/declarative/qml/qmlvaluetype_p.h index e7566f9..2af261d 100644 --- a/src/declarative/qml/qmlvaluetype_p.h +++ b/src/declarative/qml/qmlvaluetype_p.h @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE -class Q_AUTOTEST_EXPORT QmlValueType : public QObject +class Q_DECLARATIVE_EXPORT QmlValueType : public QObject { Q_OBJECT public: @@ -73,7 +73,7 @@ public: virtual void setValue(QVariant) = 0; }; -class Q_AUTOTEST_EXPORT QmlValueTypeFactory +class Q_DECLARATIVE_EXPORT QmlValueTypeFactory { public: QmlValueTypeFactory(); diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp index f3d0f65..da09288 100644 --- a/src/declarative/qml/qmlvme.cpp +++ b/src/declarative/qml/qmlvme.cpp @@ -67,7 +67,7 @@ #include <private/qmlbinding_p.h> #include <private/qmlcontext_p.h> #include <private/qmlbindingoptimizations_p.h> -#include <QtDeclarative/qmlscriptstring.h> +#include <qmlscriptstring.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlvme_p.h b/src/declarative/qml/qmlvme_p.h index ab58b6a..a15bd08 100644 --- a/src/declarative/qml/qmlvme_p.h +++ b/src/declarative/qml/qmlvme_p.h @@ -55,7 +55,7 @@ #include <QtCore/QString> #include <QtCore/QStack> -#include <QtDeclarative/qmlerror.h> +#include <qmlerror.h> #include <private/qbitfield_p.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp index 5315089..ed28d78 100644 --- a/src/declarative/qml/qmlvmemetaobject.cpp +++ b/src/declarative/qml/qmlvmemetaobject.cpp @@ -210,17 +210,18 @@ int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) if (id < metaData->aliasCount) { - if (!ctxt) return -1; QmlVMEMetaData::AliasData *d = metaData->aliasData() + id; + + if (d->flags & QML_ALIAS_FLAG_PTR && c == QMetaObject::ReadProperty) + *reinterpret_cast<void **>(a[0]) = 0; + + if (!ctxt) return -1; QmlContextPrivate *ctxtPriv = (QmlContextPrivate *)QObjectPrivate::get(ctxt); QObject *target = ctxtPriv->idValues[d->contextIdx].data(); - if (!target) { - if (d->propertyIdx == -1) - *reinterpret_cast<QObject **>(a[0]) = target; + if (!target) return -1; - } if (c == QMetaObject::ReadProperty && !aConnected.testBit(id)) { int sigIdx = methodOffset + id + metaData->propertyCount; diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h index 9262b19..f78cfaa 100644 --- a/src/declarative/qml/qmlvmemetaobject_p.h +++ b/src/declarative/qml/qmlvmemetaobject_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QtDeclarative/qml.h> +#include <qml.h> #include <QtCore/QMetaObject> #include <QtCore/QBitArray> #include <QtCore/QPair> @@ -61,6 +61,8 @@ QT_BEGIN_NAMESPACE +#define QML_ALIAS_FLAG_PTR 0x00000001 + struct QmlVMEMetaData { short propertyCount; @@ -71,6 +73,7 @@ struct QmlVMEMetaData struct AliasData { int contextIdx; int propertyIdx; + int flags; }; struct PropertyData { diff --git a/src/declarative/qml/qmlwatcher.cpp b/src/declarative/qml/qmlwatcher.cpp index 2737bf9..889ac78 100644 --- a/src/declarative/qml/qmlwatcher.cpp +++ b/src/declarative/qml/qmlwatcher.cpp @@ -41,10 +41,10 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qdebug.h> -#include <QtDeclarative/qmlexpression.h> +#include <qmlexpression.h> #include <private/qmldebugservice_p.h> -#include <QtDeclarative/qmlcontext.h> -#include <QtDeclarative/qml.h> +#include <qmlcontext.h> +#include <qml.h> #include "qmlwatcher_p.h" diff --git a/src/declarative/qml/qmlxmlhttprequest.cpp b/src/declarative/qml/qmlxmlhttprequest.cpp index a6cdfb1..848533c 100644 --- a/src/declarative/qml/qmlxmlhttprequest.cpp +++ b/src/declarative/qml/qmlxmlhttprequest.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include <QtCore/qobject.h> -#include <QtDeclarative/qmlengine.h> +#include <qmlengine.h> #include <private/qmlengine_p.h> #include <QtScript/qscriptvalue.h> #include <QtScript/qscriptcontext.h> @@ -131,10 +131,10 @@ public: QList<NodeImpl *> attributes; }; -class DocumentImpl : public QmlRefCount +class DocumentImpl : public NodeImpl { public: - DocumentImpl() : root(0) { } + DocumentImpl() : root(0) { type = Document; } virtual ~DocumentImpl() { if (root) D(root); } @@ -158,12 +158,13 @@ public: NamedNodeMap(); NamedNodeMap(const NamedNodeMap &); - NamedNodeMap &operator=(const NamedNodeMap &); ~NamedNodeMap(); bool isNull(); NodeImpl *d; QList<NodeImpl *> *list; +private: + NamedNodeMap &operator=(const NamedNodeMap &); }; class NamedNodeMapClass : public QScriptClass @@ -180,7 +181,6 @@ class NodeList public: // JS API static QScriptValue length(QScriptContext *context, QScriptEngine *engine); - static QScriptValue item(QScriptContext *context, QScriptEngine *engine); // C++ API static QScriptValue prototype(QScriptEngine *); @@ -188,11 +188,12 @@ public: NodeList(); NodeList(const NodeList &); - NodeList &operator=(const NodeList &); ~NodeList(); bool isNull(); NodeImpl *d; +private: + NodeList &operator=(const NodeList &); }; class NodeListClass : public QScriptClass @@ -232,11 +233,13 @@ public: Node(); Node(const Node &o); - Node &operator=(const Node &); ~Node(); bool isNull() const; NodeImpl *d; + +private: + Node &operator=(const Node &); }; class Element : public Node @@ -301,31 +304,29 @@ public: // C++ API static QScriptValue prototype(QScriptEngine *); static QScriptValue load(QScriptEngine *engine, const QString &data); - - Document(); - Document(const Document &); - Document &operator=(const Document &); - ~Document(); - bool isNull() const; - - DocumentImpl *d; -private: - Document(DocumentImpl *); }; -}; +}; // namespace Q_DECLARE_METATYPE(Node); Q_DECLARE_METATYPE(NodeList); Q_DECLARE_METATYPE(NamedNodeMap); -Q_DECLARE_METATYPE(Document); QScriptValue Node::nodeName(QScriptContext *context, QScriptEngine *engine) { Node node = qscriptvalue_cast<Node>(context->thisObject()); if (node.isNull()) return engine->undefinedValue(); - return QScriptValue(node.d->name); + switch (node.d->type) { + case NodeImpl::Document: + return QScriptValue(QLatin1String("#document")); + case NodeImpl::CDATA: + return QScriptValue(QLatin1String("#cdata-section")); + case NodeImpl::Text: + return QScriptValue(QLatin1String("#text")); + default: + return QScriptValue(node.d->name); + } } QScriptValue Node::nodeValue(QScriptContext *context, QScriptEngine *engine) @@ -465,12 +466,11 @@ QScriptValue Node::create(QScriptEngine *engine, NodeImpl *data) case NodeImpl::Entity: case NodeImpl::EntityReference: case NodeImpl::Notation: + case NodeImpl::ProcessingInstruction: + return QScriptValue(); case NodeImpl::CDATA: instance.setPrototype(CDATA::prototype(engine)); break; - case NodeImpl::ProcessingInstruction: - instance.setPrototype(Node::prototype(engine)); - break; case NodeImpl::Text: instance.setPrototype(Text::prototype(engine)); break; @@ -556,8 +556,7 @@ QScriptValue Text::isElementContentWhitespace(QScriptContext *context, QScriptEn Node node = qscriptvalue_cast<Node>(context->thisObject()); if (node.isNull()) return engine->undefinedValue(); - // ### implement - return QScriptValue(false); + return node.d->data.trimmed().isEmpty(); } QScriptValue Text::wholeText(QScriptContext *context, QScriptEngine *engine) @@ -565,8 +564,7 @@ QScriptValue Text::wholeText(QScriptContext *context, QScriptEngine *engine) Node node = qscriptvalue_cast<Node>(context->thisObject()); if (node.isNull()) return engine->undefinedValue(); - // ### implement - return QScriptValue(QString()); + return node.d->data; } QScriptValue Text::prototype(QScriptEngine *engine) @@ -646,6 +644,7 @@ QScriptValue Document::load(QScriptEngine *engine, const QString &data) attr->name = a.name().toString(); attr->data = a.value().toString(); attr->parent = node; + A(attr->parent); node->attributes.append(attr); } } @@ -681,7 +680,9 @@ QScriptValue Document::load(QScriptEngine *engine, const QString &data) QScriptValue instance = engine->newObject(); instance.setPrototype(Document::prototype(engine)); - return engine->newVariant(instance, qVariantFromValue(Document(document))); + Node documentNode; + documentNode.d = document; + return engine->newVariant(instance, qVariantFromValue(documentNode)); } Node::Node() @@ -695,14 +696,6 @@ Node::Node(const Node &o) if (d) A(d); } -Node &Node::operator=(const Node &o) -{ - if (o.d) A(o.d); - if (d) D(d); - d = o.d; - return *this; -} - Node::~Node() { if (d) D(d); @@ -761,15 +754,6 @@ NamedNodeMap::NamedNodeMap(const NamedNodeMap &o) if (d) A(d); } -NamedNodeMap &NamedNodeMap::operator=(const NamedNodeMap &o) -{ - if (o.d) A(o.d); - if (d) D(d); - d = o.d; - list = o.list; - return *this; -} - NamedNodeMap::~NamedNodeMap() { if (d) D(d); @@ -780,20 +764,6 @@ bool NamedNodeMap::isNull() return d == 0; } -QScriptValue NodeList::item(QScriptContext *context, QScriptEngine *engine) -{ - NodeList list = qscriptvalue_cast<NodeList>(context->thisObject().data()); - if (list.isNull() || context->argumentCount() != 1) - return engine->undefinedValue(); - - qint32 index = context->argument(0).toInt32(); - - if (index >= list.d->children.count()) - return engine->undefinedValue(); // ### Exception - else - return Node::create(engine, list.d->children.at(index)); -} - QScriptValue NodeList::length(QScriptContext *context, QScriptEngine *engine) { NodeList list = qscriptvalue_cast<NodeList>(context->thisObject().data()); @@ -807,7 +777,6 @@ QScriptValue NodeList::prototype(QScriptEngine *engine) QScriptValue proto = engine->newObject(); proto.setProperty(QLatin1String("length"), engine->newFunction(length), QScriptValue::ReadOnly | QScriptValue::PropertyGetter); - proto.setProperty(QLatin1String("item"), engine->newFunction(item, 1), QScriptValue::ReadOnly); return proto; } @@ -842,14 +811,6 @@ NodeList::NodeList(const NodeList &o) if (d) A(d); } -NodeList &NodeList::operator=(const NodeList &o) -{ - if (o.d) A(o.d); - if (d) D(d); - d = o.d; - return *this; -} - NodeList::~NodeList() { if (d) D(d); @@ -920,81 +881,36 @@ QScriptValue NodeListClass::property(const QScriptValue &object, const QScriptSt return Node::create(engine(), list.d->children.at(id)); } -Document::Document() -: d(0) -{ -} - -Document::Document(DocumentImpl *data) -: d(data) -{ -} - -Document::Document(const Document &o) -: Node(o), d(o.d) -{ - if (d) A(d); -} - -Document &Document::operator=(const Document &o) -{ - if (o.d) A(o.d); - if (d) D(d); - d = o.d; - return *this; -} - -Document::~Document() -{ - if (d) D(d); -} - -bool Document::isNull() const -{ - return d == 0; -} - QScriptValue Document::documentElement(QScriptContext *context, QScriptEngine *engine) { - Document document = qscriptvalue_cast<Document>(context->thisObject()); - if (document.isNull()) return engine->undefinedValue(); - - if (!document.d->root) return engine->nullValue(); + Node document = qscriptvalue_cast<Node>(context->thisObject()); + if (document.isNull() || document.d->type != NodeImpl::Document) return engine->undefinedValue(); - return Node::create(engine, document.d->root); + return Node::create(engine, static_cast<DocumentImpl *>(document.d)->root); } QScriptValue Document::xmlStandalone(QScriptContext *context, QScriptEngine *engine) { - Document document = qscriptvalue_cast<Document>(context->thisObject()); - if (document.isNull()) return engine->undefinedValue(); - - if (context->argumentCount()) - document.d->isStandalone = context->argument(0).toBool(); + Node document = qscriptvalue_cast<Node>(context->thisObject()); + if (document.isNull() || document.d->type != NodeImpl::Document) return engine->undefinedValue(); - return QScriptValue(document.d->isStandalone); + return QScriptValue(static_cast<DocumentImpl *>(document.d)->isStandalone); } QScriptValue Document::xmlVersion(QScriptContext *context, QScriptEngine *engine) { - Document document = qscriptvalue_cast<Document>(context->thisObject()); - if (document.isNull()) return engine->undefinedValue(); + Node document = qscriptvalue_cast<Node>(context->thisObject()); + if (document.isNull() || document.d->type != NodeImpl::Document) return engine->undefinedValue(); - if (context->argumentCount()) - document.d->version = context->argument(0).toString(); - - return QScriptValue(document.d->version); + return QScriptValue(static_cast<DocumentImpl *>(document.d)->version); } QScriptValue Document::xmlEncoding(QScriptContext *context, QScriptEngine *engine) { - Document document = qscriptvalue_cast<Document>(context->thisObject()); - if (document.isNull()) return engine->undefinedValue(); - - if (context->argumentCount()) - document.d->encoding = context->argument(0).toString(); + Node document = qscriptvalue_cast<Node>(context->thisObject()); + if (document.isNull() || document.d->type != NodeImpl::Document) return engine->undefinedValue(); - return QScriptValue(document.d->encoding); + return QScriptValue(static_cast<DocumentImpl *>(document.d)->encoding); } class QmlXMLHttpRequest : public QObject |