/*! \qmlmethod object QtQuick2::Loader::setSource(url source, object properties) Creates an object instance of the given \a source component that will have the given \a properties. The \a properties argument is optional. The instance will be accessible via the \l item property once loading and instantiation is complete. If the \l active property is \c false at the time when this function is called, the given \a source component will not be loaded but the \a source and initial \a properties will be cached. When the loader is made \l active, an instance of the \a source component will be created with the initial \a properties set. Setting the initial property values of an instance of a component in this manner will \b{not} trigger any associated \l{Behavior}s. Note that the cached \a properties will be cleared if the \l source or \l sourceComponent is changed after calling this function but prior to setting the loader \l active. Example: \table \row \li \qml // ExampleComponent.qml import QtQuick 2.0 Rectangle { id: rect color: "red" width: 10 height: 10 Behavior on color { NumberAnimation { target: rect property: "width" to: (rect.width + 20) duration: 0 } } } \endqml \li \qml // example.qml import QtQuick 2.0 Item { Loader { id: squareLoader onLoaded: console.log(squareLoader.item.width); // prints [10], not [30] } Component.onCompleted: { squareLoader.setSource("ExampleComponent.qml", { "color": "blue" }); // will trigger the onLoaded code when complete. } } \endqml \endtable \sa source, active */ void QQuickLoader::setSource(QQmlV8Function *args) { Q_ASSERT(args); Q_D(QQuickLoader); bool ipvError = false; args->returnValue(v8::Undefined()); v8::Handle<v8::Object> ipv = d->extractInitialPropertyValues(args, this, &ipvError); if (ipvError) return; d->clear(); QUrl sourceUrl = d->resolveSourceUrl(args); if (!ipv.IsEmpty()) { d->disposeInitialPropertyValues(); d->initialPropertyValues = qPersistentNew(ipv); d->qmlGlobalForIpv = qPersistentNew(args->qmlGlobal()); } setSource(sourceUrl, false); // already cleared and set ipv above. }
QQuickV8ParticleData::QQuickV8ParticleData(QV8Engine* engine, QQuickParticleData* datum) { if (!engine || !datum) return; v8::HandleScope handle_scope; v8::Context::Scope scope(engine->context()); QV8ParticleDataDeletable *d = particleV8Data(engine); m_v8Value = qPersistentNew(d->constructor->NewInstance()); QV8ParticleDataResource *r = new QV8ParticleDataResource(engine); r->datum = datum; m_v8Value->SetExternalResource(r); }
QV8ParticleDataDeletable::QV8ParticleDataDeletable(QV8Engine *engine) { v8::HandleScope handle_scope; v8::Context::Scope scope(engine->context()); v8::Local<v8::FunctionTemplate> ft = v8::FunctionTemplate::New(); ft->InstanceTemplate()->SetHasExternalResource(true); ft->PrototypeTemplate()->Set(v8::String::New("discard"), V8FUNCTION(particleData_discard, engine)); ft->PrototypeTemplate()->Set(v8::String::New("lifeLeft"), V8FUNCTION(particleData_lifeLeft, engine)); ft->PrototypeTemplate()->Set(v8::String::New("currentSize"), V8FUNCTION(particleData_curSize, engine)); REGISTER_ACCESSOR(ft, engine, x, initialX); REGISTER_ACCESSOR(ft, engine, y, initialY); REGISTER_ACCESSOR(ft, engine, t, t); REGISTER_ACCESSOR(ft, engine, lifeSpan, lifeSpan); REGISTER_ACCESSOR(ft, engine, size, startSize); REGISTER_ACCESSOR(ft, engine, endSize, endSize); REGISTER_ACCESSOR(ft, engine, vx, initialVX); REGISTER_ACCESSOR(ft, engine, vy, initialVY); REGISTER_ACCESSOR(ft, engine, ax, initialAX); REGISTER_ACCESSOR(ft, engine, ay, initialAY); REGISTER_ACCESSOR(ft, engine, xx, xDeformationVectorX); REGISTER_ACCESSOR(ft, engine, xy, xDeformationVectorY); REGISTER_ACCESSOR(ft, engine, yx, yDeformationVectorX); REGISTER_ACCESSOR(ft, engine, yy, yDeformationVectorY); REGISTER_ACCESSOR(ft, engine, rotation, rotation); REGISTER_ACCESSOR(ft, engine, rotationVelocity, rotationVelocity); REGISTER_ACCESSOR(ft, engine, autoRotate, autoRotate); REGISTER_ACCESSOR(ft, engine, animIdx, animationIndex); REGISTER_ACCESSOR(ft, engine, frameDuration, frameDuration); REGISTER_ACCESSOR(ft, engine, frameAt, frameAt); REGISTER_ACCESSOR(ft, engine, frameCount, frameCount); REGISTER_ACCESSOR(ft, engine, animT, animationT); REGISTER_ACCESSOR(ft, engine, r, r); REGISTER_ACCESSOR(ft, engine, update, update); REGISTER_ACCESSOR(ft, engine, curX, x); REGISTER_ACCESSOR(ft, engine, curVX, vx); REGISTER_ACCESSOR(ft, engine, curAX, ax); REGISTER_ACCESSOR(ft, engine, curY, y); REGISTER_ACCESSOR(ft, engine, curVY, vy); REGISTER_ACCESSOR(ft, engine, curAY, ay); REGISTER_ACCESSOR(ft, engine, red, red); REGISTER_ACCESSOR(ft, engine, green, green); REGISTER_ACCESSOR(ft, engine, blue, blue); REGISTER_ACCESSOR(ft, engine, alpha, alpha); constructor = qPersistentNew(ft->GetFunction()); }
QV8ParticleDataDeletable::QV8ParticleDataDeletable(QV8Engine *engine) { v8::HandleScope handle_scope; v8::Context::Scope scope(engine->context()); v8::Local<v8::FunctionTemplate> ft = v8::FunctionTemplate::New(); ft->InstanceTemplate()->SetHasExternalResource(true); ft->PrototypeTemplate()->Set(v8::String::New("discard"), V8FUNCTION(particleData_discard, engine)); ft->PrototypeTemplate()->Set(v8::String::New("lifeLeft"), V8FUNCTION(particleData_lifeLeft, engine)); ft->PrototypeTemplate()->Set(v8::String::New("curSize"), V8FUNCTION(particleData_curSize, engine)); FLOAT_REGISTER_ACCESSOR(ft, engine, x); FLOAT_REGISTER_ACCESSOR(ft, engine, y); FLOAT_REGISTER_ACCESSOR(ft, engine, t); FLOAT_REGISTER_ACCESSOR(ft, engine, lifeSpan); FLOAT_REGISTER_ACCESSOR(ft, engine, size); FLOAT_REGISTER_ACCESSOR(ft, engine, endSize); FLOAT_REGISTER_ACCESSOR(ft, engine, vx); FLOAT_REGISTER_ACCESSOR(ft, engine, vy); FLOAT_REGISTER_ACCESSOR(ft, engine, ax); FLOAT_REGISTER_ACCESSOR(ft, engine, ay); FLOAT_REGISTER_ACCESSOR(ft, engine, xx); FLOAT_REGISTER_ACCESSOR(ft, engine, xy); FLOAT_REGISTER_ACCESSOR(ft, engine, rotation); FLOAT_REGISTER_ACCESSOR(ft, engine, rotationSpeed); FLOAT_REGISTER_ACCESSOR(ft, engine, autoRotate); FLOAT_REGISTER_ACCESSOR(ft, engine, animIdx); FLOAT_REGISTER_ACCESSOR(ft, engine, frameDuration); FLOAT_REGISTER_ACCESSOR(ft, engine, frameCount); FLOAT_REGISTER_ACCESSOR(ft, engine, animT); FLOAT_REGISTER_ACCESSOR(ft, engine, r); FLOAT_REGISTER_ACCESSOR(ft, engine, curX); FLOAT_REGISTER_ACCESSOR(ft, engine, curVX); FLOAT_REGISTER_ACCESSOR(ft, engine, curAX); FLOAT_REGISTER_ACCESSOR(ft, engine, curY); FLOAT_REGISTER_ACCESSOR(ft, engine, curVY); FLOAT_REGISTER_ACCESSOR(ft, engine, curAY); constructor = qPersistentNew(ft->GetFunction()); }