/*! Load the QDeclarativeComponent from the provided \a url. Ensure that the URL provided is full and correct, in particular, use \l QUrl::fromLocalFile() when loading a file from the local filesystem. */ void QDeclarativeComponent::loadUrl(const QUrl &url) { Q_D(QDeclarativeComponent); d->clear(); if ((url.isRelative() && !url.isEmpty()) || url.scheme() == QLatin1String("file")) // Workaround QTBUG-11929 d->url = d->engine->baseUrl().resolved(url); else d->url = url; if (url.isEmpty()) { QDeclarativeError error; error.setDescription(tr("Invalid empty URL")); d->state.errors << error; return; } QDeclarativeTypeData *data = QDeclarativeEnginePrivate::get(d->engine)->typeLoader.get(d->url); if (data->isCompleteOrError()) { d->fromTypeData(data); d->progress = 1.0; } else { d->typeData = data; d->typeData->registerCallback(d); d->progress = data->progress(); } emit statusChanged(status()); emit progressChanged(d->progress); }
/*! Sets the QDeclarativeComponent to use the given QML \a data. If \a url is provided, it is used to set the component name and to provide a base path for items resolved by this component. */ void QDeclarativeComponent::setData(const QByteArray &data, const QUrl &url) { Q_D(QDeclarativeComponent); d->clear(); d->url = url; QDeclarativeTypeData *typeData = QDeclarativeEnginePrivate::get(d->engine)->typeLoader.get(data, url); if (typeData->isCompleteOrError()) { d->fromTypeData(typeData); } else { d->typeData = typeData; d->typeData->registerCallback(d); } d->progress = 1.0; emit statusChanged(status()); emit progressChanged(d->progress); }
/*! Loads a QDeclarativeDomDocument 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 QDeclarativeDomDocument::errors() contains an error description. \sa QDeclarativeDomDocument::loadError() */ bool QDeclarativeDomDocument::load(QDeclarativeEngine *engine, const QByteArray &data, const QUrl &url) { d->errors.clear(); d->imports.clear(); QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); QDeclarativeTypeData *td = ep->typeLoader.get(data, url, QDeclarativeTypeLoader::PreserveParser); if(td->isError()) { d->errors = td->errors(); td->release(); return false; } else if(!td->isCompleteOrError()) { QDeclarativeError error; error.setDescription(QLatin1String("QDeclarativeDomDocument supports local types only")); d->errors << error; td->release(); return false; } for (int i = 0; i < td->parser().imports().size(); ++i) { QDeclarativeScriptParser::Import parserImport = td->parser().imports().at(i); QDeclarativeDomImport domImport; domImport.d->type = static_cast<QDeclarativeDomImportPrivate::Type>(parserImport.type); domImport.d->uri = parserImport.uri; domImport.d->qualifier = parserImport.qualifier; domImport.d->version = parserImport.version; d->imports += domImport; } if (td->parser().tree()) { d->root = td->parser().tree(); d->root->addref(); } td->release(); return true; }