void QDeclarativeAnimatedImage::setSource(const QUrl &url) { Q_D(QDeclarativeAnimatedImage); if (url == d->url) return; delete d->_movie; d->_movie = 0; if (d->reply) { d->reply->deleteLater(); d->reply = 0; } d->url = url; if (url.isEmpty()) { delete d->_movie; d->status = Null; } else { #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); if (!lf.isEmpty()) { //### should be unified with movieRequestFinished d->_movie = new QMovie(lf); if (!d->_movie->isValid()){ qmlInfo(this) << "Error Reading Animated Image File " << d->url.toString(); delete d->_movie; d->_movie = 0; return; } connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)), this, SLOT(playingStatusChanged())); connect(d->_movie, SIGNAL(frameChanged(int)), this, SLOT(movieUpdate())); d->_movie->setCacheMode(QMovie::CacheAll); if(d->playing) d->_movie->start(); else d->_movie->jumpToFrame(0); if(d->paused) d->_movie->setPaused(true); d->setPixmap(d->_movie->currentPixmap()); d->status = Ready; d->progress = 1.0; emit statusChanged(d->status); emit sourceChanged(d->url); emit progressChanged(d->progress); return; } #endif d->status = Loading; QNetworkRequest req(d->url); req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); d->reply = qmlEngine(this)->networkAccessManager()->get(req); QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(movieRequestFinished())); }
void QQuickAnimatedImage::load() { Q_D(QQuickAnimatedImage); if (d->url.isEmpty()) { if (d->progress != 0) { d->progress = 0; emit progressChanged(d->progress); } d->setImage(QImage()); d->status = Null; emit statusChanged(d->status); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); emit sourceSizeChanged(); } if (isPlaying() != d->oldPlaying) emit playingChanged(); } else { QString lf = QQmlFile::urlToLocalFileOrQrc(d->url); if (!lf.isEmpty()) { d->_movie = new QMovie(lf); movieRequestFinished(); } else { if (d->status != Loading) { d->status = Loading; emit statusChanged(d->status); } if (d->progress != 0) { d->progress = 0; emit progressChanged(d->progress); } QNetworkRequest req(d->url); req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); d->reply = qmlEngine(this)->networkAccessManager()->get(req); QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(movieRequestFinished())); QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(requestProgress(qint64,qint64))); } } }