qtmobility/src/multimedia/qmediaimageviewer.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    42 #include "qmediaimageviewer.h"
    42 #include "qmediaimageviewer.h"
    43 
    43 
    44 #include "qmediaobject_p.h"
    44 #include "qmediaobject_p.h"
    45 #include "qmediaimageviewerservice_p.h"
    45 #include "qmediaimageviewerservice_p.h"
    46 
    46 
    47 #include "qmediaplaylist.h"
    47 #include <qmediaplaylist.h>
    48 #include "qmediacontent.h"
    48 #include <qmediaplaylistsourcecontrol.h>
    49 #include "qmediaresource.h"
    49 #include <qmediacontent.h>
       
    50 #include <qmediaresource.h>
    50 
    51 
    51 #include <QtCore/qcoreevent.h>
    52 #include <QtCore/qcoreevent.h>
    52 #include <QtCore/qtextstream.h>
    53 #include <QtCore/qtextstream.h>
    53 #include <QtCore/qdatetime.h>
    54 #include <QtCore/qdatetime.h>
    54 
    55 
   121     playlist = 0;
   122     playlist = 0;
   122     timer.stop();
   123     timer.stop();
   123 
   124 
   124     if (state != QMediaImageViewer::StoppedState)
   125     if (state != QMediaImageViewer::StoppedState)
   125         emit q_func()->stateChanged(state = QMediaImageViewer::StoppedState);
   126         emit q_func()->stateChanged(state = QMediaImageViewer::StoppedState);
       
   127 
       
   128     q_func()->setMedia(QMediaContent());
   126 }
   129 }
   127 
   130 
   128 /*!
   131 /*!
   129     \class QMediaImageViewer
   132     \class QMediaImageViewer
   130     \brief The QMediaImageViewer class provides a means of viewing image media.
   133     \brief The QMediaImageViewer class provides a means of viewing image media.
   138 
   141 
   139     \code
   142     \code
   140     viewer = new QMediaImageViewer(this);
   143     viewer = new QMediaImageViewer(this);
   141 
   144 
   142     display = new QVideoWidget;
   145     display = new QVideoWidget;
   143     display->setMediaObject(viewer);
   146     viewer->addVideoOutput(display);
   144     display->show();
   147     display->show();
   145     \endcode
   148     \endcode
   146 
   149 
   147     QMediaImageViewer can be paired with a QMediaPlaylist to create a slide
   150     QMediaImageViewer can be paired with a QMediaPlaylist to create a slide
   148     show of images. Constructing a QMediaPlaylist with a pointer to an
   151     show of images. Constructing a QMediaPlaylist with a pointer to an
   201     : QMediaObject(*new QMediaImageViewerPrivate, parent, new QMediaImageViewerService)
   204     : QMediaObject(*new QMediaImageViewerPrivate, parent, new QMediaImageViewerService)
   202 {
   205 {
   203     Q_D(QMediaImageViewer);
   206     Q_D(QMediaImageViewer);
   204 
   207 
   205     d->viewerControl = qobject_cast<QMediaImageViewerControl*>(
   208     d->viewerControl = qobject_cast<QMediaImageViewerControl*>(
   206             d->service->control(QMediaImageViewerControl_iid));
   209             d->service->requestControl(QMediaImageViewerControl_iid));
   207 
   210 
   208     connect(d->viewerControl, SIGNAL(mediaStatusChanged(QMediaImageViewer::MediaStatus)),
   211     connect(d->viewerControl, SIGNAL(mediaStatusChanged(QMediaImageViewer::MediaStatus)),
   209             this, SLOT(_q_mediaStatusChanged(QMediaImageViewer::MediaStatus)));
   212             this, SLOT(_q_mediaStatusChanged(QMediaImageViewer::MediaStatus)));
   210 }
   213 }
   211 
   214 
   264 }
   267 }
   265 
   268 
   266 void QMediaImageViewer::setMedia(const QMediaContent &media)
   269 void QMediaImageViewer::setMedia(const QMediaContent &media)
   267 {
   270 {
   268     Q_D(QMediaImageViewer);
   271     Q_D(QMediaImageViewer);
       
   272 
       
   273     if (d->playlist && d->playlist->currentMedia() != media) {
       
   274         disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
       
   275                    this, SLOT(_q_playlistMediaChanged(QMediaContent)));
       
   276         disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
       
   277 
       
   278         d->playlist = 0;
       
   279     }
   269 
   280 
   270     d->media = media;
   281     d->media = media;
   271 
   282 
   272     if (d->timer.isActive()) {
   283     if (d->timer.isActive()) {
   273         d->pauseTime = 0;
   284         d->pauseTime = 0;
   282     d->viewerControl->showMedia(d->media);
   293     d->viewerControl->showMedia(d->media);
   283 
   294 
   284     emit mediaChanged(d->media);
   295     emit mediaChanged(d->media);
   285 }
   296 }
   286 
   297 
       
   298 void QMediaImageViewer::setPlaylist(QMediaPlaylist *playlist)
       
   299 {
       
   300     Q_D(QMediaImageViewer);
       
   301 
       
   302     if (d->playlist) {
       
   303         disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
       
   304                    this, SLOT(_q_playlistMediaChanged(QMediaContent)));
       
   305         disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
       
   306     }
       
   307 
       
   308     d->playlist = playlist;
       
   309 
       
   310     if (d->playlist) {
       
   311         connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
       
   312                 this, SLOT(_q_playlistMediaChanged(QMediaContent)));
       
   313         connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
       
   314 
       
   315         setMedia(d->playlist->currentMedia());
       
   316     } else {
       
   317         setMedia(QMediaContent());
       
   318     }
       
   319 }
       
   320 
   287 /*!
   321 /*!
   288     \fn QMediaImageViewer::mediaChanged(const QMediaContent &media)
   322     \fn QMediaImageViewer::mediaChanged(const QMediaContent &media)
   289 
   323 
   290     Signals that the \a media an image viewer is presenting has changed.
   324     Signals that the \a media an image viewer is presenting has changed.
   291 */
   325 */
   347 */
   381 */
   348 
   382 
   349 /*!
   383 /*!
   350     \internal
   384     \internal
   351 */
   385 */
   352 void QMediaImageViewer::bind(QObject *object)
   386 bool QMediaImageViewer::bind(QObject *object)
   353 {
   387 {
   354     Q_D(QMediaImageViewer);
   388     return QMediaObject::bind(object);
   355 
       
   356     if (QMediaPlaylist *playlist = qobject_cast<QMediaPlaylist *>(object)) {
       
   357         if (d->playlist) {
       
   358             qWarning("QMediaImageViewer::bind(): already bound to a playlist, detaching the current one");
       
   359             d->playlist->setMediaObject(0);
       
   360         }
       
   361         d->playlist = playlist;
       
   362 
       
   363         connect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
       
   364                 this, SLOT(_q_playlistMediaChanged(QMediaContent)));
       
   365         connect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
       
   366     }
       
   367 }
   389 }
   368 
   390 
   369 /*!
   391 /*!
   370      \internal
   392      \internal
   371  */
   393  */
   372 void QMediaImageViewer::unbind(QObject *object)
   394 void QMediaImageViewer::unbind(QObject *object)
   373 {
   395 {
   374     Q_D(QMediaImageViewer);
   396     QMediaObject::unbind(object);
   375 
       
   376     if (object == d->playlist) {
       
   377         disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
       
   378                    this, SLOT(_q_playlistMediaChanged(QMediaContent)));
       
   379         disconnect(d->playlist, SIGNAL(destroyed()), this, SLOT(_q_playlistDestroyed()));
       
   380 
       
   381         d->playlist = 0;
       
   382         setMedia(QMediaContent());
       
   383     }
       
   384 }
   397 }
   385 
   398 
   386 /*!
   399 /*!
   387     Starts a slide show.
   400     Starts a slide show.
   388 
   401