diff -r 06b8e2af4411 -r 6fbed849b4f4 qtmobility/src/multimedia/qmediaimageviewer.cpp --- a/qtmobility/src/multimedia/qmediaimageviewer.cpp Fri Jun 11 14:26:25 2010 +0300 +++ b/qtmobility/src/multimedia/qmediaimageviewer.cpp Wed Jun 23 19:08:38 2010 +0300 @@ -44,9 +44,10 @@ #include "qmediaobject_p.h" #include "qmediaimageviewerservice_p.h" -#include "qmediaplaylist.h" -#include "qmediacontent.h" -#include "qmediaresource.h" +#include +#include +#include +#include #include #include @@ -123,6 +124,8 @@ if (state != QMediaImageViewer::StoppedState) emit q_func()->stateChanged(state = QMediaImageViewer::StoppedState); + + q_func()->setMedia(QMediaContent()); } /*! @@ -140,7 +143,7 @@ viewer = new QMediaImageViewer(this); display = new QVideoWidget; - display->setMediaObject(viewer); + viewer->addVideoOutput(display); display->show(); \endcode @@ -203,7 +206,7 @@ Q_D(QMediaImageViewer); d->viewerControl = qobject_cast( - d->service->control(QMediaImageViewerControl_iid)); + d->service->requestControl(QMediaImageViewerControl_iid)); connect(d->viewerControl, SIGNAL(mediaStatusChanged(QMediaImageViewer::MediaStatus)), this, SLOT(_q_mediaStatusChanged(QMediaImageViewer::MediaStatus))); @@ -267,6 +270,14 @@ { Q_D(QMediaImageViewer); + if (d->playlist && d->playlist->currentMedia() != media) { + disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)), + this, SLOT(_q_playlistMediaChanged(QMediaContent))); + disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed())); + + d->playlist = 0; + } + d->media = media; if (d->timer.isActive()) { @@ -284,6 +295,29 @@ emit mediaChanged(d->media); } +void QMediaImageViewer::setPlaylist(QMediaPlaylist *playlist) +{ + Q_D(QMediaImageViewer); + + if (d->playlist) { + disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)), + this, SLOT(_q_playlistMediaChanged(QMediaContent))); + disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed())); + } + + d->playlist = playlist; + + if (d->playlist) { + connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)), + this, SLOT(_q_playlistMediaChanged(QMediaContent))); + connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed())); + + setMedia(d->playlist->currentMedia()); + } else { + setMedia(QMediaContent()); + } +} + /*! \fn QMediaImageViewer::mediaChanged(const QMediaContent &media) @@ -349,21 +383,9 @@ /*! \internal */ -void QMediaImageViewer::bind(QObject *object) +bool QMediaImageViewer::bind(QObject *object) { - Q_D(QMediaImageViewer); - - if (QMediaPlaylist *playlist = qobject_cast(object)) { - if (d->playlist) { - qWarning("QMediaImageViewer::bind(): already bound to a playlist, detaching the current one"); - d->playlist->setMediaObject(0); - } - d->playlist = playlist; - - connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)), - this, SLOT(_q_playlistMediaChanged(QMediaContent))); - connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed())); - } + return QMediaObject::bind(object); } /*! @@ -371,16 +393,7 @@ */ void QMediaImageViewer::unbind(QObject *object) { - Q_D(QMediaImageViewer); - - if (object == d->playlist) { - disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)), - this, SLOT(_q_playlistMediaChanged(QMediaContent))); - disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed())); - - d->playlist = 0; - setMedia(QMediaContent()); - } + QMediaObject::unbind(object); } /*!