diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2009-12-08 17:13:20 +1000 |
---|---|---|
committer | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2009-12-08 17:13:20 +1000 |
commit | e4e1ab25bedb5b6ecd2383f2d2f88e9fed76c3b2 (patch) | |
tree | afead5a9f0e08ca3b0b94849cc1ec23025ed2eef /src/multimedia/qmediaplaylist.cpp | |
parent | ef44c2e44cb300bcdde52eb48ee52469dd4d299a (diff) |
Added QMediaPlaylist::mediaObject/setMediaObject
And removed QMediaObject from QMediaPlaylist constructor.
Diffstat (limited to 'src/multimedia/qmediaplaylist.cpp')
-rw-r--r-- | src/multimedia/qmediaplaylist.cpp | 132 |
1 files changed, 97 insertions, 35 deletions
diff --git a/src/multimedia/qmediaplaylist.cpp b/src/multimedia/qmediaplaylist.cpp index 65e06885b6..350362fa6b 100644 --- a/src/multimedia/qmediaplaylist.cpp +++ b/src/multimedia/qmediaplaylist.cpp @@ -77,7 +77,8 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, playlistIOLoader, \code player = new QMediaPlayer; - playlist = new QMediaPlaylist(player); + playlist = new QMediaPlaylist; + playlist->setMediaObject(player); playlist->append(QUrl("http://example.com/movie1.mp4")); playlist->append(QUrl("http://example.com/movie2.mp4")); playlist->append(QUrl("http://example.com/movie3.mp4")); @@ -114,60 +115,121 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, playlistIOLoader, /*! - Create a new playlist object for with the given \a parent. - If \a mediaObject is null or doesn't have an intrinsic playlist, - internal local memory playlist source will be created. + Create a new playlist object for with the given \a parent. */ -QMediaPlaylist::QMediaPlaylist(QMediaObject *mediaObject, QObject *parent) +QMediaPlaylist::QMediaPlaylist(QObject *parent) : QObject(parent) , d_ptr(new QMediaPlaylistPrivate) { Q_D(QMediaPlaylist); d->q_ptr = this; + d->localPlaylistControl = new QLocalMediaPlaylistControl(this); + + setMediaObject(0); +} + +/*! + Destroys the playlist. + */ + +QMediaPlaylist::~QMediaPlaylist() +{ + Q_D(QMediaPlaylist); + + if (d->mediaObject) + d->mediaObject->unbind(this); + + delete d_ptr; +} + +QMediaObject *QMediaPlaylist::mediaObject() const +{ + return d_func()->mediaObject; +} + +/*! + If \a mediaObject is null or doesn't have an intrinsic playlist, + internal local memory playlist source will be created. +*/ +void QMediaPlaylist::setMediaObject(QMediaObject *mediaObject) +{ + Q_D(QMediaPlaylist); + + if (mediaObject && mediaObject == d->mediaObject) + return; QMediaService *service = mediaObject - ? mediaObject->service() - : 0; + ? mediaObject->service() : 0; + + QMediaPlaylistControl *newControl = 0; if (service) - d->control = qobject_cast<QMediaPlaylistControl*>(service->control(QMediaPlaylistControl_iid)); + newControl = qobject_cast<QMediaPlaylistControl*>(service->control(QMediaPlaylistControl_iid)); + + if (!newControl) + newControl = d->localPlaylistControl; + + if (d->control != newControl) { + int oldSize = 0; + if (d->control) { + QMediaPlaylistProvider *playlist = d->control->playlistProvider(); + oldSize = playlist->mediaCount(); + disconnect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)), + this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString))); + + disconnect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int))); + disconnect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int))); + disconnect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int))); + disconnect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int))); + disconnect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int))); + + disconnect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded())); + + disconnect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)), + this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode))); + disconnect(d->control, SIGNAL(currentIndexChanged(int)), + this, SIGNAL(currentIndexChanged(int))); + disconnect(d->control, SIGNAL(currentMediaChanged(QMediaContent)), + this, SIGNAL(currentMediaChanged(QMediaContent))); + } - if (!d->control) { - d->control = new QLocalMediaPlaylistControl(this); + d->control = newControl; + QMediaPlaylistProvider *playlist = d->control->playlistProvider(); + connect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)), + this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString))); - if (mediaObject) - mediaObject->bind(this); - } + connect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int))); + connect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int))); + connect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int))); + connect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int))); + connect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int))); - QMediaPlaylistProvider *playlist = d->control->playlistProvider(); - connect(playlist, SIGNAL(loadFailed(QMediaPlaylist::Error,QString)), - this, SLOT(_q_loadFailed(QMediaPlaylist::Error,QString))); + connect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded())); - connect(playlist, SIGNAL(mediaChanged(int,int)), this, SIGNAL(mediaChanged(int,int))); - connect(playlist, SIGNAL(mediaAboutToBeInserted(int,int)), this, SIGNAL(mediaAboutToBeInserted(int,int))); - connect(playlist, SIGNAL(mediaInserted(int,int)), this, SIGNAL(mediaInserted(int,int))); - connect(playlist, SIGNAL(mediaAboutToBeRemoved(int,int)), this, SIGNAL(mediaAboutToBeRemoved(int,int))); - connect(playlist, SIGNAL(mediaRemoved(int,int)), this, SIGNAL(mediaRemoved(int,int))); + connect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)), + this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode))); + connect(d->control, SIGNAL(currentIndexChanged(int)), + this, SIGNAL(currentIndexChanged(int))); + connect(d->control, SIGNAL(currentMediaChanged(QMediaContent)), + this, SIGNAL(currentMediaChanged(QMediaContent))); - connect(playlist, SIGNAL(loaded()), this, SIGNAL(loaded())); + if (oldSize) + emit mediaRemoved(0, oldSize-1); - connect(d->control, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)), - this, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode))); - connect(d->control, SIGNAL(currentIndexChanged(int)), - this, SIGNAL(currentIndexChanged(int))); - connect(d->control, SIGNAL(currentMediaChanged(QMediaContent)), - this, SIGNAL(currentMediaChanged(QMediaContent))); -} + if (playlist->mediaCount()) { + emit mediaAboutToBeInserted(0,playlist->mediaCount()-1); + emit mediaInserted(0,playlist->mediaCount()-1); + } + } -/*! - Destroys the playlist. - */ + if (d->mediaObject) + d->mediaObject->unbind(this); -QMediaPlaylist::~QMediaPlaylist() -{ - delete d_ptr; + d->mediaObject = mediaObject; + if (d->mediaObject) + d->mediaObject->bind(this); } /*! |