blob: cc56e9adb8febc8d92dbd2d90fd8f1b30b26d345 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef MOCKMEDIAPLAYLISTCONTROL_H
#define MOCKMEDIAPLAYLISTCONTROL_H
#include <private/qmediaplaylistcontrol_p.h>
#include <private/qmediaplaylistnavigator_p.h>
#include <private/qmedianetworkplaylistprovider_p.h>
#include "mockreadonlyplaylistprovider.h"
class MockMediaPlaylistControl : public QMediaPlaylistControl
{
public:
MockMediaPlaylistControl(bool readonly = false, QObject *parent = 0)
: QMediaPlaylistControl(parent)
, m_navigator(0)
, m_playlist(0)
, m_ownsProvider(false)
, m_readOnly(readonly)
{
reset();
}
~MockMediaPlaylistControl()
{
}
void reset()
{
delete m_navigator;
if (m_ownsProvider)
delete m_playlist;
if (m_readOnly)
m_playlist = new MockReadOnlyPlaylistProvider(this);
else
m_playlist = new QMediaNetworkPlaylistProvider(this);
m_ownsProvider = true;
m_navigator = new QMediaPlaylistNavigator(m_playlist, this);
}
void setReadOnly(bool ro)
{
if (m_readOnly == ro)
return;
m_readOnly = ro;
reset();
}
QMediaPlaylistProvider* playlistProvider() const { return m_playlist; }
bool setPlaylistProvider(QMediaPlaylistProvider *newProvider)
{
bool bMediaContentChanged = false;
int i = 0;
for (; i < playlistProvider()->mediaCount(); i++) {
if (playlistProvider()->media(i).request().url().toString()
!= newProvider->media(i).request().url().toString()) {
bMediaContentChanged = true;
break;
}
}
if (playlistProvider()->mediaCount() != newProvider->mediaCount() || bMediaContentChanged ) {
emit playlistProviderChanged();
emit currentMediaChanged(newProvider->media(i));
}
if (m_ownsProvider)
delete m_playlist;
m_playlist = newProvider;
m_ownsProvider = false;
m_navigator->setPlaylist(newProvider);
return true;
}
int currentIndex() const { return m_navigator->currentIndex(); }
void setCurrentIndex(int position)
{
if (position != currentIndex())
emit currentIndexChanged(position);
m_navigator->jump(position);
}
int nextIndex(int steps) const { return m_navigator->nextIndex(steps); }
int previousIndex(int steps) const { return m_navigator->previousIndex(steps); }
void next() { m_navigator->next(); }
void previous() { m_navigator->previous(); }
QMediaPlaylist::PlaybackMode playbackMode() const { return m_navigator->playbackMode(); }
void setPlaybackMode(QMediaPlaylist::PlaybackMode mode)
{
if (playbackMode() != mode)
emit playbackModeChanged(mode);
m_navigator->setPlaybackMode(mode);
}
private:
QMediaPlaylistNavigator *m_navigator;
QMediaPlaylistProvider *m_playlist;
bool m_ownsProvider;
bool m_readOnly;
};
#endif // MOCKMEDIAPLAYLISTCONTROL_H