qtmobility/src/multimedia/qmediaimageviewer.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- 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 <qmediaplaylist.h>
+#include <qmediaplaylistsourcecontrol.h>
+#include <qmediacontent.h>
+#include <qmediaresource.h>
 
 #include <QtCore/qcoreevent.h>
 #include <QtCore/qtextstream.h>
@@ -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<QMediaImageViewerControl*>(
-            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<QMediaPlaylist *>(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);
 }
 
 /*!