src/declarative/qml/qdeclarativeinclude.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
   170         args.setProperty(0, status);
   170         args.setProperty(0, status);
   171         callback.call(QScriptValue(), args);
   171         callback.call(QScriptValue(), args);
   172     }
   172     }
   173 }
   173 }
   174 
   174 
       
   175 /*!
       
   176 \qmlmethod object Qt::include(url, callback)
       
   177 
       
   178 Include another JavaScript file.  This method can only be used from within JavaScript files, 
       
   179 and not regular QML files.
       
   180 
       
   181 Qt.include() returns an object that describes the status of the operation.  The object has
       
   182 a single property, \c {status} that is set to one of the following values:
       
   183 
       
   184 \table
       
   185 \header \o Symbol \o Value \o Description
       
   186 \row \o result.OK \o 0 \o The include completed successfully.
       
   187 \row \o result.LOADING \o 1 \o Data is being loaded from the network.
       
   188 \row \o result.NETWORK_ERROR \o 2 \o A network error occurred while fetching the url.
       
   189 \row \o result.EXCEPTION \o 3 \o A JavaScript exception occurred while executing the included code.
       
   190 An additional \c exception property will be set in this case.
       
   191 \endtable
       
   192 
       
   193 The return object's properties will be updated as the operation progresses.
       
   194 
       
   195 If provided, \a callback is invoked when the operation completes.  The callback is passed
       
   196 the same object as is returned from the Qt.include() call.
       
   197 */
   175 QScriptValue QDeclarativeInclude::include(QScriptContext *ctxt, QScriptEngine *engine)
   198 QScriptValue QDeclarativeInclude::include(QScriptContext *ctxt, QScriptEngine *engine)
   176 {
   199 {
   177     if (ctxt->argumentCount() == 0)
   200     if (ctxt->argumentCount() == 0)
   178         return engine->undefinedValue();
   201         return engine->undefinedValue();
   179 
   202 
   182     QUrl contextUrl = ep->contextClass->urlFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3));
   205     QUrl contextUrl = ep->contextClass->urlFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3));
   183     if (contextUrl.isEmpty()) 
   206     if (contextUrl.isEmpty()) 
   184         return ctxt->throwError(QLatin1String("Qt.include(): Can only be called from JavaScript files"));
   207         return ctxt->throwError(QLatin1String("Qt.include(): Can only be called from JavaScript files"));
   185 
   208 
   186     QString urlString = ctxt->argument(0).toString();
   209     QString urlString = ctxt->argument(0).toString();
   187     QUrl url(ctxt->argument(0).toString());
   210     QUrl url(urlString);
   188     if (url.isRelative()) {
   211     if (url.isRelative()) {
   189         url = QUrl(contextUrl).resolved(url);
   212         url = QUrl(contextUrl).resolved(url);
   190         urlString = url.toString();
   213         urlString = url.toString();
   191     }
   214     }
   192 
   215 
   215             QDeclarativeContextData *context = 
   238             QDeclarativeContextData *context = 
   216                 ep->contextClass->contextFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3));
   239                 ep->contextClass->contextFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3));
   217 
   240 
   218             QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(engine);
   241             QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(engine);
   219             scriptContext->pushScope(ep->contextClass->newUrlContext(context, 0, urlString));
   242             scriptContext->pushScope(ep->contextClass->newUrlContext(context, 0, urlString));
   220             scriptContext->pushScope(ep->globalClass->globalObject());
   243             scriptContext->pushScope(ep->globalClass->staticGlobalObject());
   221             QScriptValue scope = QScriptDeclarativeClass::scopeChainValue(ctxt, -5);
   244             QScriptValue scope = QScriptDeclarativeClass::scopeChainValue(ctxt, -5);
   222             scriptContext->pushScope(scope);
   245             scriptContext->pushScope(scope);
   223             scriptContext->setActivationObject(scope);
   246             scriptContext->setActivationObject(scope);
   224             QDeclarativeScriptParser::extractPragmas(code);
   247             QDeclarativeScriptParser::extractPragmas(code);
   225 
   248