aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2017-02-17 11:43:46 +0100
committerDominik Holland <dominik.holland@pelagicore.com>2017-02-20 10:22:43 +0000
commitd7b71241a7be82c835fdaadc9bcf03ec5f847a51 (patch)
treeb941ae28ac8a095eae884a278de5e35d1363ba13
parent96852379c1b893c27ec53c42fed99c1e10461ad2 (diff)
QIviMediaPlayer: Added a playMode property
Change-Id: I4185422c061a174a03a03a237297933132b419be Reviewed-by: Johan Thelin <johan.thelin@pelagicore.com>
-rw-r--r--src/ivimedia/qivimediaplayer.cpp66
-rw-r--r--src/ivimedia/qivimediaplayer.h14
-rw-r--r--src/ivimedia/qivimediaplayer_p.h2
-rw-r--r--src/ivimedia/qivimediaplayerbackendinterface.cpp15
-rw-r--r--src/ivimedia/qivimediaplayerbackendinterface.h3
-rw-r--r--src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp6
-rw-r--r--src/plugins/ivimedia/media_simulator/mediaplayerbackend.h1
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 &currentTrack)
{
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 &currentTrack);
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 &currentTrack))
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 &currentTrack);
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 &currentTrack)
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 &currentTrack); //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;