diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2017-02-17 11:43:46 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2017-02-20 10:22:43 +0000 |
commit | d7b71241a7be82c835fdaadc9bcf03ec5f847a51 (patch) | |
tree | b941ae28ac8a095eae884a278de5e35d1363ba13 | |
parent | 96852379c1b893c27ec53c42fed99c1e10461ad2 (diff) |
QIviMediaPlayer: Added a playMode property
Change-Id: I4185422c061a174a03a03a237297933132b419be
Reviewed-by: Johan Thelin <johan.thelin@pelagicore.com>
-rw-r--r-- | src/ivimedia/qivimediaplayer.cpp | 66 | ||||
-rw-r--r-- | src/ivimedia/qivimediaplayer.h | 14 | ||||
-rw-r--r-- | src/ivimedia/qivimediaplayer_p.h | 2 | ||||
-rw-r--r-- | src/ivimedia/qivimediaplayerbackendinterface.cpp | 15 | ||||
-rw-r--r-- | src/ivimedia/qivimediaplayerbackendinterface.h | 3 | ||||
-rw-r--r-- | src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp | 6 | ||||
-rw-r--r-- | src/plugins/ivimedia/media_simulator/mediaplayerbackend.h | 1 |
7 files changed, 106 insertions, 1 deletions
diff --git a/src/ivimedia/qivimediaplayer.cpp b/src/ivimedia/qivimediaplayer.cpp index 7e96b1d..6b47a25 100644 --- a/src/ivimedia/qivimediaplayer.cpp +++ b/src/ivimedia/qivimediaplayer.cpp @@ -51,6 +51,7 @@ QIviMediaPlayerPrivate::QIviMediaPlayerPrivate(const QString &interface, QIviMed : QIviAbstractFeaturePrivate(interface, parent) , q_ptr(parent) , m_playQueue(nullptr) + , m_playMode(QIviMediaPlayer::Normal) , m_currentTrack(0) , m_position(-1) , m_duration(-1) @@ -68,6 +69,7 @@ void QIviMediaPlayerPrivate::initialize() void QIviMediaPlayerPrivate::clearToDefaults() { + m_playMode = QIviMediaPlayer::Normal; m_currentTrackData = QVariant(); m_currentTrack = 0; m_position = -1; @@ -75,6 +77,16 @@ void QIviMediaPlayerPrivate::clearToDefaults() m_playQueue->d_func()->clearToDefaults(); } +void QIviMediaPlayerPrivate::onPlayModeChanged(QIviMediaPlayer::PlayMode playMode) +{ + if (m_playMode == playMode) + return; + + Q_Q(QIviMediaPlayer); + m_playMode = playMode; + emit q->playModeChanged(playMode); +} + void QIviMediaPlayerPrivate::onCurrentTrackChanged(const QVariant ¤tTrack) { if (m_currentTrackData == currentTrack) @@ -149,6 +161,21 @@ QIviMediaPlayerBackendInterface *QIviMediaPlayerPrivate::playerBackend() const */ /*! + \enum QIviMediaPlayer::PlayMode + \value Normal + Each item in the queue is played in sequential order. Usually the playback stops when the end + of the queue is reached. + \value RepeatTrack + Always repeat the current item. It should still be possible to change the current item + using next() and previous(), but this depends on the implementation of the backend. + \value RepeatAll + When the end of the queue is reached, the first item starts to play. + \value Shuffle + The item in the queue are played in an random order. +*/ + + +/*! Constructs a QIviMediaPlayer. The \a parent argument is passed on to the \l QIviAbstractFeature base class. @@ -177,6 +204,31 @@ QIviPlayQueue *QIviMediaPlayer::playQueue() const } /*! + \qmlproperty enumeration MediaPlayer::playMode + \brief Holds the current playback mode of the media player. + Available values are: + \value Normal + Each item in the queue is played in sequential order. Usually the playback stops when the end + of the queue is reached. + \value RepeatTrack + Always repeat the current item. It should still be possible to change the current item + using next() and previous(), but this depends on the implementation of the backend. + \value RepeatAll + When the end of the queue is reached, the first item starts to play. + \value Shuffle + The item in the queue are played in an random order. + */ +/*! + \property QIviMediaPlayer::playMode + \brief Holds the current playback mode of the media player. + */ +QIviMediaPlayer::PlayMode QIviMediaPlayer::playMode() const +{ + Q_D(const QIviMediaPlayer); + return d->m_playMode; +} + +/*! \qmlproperty object MediaPlayer::currentTrack \brief Holds the current track represented as QVariant. @@ -222,6 +274,18 @@ qint64 QIviMediaPlayer::duration() const return d->m_duration; } +void QIviMediaPlayer::setPlayMode(QIviMediaPlayer::PlayMode playMode) +{ + Q_D(QIviMediaPlayer); + QIviMediaPlayerBackendInterface *backend = d->playerBackend(); + if (!backend) { + qWarning("Can't set the play mode without a connected backend"); + return; + } + + backend->setPlayMode(playMode); +} + void QIviMediaPlayer::setPosition(qint64 position) { Q_D(QIviMediaPlayer); @@ -431,6 +495,8 @@ void QIviMediaPlayer::connectToServiceObject(QIviServiceObject *serviceObject) if (!backend) return; + QObjectPrivate::connect(backend, &QIviMediaPlayerBackendInterface::playModeChanged, + d, &QIviMediaPlayerPrivate::onPlayModeChanged); QObjectPrivate::connect(backend, &QIviMediaPlayerBackendInterface::positionChanged, d, &QIviMediaPlayerPrivate::onPositionChanged); QObjectPrivate::connect(backend, &QIviMediaPlayerBackendInterface::currentTrackChanged, diff --git a/src/ivimedia/qivimediaplayer.h b/src/ivimedia/qivimediaplayer.h index 9c11cf3..d8157de 100644 --- a/src/ivimedia/qivimediaplayer.h +++ b/src/ivimedia/qivimediaplayer.h @@ -55,22 +55,32 @@ class Q_QTIVIMEDIA_EXPORT QIviMediaPlayer : public QIviAbstractFeature { Q_OBJECT - //TODO Playmode //TODO Status Q_PROPERTY(QIviPlayQueue *playQueue READ playQueue CONSTANT) + Q_PROPERTY(QIviMediaPlayer::PlayMode playMode READ playMode WRITE setPlayMode NOTIFY playModeChanged) Q_PROPERTY(QVariant currentTrack READ currentTrack NOTIFY currentTrackChanged) Q_PROPERTY(qint64 position READ position WRITE setPosition NOTIFY positionChanged) Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged) public: + enum PlayMode { + Normal, + RepeatTrack, + RepeatAll, + Shuffle + }; + Q_ENUM(PlayMode) + explicit QIviMediaPlayer(QObject *parent = Q_NULLPTR); QIviPlayQueue *playQueue() const; + PlayMode playMode() const; QVariant currentTrack() const; qint64 position() const; qint64 duration() const; public Q_SLOTS: + void setPlayMode(QIviMediaPlayer::PlayMode playMode); void setPosition(qint64 position); void play(); void pause(); @@ -80,6 +90,7 @@ public Q_SLOTS: void previous(); Q_SIGNALS: + void playModeChanged(QIviMediaPlayer::PlayMode playMode); void currentTrackChanged(const QVariant ¤tTrack); void positionChanged(qint64 position); void durationChanged(qint64 duration); @@ -94,6 +105,7 @@ protected: private: Q_DECLARE_PRIVATE(QIviMediaPlayer) + Q_PRIVATE_SLOT(d_func(), void onPlayModeChanged(QIviMediaPlayer::PlayMode playMode)) Q_PRIVATE_SLOT(d_func(), void onCurrentTrackChanged(const QVariant ¤tTrack)) Q_PRIVATE_SLOT(d_func(), void onPositionChanged(qint64 position)) Q_PRIVATE_SLOT(d_func(), void onDurationChanged(qint64 duration)) diff --git a/src/ivimedia/qivimediaplayer_p.h b/src/ivimedia/qivimediaplayer_p.h index ecf6ab3..1a8daab 100644 --- a/src/ivimedia/qivimediaplayer_p.h +++ b/src/ivimedia/qivimediaplayer_p.h @@ -68,6 +68,7 @@ public: virtual void initialize() Q_DECL_OVERRIDE; void clearToDefaults(); + void onPlayModeChanged(QIviMediaPlayer::PlayMode playMode); void onCurrentTrackChanged(const QVariant ¤tTrack); void onPositionChanged(qint64 position); void onDurationChanged(qint64 duration); @@ -76,6 +77,7 @@ public: QIviMediaPlayer * const q_ptr; QIviPlayQueue *m_playQueue; + QIviMediaPlayer::PlayMode m_playMode; QVariant m_currentTrackData; const QIviPlayableItem *m_currentTrack; qint64 m_position; diff --git a/src/ivimedia/qivimediaplayerbackendinterface.cpp b/src/ivimedia/qivimediaplayerbackendinterface.cpp index bca949c..63a8004 100644 --- a/src/ivimedia/qivimediaplayerbackendinterface.cpp +++ b/src/ivimedia/qivimediaplayerbackendinterface.cpp @@ -121,6 +121,15 @@ QIviMediaPlayerBackendInterface::QIviMediaPlayerBackendInterface(QObject *parent */ /*! + \fn QIviMediaPlayerBackendInterface::setPlayMode(QIviMediaPlayer::PlayMode playMode) + + Sets \a playMode as the new playback mode for the player. If a valid playMode is passed, the + function should emit the corresponding change signal. + + \sa playModeChanged +*/ + +/*! \fn QIviMediaPlayerBackendInterface::setPosition(qint64 position) Sets the \a position of the currently playing item. If a valid position is passed, the @@ -182,6 +191,12 @@ QIviMediaPlayerBackendInterface::QIviMediaPlayerBackendInterface(QObject *parent */ /*! + \fn QIviMediaPlayerBackendInterface::playModeChanged(QIviMediaPlayer::PlayMode playMode); + + Emitted when the play mode changed. The new play mode will be passed as \a playMode. +*/ + +/*! \fn QIviMediaPlayerBackendInterface::currentTrackChanged(const QVariant ¤tTrack) Emitted when the currently played playable item changed. The new playable item will be passed as \a currentTrack. diff --git a/src/ivimedia/qivimediaplayerbackendinterface.h b/src/ivimedia/qivimediaplayerbackendinterface.h index 93c4fd4..8b2da91 100644 --- a/src/ivimedia/qivimediaplayerbackendinterface.h +++ b/src/ivimedia/qivimediaplayerbackendinterface.h @@ -43,6 +43,7 @@ #define QIVIMEDIAPLAYERBACKENDINTERFACE_H #include <QtIviMedia/qtivimediaglobal.h> +#include <QtIviMedia/QIviMediaPlayer> #include <QtCore/QObject> QT_BEGIN_NAMESPACE @@ -63,6 +64,7 @@ public: virtual void seek(qint64 offset) = 0; virtual void next() = 0; virtual void previous() = 0; + virtual void setPlayMode(QIviMediaPlayer::PlayMode playMode) = 0; virtual void setPosition(qint64 position) = 0; virtual void setCurrentIndex(int currentIndex) = 0; @@ -74,6 +76,7 @@ public: virtual void move(int currentIndex, int newIndex) = 0; Q_SIGNALS: + void playModeChanged(QIviMediaPlayer::PlayMode playMode); void currentTrackChanged(const QVariant ¤tTrack); //TODO Do we need this or is the currentIndex + the playlistdata enough ? void positionChanged(qint64 position); //TODO do we need durationChanged, we can get that from the currentTrack metadata. diff --git a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp index ecad72d..52631ea 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp +++ b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp @@ -106,6 +106,12 @@ void MediaPlayerBackend::previous() setCurrentIndex(m_currentIndex - 1); } +void MediaPlayerBackend::setPlayMode(QIviMediaPlayer::PlayMode playMode) +{ + Q_UNUSED(playMode); + qWarning("Changing the playMode is currently not supported in the simulation backend"); +} + void MediaPlayerBackend::setPosition(qint64 position) { m_player->setPosition(position); diff --git a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h index c9e4f06..1c46ee9 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h +++ b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.h @@ -72,6 +72,7 @@ public: virtual void seek(qint64 offset) Q_DECL_OVERRIDE; virtual void next() Q_DECL_OVERRIDE; virtual void previous() Q_DECL_OVERRIDE; + virtual void setPlayMode(QIviMediaPlayer::PlayMode playMode) Q_DECL_OVERRIDE; virtual void setPosition(qint64 position) Q_DECL_OVERRIDE; virtual void setCurrentIndex(int index) Q_DECL_OVERRIDE; |