summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2016-06-27 12:04:56 +0200
committerDominik Holland <dominik.holland@pelagicore.com>2016-07-05 12:32:02 +0000
commit8516bf6c9d2111d0343338e3eb39d893c6768110 (patch)
tree39b55455e27b8b8b2f9d6d3239b7c60b6eb3a1a1
parent0b023831782fbecc819987dbddf5937a5c32c47c (diff)
downloadqtivi-8516bf6c9d2111d0343338e3eb39d893c6768110.tar.gz
Refactored the Q_GADGET based Items
The base class was moved into it's own header. The class and all derived classes are now using QSharedData and have a proper copy constructor as well as assignment and compare operators. Changed the QIviAmFmTuner class to use the refactored classes. Change-Id: I334c44e7d0fa49e8e634067a0ece1a1c2b8b789c Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r--examples/media/mediaplayer/main.qml2
-rw-r--r--src/imports/media/plugin.cpp4
-rw-r--r--src/ivicore/ivicore.pro6
-rw-r--r--src/ivicore/qivisearchandbrowsemodel.cpp68
-rw-r--r--src/ivicore/qivisearchandbrowsemodel.h17
-rw-r--r--src/ivicore/qivisearchandbrowsemodel_p.h3
-rw-r--r--src/ivicore/qivisearchandbrowsemodelitem.cpp172
-rw-r--r--src/ivicore/qivisearchandbrowsemodelitem.h86
-rw-r--r--src/ivimedia/qiviamfmtuner.cpp47
-rw-r--r--src/ivimedia/qiviamfmtuner.h11
-rw-r--r--src/ivimedia/qiviamfmtuner_p.h5
-rw-r--r--src/ivimedia/qiviamfmtunerbackendinterface.cpp2
-rw-r--r--src/ivimedia/qiviamfmtunerbackendinterface.h2
-rw-r--r--src/ivimedia/qiviplayableitem.cpp257
-rw-r--r--src/ivimedia/qiviplayableitem.h78
-rw-r--r--src/ivimedia/qiviplayqueue.cpp2
-rw-r--r--src/ivimedia/qivitunerstation.cpp126
-rw-r--r--src/ivimedia/qivitunerstation.h43
-rw-r--r--src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp4
-rw-r--r--src/plugins/ivimedia/media_simulator/searchandbrowsebackend.cpp5
-rw-r--r--src/plugins/ivimedia/media_simulator/searchandbrowsebackend.h29
-rw-r--r--src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.cpp30
-rw-r--r--src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.h34
-rw-r--r--src/plugins/ivimedia/tuner_simulator/searchandbrowsebackend.cpp6
24 files changed, 799 insertions, 240 deletions
diff --git a/examples/media/mediaplayer/main.qml b/examples/media/mediaplayer/main.qml
index 80448c9..4376122 100644
--- a/examples/media/mediaplayer/main.qml
+++ b/examples/media/mediaplayer/main.qml
@@ -199,7 +199,7 @@ ApplicationWindow {
MouseArea {
anchors.fill: parent
onClicked: {
- if (item.type === "track")
+ if (item.type === "audiotrack")
mediaPlayer.playQueue.insert(0, item)
else
searchModel.goForward(index, SearchAndBrowseModel.InModelNavigation)
diff --git a/src/imports/media/plugin.cpp b/src/imports/media/plugin.cpp
index 021a03c..54e47d4 100644
--- a/src/imports/media/plugin.cpp
+++ b/src/imports/media/plugin.cpp
@@ -47,6 +47,7 @@
#include <QtIviMedia/QIviMediaIndexerControl>
#include <QtIviMedia/QIviPlayQueue>
#include <QtIviMedia/QIviAmFmTuner>
+#include <QtIviMedia/QIviTunerStation>
#include <QtIviMedia/QIviMediaDevice>
QT_BEGIN_NAMESPACE
@@ -61,6 +62,9 @@ public:
Q_ASSERT(QLatin1String(uri) == QLatin1String("QtIvi.Media"));
Q_UNUSED(uri);
+ qRegisterMetaType<QIviTunerStation>();
+ qRegisterMetaType<QIviAmFmTunerStation>();
+
qmlRegisterType<QIviMediaPlayer>(uri, 1, 0, "MediaPlayer");
//This should be an singleton, otherwise we might delete a pointer twice ?
qmlRegisterType<QIviMediaDeviceDiscoveryModel>(uri, 1, 0, "MediaDeviceDiscoveryModel");
diff --git a/src/ivicore/ivicore.pro b/src/ivicore/ivicore.pro
index f28f769..e473be3 100644
--- a/src/ivicore/ivicore.pro
+++ b/src/ivicore/ivicore.pro
@@ -34,7 +34,8 @@ HEADERS += \
qivisearchandbrowsemodel.h \
qivisearchandbrowsemodel_p.h \
qivisearchandbrowsemodelinterface.h \
- qivisearchandbrowsemodelinterface_p.h
+ qivisearchandbrowsemodelinterface_p.h \
+ qivisearchandbrowsemodelitem.h
SOURCES += \
qiviservicemanager.cpp \
@@ -48,7 +49,8 @@ SOURCES += \
qivipropertyfactory.cpp \
qiviabstractfeaturelistmodel.cpp \
qivisearchandbrowsemodel.cpp \
- qivisearchandbrowsemodelinterface.cpp
+ qivisearchandbrowsemodelinterface.cpp \
+ qivisearchandbrowsemodelitem.cpp
include(queryparser/queryparser.pri)
diff --git a/src/ivicore/qivisearchandbrowsemodel.cpp b/src/ivicore/qivisearchandbrowsemodel.cpp
index 4fd6fd3..6915f3f 100644
--- a/src/ivicore/qivisearchandbrowsemodel.cpp
+++ b/src/ivicore/qivisearchandbrowsemodel.cpp
@@ -60,7 +60,7 @@ QIviSearchAndBrowseModelPrivate::QIviSearchAndBrowseModelPrivate(const QString &
, m_canGoBack(false)
, m_loadingType(QIviSearchAndBrowseModel::FetchMore)
{
- qRegisterMetaType<QIviSearchAndBrowseListItem>();
+ qRegisterMetaType<QIviSearchAndBrowseModelItem>();
}
QIviSearchAndBrowseModelPrivate::~QIviSearchAndBrowseModelPrivate()
@@ -222,7 +222,7 @@ void QIviSearchAndBrowseModelPrivate::setCanGoBack(bool canGoBack)
emit q->canGoBackChanged(m_canGoBack);
}
-const QIviSearchAndBrowseListItem *QIviSearchAndBrowseModelPrivate::itemAt(int i) const
+const QIviSearchAndBrowseModelItem *QIviSearchAndBrowseModelPrivate::itemAt(int i) const
{
QVariant var = m_itemList.at(i);
if (!var.isValid())
@@ -237,12 +237,12 @@ const QIviSearchAndBrowseListItem *QIviSearchAndBrowseModelPrivate::itemAt(int i
const QMetaObject *mo = type.metaObject();
while (mo) {
- if (mo->className() == QIviSearchAndBrowseListItem::staticMetaObject.className())
- return reinterpret_cast<const QIviSearchAndBrowseListItem*>(data);
+ if (mo->className() == QIviSearchAndBrowseModelItem::staticMetaObject.className())
+ return reinterpret_cast<const QIviSearchAndBrowseModelItem*>(data);
mo = mo->superClass();
}
- qCritical() << "QVariant at" << i << "is not derived from QIviSearchAndBrowseListItem";
+ qCritical() << "QVariant at" << i << "is not derived from QIviSearchAndBrowseModelItem";
return nullptr;
}
@@ -270,56 +270,6 @@ void QIviSearchAndBrowseModelPrivate::updateContentType(const QString &contentTy
}
/*!
- \class QIviSearchAndBrowseListItem
- \inmodule QtIviCore
- \brief The QIviSearchAndBrowseListItem is the base class of a row in the QIviSearchAndBrowseModel model.
-*/
-
-/*!
- \qmltype SearchAndBrowseListItem
- \qmlabstract
- \instantiates QIviSearchAndBrowseListItem
- \inqmlmodule QtIvi
- \brief The SearchAndBrowseListItem is the base class of a row in the SearchAndBrowseModel model.
-
- \note This item is not creatable from QML.
-*/
-
-/*!
- \qmlproperty string SearchAndBrowseListItem::id
- A unique identifier, which can be used to identify this item.
-
- This is mainly used by the backend to implement filtering or browsing.
-*/
-
-/*!
- \property QIviSearchAndBrowseListItem::id
- A unique identifier, which can be used to identify this item.
-
- This is mainly used by the backend to implement filtering or browsing.
-*/
-
-/*!
- \qmlproperty string SearchAndBrowseListItem::name
- The name of the item. E.g. The name of a contact in a addressbook, or the artist-name in a list of artists.
-*/
-
-/*!
- \property QIviSearchAndBrowseListItem::name
- The name of the item. E.g. The name of a contact in a addressbook, or the artist-name in a list of artists.
-*/
-
-/*!
- \qmlproperty string SearchAndBrowseListItem::type
- The type of the item. E.g. "artist", "track", "contact".
-*/
-
-/*!
- \property QIviSearchAndBrowseListItem::type
- The type of the item. E.g. "artist", "track", "contact".
-*/
-
-/*!
\class QIviSearchAndBrowseModel
\inmodule QtIviCore
\brief The QIviSearchAndBrowseModel is a generic model which can be used to search, browse, filter and sort data.
@@ -393,7 +343,7 @@ void QIviSearchAndBrowseModelPrivate::updateContentType(const QString &contentTy
they are created instead of retrieving everything and sort or filter it locally. In addition the SearchAndBrowseModel
only fetches the data it really needs and can it can be configured how this can be done.
- All rows in the model need to be subclassed from SearchAndBrowseListItem.
+ All rows in the model need to be subclassed from SearchAndBrowseModelItem.
The following roles are available in this model:
@@ -697,7 +647,7 @@ QVariant QIviSearchAndBrowseModel::data(const QModelIndex &index, int role) cons
if (row >= d->m_fetchedDataCount - d->m_fetchMoreThreshold && canFetchMore(QModelIndex()))
emit fetchMoreThresholdReached();
- const QIviSearchAndBrowseListItem *item = d->itemAt(row);
+ const QIviSearchAndBrowseModelItem *item = d->itemAt(row);
if (!item)
return QVariant();
@@ -790,7 +740,7 @@ bool QIviSearchAndBrowseModel::canGoForward(int i) const
return false;
}
- const QIviSearchAndBrowseListItem *item = d->itemAt(i);
+ const QIviSearchAndBrowseModelItem *item = d->itemAt(i);
if (!item)
return false;
@@ -836,7 +786,7 @@ QIviSearchAndBrowseModel *QIviSearchAndBrowseModel::goForward(int i, NavigationT
return nullptr;
}
- const QIviSearchAndBrowseListItem *item = d->itemAt(i);
+ const QIviSearchAndBrowseModelItem *item = d->itemAt(i);
if (!item)
return nullptr;
diff --git a/src/ivicore/qivisearchandbrowsemodel.h b/src/ivicore/qivisearchandbrowsemodel.h
index 5cf26fa..ab32c24 100644
--- a/src/ivicore/qivisearchandbrowsemodel.h
+++ b/src/ivicore/qivisearchandbrowsemodel.h
@@ -51,21 +51,6 @@ class QIviSearchAndBrowseModelPrivate;
static const QLatin1String QIviStringSearchAndBrowseModelInterfaceName("com.qt-project.qtivi.SearchAndBrowseModel");
-class Q_QTIVICORE_EXPORT QIviSearchAndBrowseListItem
-{
- Q_GADGET
-
- Q_PROPERTY(QString id READ id)
- Q_PROPERTY(QString name READ name)
- Q_PROPERTY(QString type READ type)
-public:
- virtual ~QIviSearchAndBrowseListItem() {};
-
- virtual QString id() const { return QString(); }
- virtual QString name() const { return QString(); }
- virtual QString type() const { return QString(); }
-};
-
class Q_QTIVICORE_EXPORT QIviSearchAndBrowseModel : public QIviAbstractFeatureListModel
{
Q_OBJECT
@@ -172,6 +157,4 @@ private:
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QIviSearchAndBrowseListItem)
-
#endif // QIVISEARCHANDBROWSEMODEL_H
diff --git a/src/ivicore/qivisearchandbrowsemodel_p.h b/src/ivicore/qivisearchandbrowsemodel_p.h
index ebbd4a3..9514941 100644
--- a/src/ivicore/qivisearchandbrowsemodel_p.h
+++ b/src/ivicore/qivisearchandbrowsemodel_p.h
@@ -57,6 +57,7 @@
#include "qivisearchandbrowsemodelinterface.h"
#include "qivisearchandbrowsemodel.h"
+#include "qivisearchandbrowsemodelitem.h"
#include "qiviqueryterm.h"
#include <QUuid>
@@ -79,7 +80,7 @@ public:
void checkType();
void clearToDefaults();
void setCanGoBack(bool canGoBack);
- const QIviSearchAndBrowseListItem *itemAt(int i) const;
+ const QIviSearchAndBrowseModelItem *itemAt(int i) const;
QIviSearchAndBrowseModelInterface* searchBackend() const;
void updateContentType(const QString &contentType);
diff --git a/src/ivicore/qivisearchandbrowsemodelitem.cpp b/src/ivicore/qivisearchandbrowsemodelitem.cpp
new file mode 100644
index 0000000..ce33e37
--- /dev/null
+++ b/src/ivicore/qivisearchandbrowsemodelitem.cpp
@@ -0,0 +1,172 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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 Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** 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-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: LGPL-3.0
+**
+****************************************************************************/
+
+#include "qivisearchandbrowsemodelitem.h"
+
+QT_BEGIN_NAMESPACE
+
+class QIviSearchAndBrowseModelItemPrivate : public QSharedData
+{
+public:
+ QIviSearchAndBrowseModelItemPrivate()
+ {}
+
+ QIviSearchAndBrowseModelItemPrivate(const QIviSearchAndBrowseModelItemPrivate &other)
+ : QSharedData(other)
+ , m_id(other.m_id)
+ {}
+
+ QString m_id;
+};
+
+QT_END_NAMESPACE
+
+/*!
+ \class QIviSearchAndBrowseModelItem
+ \inmodule QtIviCore
+ \brief The QIviSearchAndBrowseModelItem is the base class of a row in the QIviSearchAndBrowseModel model.
+*/
+
+/*!
+ \qmltype SearchAndBrowseModelItem
+ \qmlabstract
+ \instantiates QIviSearchAndBrowseModelItem
+ \inqmlmodule QtIvi
+ \brief The SearchAndBrowseModelItem is the base class of a row in the SearchAndBrowseModel model.
+
+ \note This item is not creatable from QML.
+*/
+
+/*!
+ \qmlproperty string SearchAndBrowseModelItem::id
+ A unique identifier, which can be used to identify this item.
+
+ This is mainly used by the backend to implement filtering or browsing.
+*/
+
+/*!
+ \property QIviSearchAndBrowseModelItem::id
+ A unique identifier, which can be used to identify this item.
+
+ This is mainly used by the backend to implement filtering or browsing.
+*/
+
+/*!
+ \qmlproperty string SearchAndBrowseModelItem::name
+ The name of the item. E.g. The name of a contact in a addressbook, or the artist-name in a list of artists.
+*/
+
+/*!
+ \property QIviSearchAndBrowseModelItem::name
+ The name of the item. E.g. The name of a contact in a addressbook, or the artist-name in a list of artists.
+*/
+
+/*!
+ \qmlproperty string SearchAndBrowseModelItem::type
+ The type of the item. E.g. "artist", "track", "contact".
+*/
+
+/*!
+ \property QIviSearchAndBrowseModelItem::type
+ The type of the item. E.g. "artist", "track", "contact".
+*/
+
+
+QIviSearchAndBrowseModelItem::QIviSearchAndBrowseModelItem()
+ : d(new QIviSearchAndBrowseModelItemPrivate)
+{
+
+}
+
+QIviSearchAndBrowseModelItem::QIviSearchAndBrowseModelItem(const QIviSearchAndBrowseModelItem &rhs)
+ : d(rhs.d)
+{
+
+}
+
+QIviSearchAndBrowseModelItem &QIviSearchAndBrowseModelItem::operator=(const QIviSearchAndBrowseModelItem &rhs)
+{
+ if (this != &rhs)
+ d.operator=(rhs.d);
+ return *this;
+}
+
+QIviSearchAndBrowseModelItem::~QIviSearchAndBrowseModelItem()
+{
+}
+
+QString QIviSearchAndBrowseModelItem::id() const
+{
+ return d->m_id;
+}
+
+void QIviSearchAndBrowseModelItem::setId(const QString &id)
+{
+ d->m_id = id;
+}
+
+QString QIviSearchAndBrowseModelItem::name() const
+{
+ return QString();
+}
+
+QString QIviSearchAndBrowseModelItem::type() const
+{
+ return QString();
+}
+
+/*!
+ Returns \e true if this item is equal to \a other; otherwise returns false.
+
+ \sa operator!=()
+*/
+bool QIviSearchAndBrowseModelItem::operator==(const QIviSearchAndBrowseModelItem &other)
+{
+ return (d->m_id == other.d->m_id);
+}
+
+/*!
+ \fn bool QIviSearchAndBrowseModelItem::operator!=(const QIviSearchAndBrowseModelItem &other)
+
+ Returns \e true if this item is not equal to \a other; otherwise returns false.
+
+ \sa operator==()
+*/
diff --git a/src/ivicore/qivisearchandbrowsemodelitem.h b/src/ivicore/qivisearchandbrowsemodelitem.h
new file mode 100644
index 0000000..d3d6f93
--- /dev/null
+++ b/src/ivicore/qivisearchandbrowsemodelitem.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite 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 Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** 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-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: LGPL-3.0
+**
+****************************************************************************/
+
+#ifndef QIVISEARCHANDBROWSEMODELITEM_H
+#define QIVISEARCHANDBROWSEMODELITEM_H
+
+#include <QtIviCore/qtiviglobal.h>
+#include <QtCore/QMetaType>
+#include <QtCore/qobjectdefs.h>
+#include <QtCore/QSharedDataPointer>
+
+QT_BEGIN_NAMESPACE
+
+class QIviSearchAndBrowseModelItemPrivate;
+
+class Q_QTIVICORE_EXPORT QIviSearchAndBrowseModelItem
+{
+ Q_GADGET
+
+ Q_PROPERTY(QString id READ id WRITE setId)
+ Q_PROPERTY(QString name READ name)
+ Q_PROPERTY(QString type READ type)
+
+public:
+ QIviSearchAndBrowseModelItem();
+ QIviSearchAndBrowseModelItem(const QIviSearchAndBrowseModelItem &);
+ QIviSearchAndBrowseModelItem &operator=(const QIviSearchAndBrowseModelItem &);
+ virtual ~QIviSearchAndBrowseModelItem();
+
+ virtual QString id() const;
+ virtual void setId(const QString &id);
+ virtual QString name() const;
+ virtual QString type() const;
+
+ bool operator==(const QIviSearchAndBrowseModelItem &other);
+ inline bool operator!=(const QIviSearchAndBrowseModelItem &other) { return !(*this == other); }
+
+private:
+ QSharedDataPointer<QIviSearchAndBrowseModelItemPrivate> d;
+};
+
+Q_DECLARE_TYPEINFO(QIviSearchAndBrowseModelItem, Q_MOVABLE_TYPE);
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QIviSearchAndBrowseModelItem)
+
+#endif // QIVISEARCHANDBROWSEMODELITEM_H
diff --git a/src/ivimedia/qiviamfmtuner.cpp b/src/ivimedia/qiviamfmtuner.cpp
index f9d77b2..969a28c 100644
--- a/src/ivimedia/qiviamfmtuner.cpp
+++ b/src/ivimedia/qiviamfmtuner.cpp
@@ -62,7 +62,7 @@ void QIviAmFmTunerPrivate::clearToDefaults()
{
m_frequency = -1;
m_band = QIviAmFmTuner::FMBand;
- m_station = QVariant();
+ m_station = QIviAmFmTunerStation();
}
void QIviAmFmTunerPrivate::onFrequencyChanged(int frequency)
@@ -85,10 +85,9 @@ void QIviAmFmTunerPrivate::onBandChanged(QIviAmFmTuner::Band band)
emit q->bandChanged(band);
}
-void QIviAmFmTunerPrivate::onStationChanged(const QVariant &station)
+void QIviAmFmTunerPrivate::onStationChanged(const QIviAmFmTunerStation &station)
{
- const QIviAmFmTunerStation *st = stationItem(station);
- if (st && m_station == station)
+ if (m_station == station)
return;
Q_Q(QIviAmFmTuner);
@@ -96,28 +95,6 @@ void QIviAmFmTunerPrivate::onStationChanged(const QVariant &station)
emit q->stationChanged(station);
}
-//TODO replace me by a generic function for all classes
-const QIviAmFmTunerStation *QIviAmFmTunerPrivate::stationItem(const QVariant &item)
-{
- const void *data = item.constData();
-
- QMetaType type(item.userType());
- if (!type.flags().testFlag(QMetaType::IsGadget)) {
- qCritical() << "The passed QVariant needs to use the Q_GADGET macro";
- return nullptr;
- }
-
- const QMetaObject *mo = type.metaObject();
- while (mo) {
- if (mo->className() == QIviAmFmTunerStation::staticMetaObject.className())
- return reinterpret_cast<const QIviAmFmTunerStation*>(data);
- mo = mo->superClass();
- }
-
- qCritical() << "The passed QVariant is not derived from QIviPlayableItem";
- return nullptr;
-}
-
QIviAmFmTunerBackendInterface *QIviAmFmTunerPrivate::tunerBackend() const
{
Q_Q(const QIviAmFmTuner);
@@ -212,7 +189,7 @@ QIviAmFmTuner::Band QIviAmFmTuner::band() const
\property QIviAmFmTuner::station
\brief The currently tuned station.
*/
-QVariant QIviAmFmTuner::station() const
+QIviAmFmTunerStation QIviAmFmTuner::station() const
{
Q_D(const QIviAmFmTuner);
return d->m_station;
@@ -225,22 +202,18 @@ QVariant QIviAmFmTuner::station() const
*/
/*!
- \fn void QIviAmFmTuner::tune(const QVariant &station)
+ \fn void QIviAmFmTuner::tune(const QIviAmFmTunerStation &station)
Tunes to the provided \a station.
*/
-//TODO Change this to use the real class, but for this we need to refactor the Q_GADGET classes to real classes with copy constructors and propably QSharedData
-void QIviAmFmTuner::tune(const QVariant &station)
+void QIviAmFmTuner::tune(const QIviAmFmTunerStation &station)
{
Q_D(QIviAmFmTuner);
- const QIviAmFmTunerStation *stationItem = d->stationItem(station);
- if (!stationItem)
- return;
- if (stationItem->band() != d->m_band)
- setBand(stationItem->band());
- if (stationItem->frequency() != d->m_frequency)
- setFrequency(stationItem->frequency());
+ if (station.band() != d->m_band)
+ setBand(station.band());
+ if (station.frequency() != d->m_frequency)
+ setFrequency(station.frequency());
}
void QIviAmFmTuner::setFrequency(int frequency)
diff --git a/src/ivimedia/qiviamfmtuner.h b/src/ivimedia/qiviamfmtuner.h
index ea8a55c..ef047ee 100644
--- a/src/ivimedia/qiviamfmtuner.h
+++ b/src/ivimedia/qiviamfmtuner.h
@@ -48,6 +48,7 @@
QT_BEGIN_NAMESPACE
+class QIviAmFmTunerStation;
class QIviAmFmTunerPrivate;
static const QLatin1String QIviStringAmFmTunerInterfaceName("com.qt-project.qtivi.AmFmTuner");
@@ -58,7 +59,7 @@ class Q_QTIVIMEDIA_EXPORT QIviAmFmTuner : public QIviAbstractFeature
Q_PROPERTY(int frequency READ frequency WRITE setFrequency NOTIFY frequencyChanged)
Q_PROPERTY(QIviAmFmTuner::Band band READ band WRITE setBand NOTIFY bandChanged)
- Q_PROPERTY(QVariant station READ station NOTIFY stationChanged)
+ Q_PROPERTY(QIviAmFmTunerStation station READ station NOTIFY stationChanged)
public:
explicit QIviAmFmTuner(QObject *parent = Q_NULLPTR);
@@ -72,9 +73,9 @@ public:
int frequency() const;
Band band() const;
- QVariant station() const;
+ QIviAmFmTunerStation station() const;
- Q_INVOKABLE void tune(const QVariant &station);
+ Q_INVOKABLE void tune(const QIviAmFmTunerStation &station);
public Q_SLOTS:
void setFrequency(int frequency);
@@ -87,7 +88,7 @@ public Q_SLOTS:
Q_SIGNALS:
void frequencyChanged(int frequency);
void bandChanged(QIviAmFmTuner::Band band);
- void stationChanged(const QVariant &station);
+ void stationChanged(const QIviAmFmTunerStation &station);
protected:
QIviAmFmTuner(QIviAmFmTunerPrivate &dd, QObject *parent = Q_NULLPTR);
@@ -101,7 +102,7 @@ private:
Q_DECLARE_PRIVATE(QIviAmFmTuner)
Q_PRIVATE_SLOT(d_func(), void onFrequencyChanged(int frequency))
Q_PRIVATE_SLOT(d_func(), void onBandChanged(QIviAmFmTuner::Band band))
- Q_PRIVATE_SLOT(d_func(), void onStationChanged(const QVariant &station))
+ Q_PRIVATE_SLOT(d_func(), void onStationChanged(const QIviAmFmTunerStation &station))
};
QT_END_NAMESPACE
diff --git a/src/ivimedia/qiviamfmtuner_p.h b/src/ivimedia/qiviamfmtuner_p.h
index 7abbd48..85e643d 100644
--- a/src/ivimedia/qiviamfmtuner_p.h
+++ b/src/ivimedia/qiviamfmtuner_p.h
@@ -71,15 +71,14 @@ public:
void clearToDefaults();
void onFrequencyChanged(int frequency);
void onBandChanged(QIviAmFmTuner::Band band);
- void onStationChanged(const QVariant &station);
+ void onStationChanged(const QIviAmFmTunerStation &station);
- const QIviAmFmTunerStation *stationItem(const QVariant &item);
QIviAmFmTunerBackendInterface *tunerBackend() const;
QIviAmFmTuner * const q_ptr;
int m_frequency;
QIviAmFmTuner::Band m_band;
- QVariant m_station;
+ QIviAmFmTunerStation m_station;
Q_DECLARE_PUBLIC(QIviAmFmTuner)
};
diff --git a/src/ivimedia/qiviamfmtunerbackendinterface.cpp b/src/ivimedia/qiviamfmtunerbackendinterface.cpp
index cdfc4d6..e915c78 100644
--- a/src/ivimedia/qiviamfmtunerbackendinterface.cpp
+++ b/src/ivimedia/qiviamfmtunerbackendinterface.cpp
@@ -138,7 +138,7 @@ QIviAmFmTunerBackendInterface::QIviAmFmTunerBackendInterface(QObject *parent)
*/
/*!
- \fn QIviAmFmTunerBackendInterface::stationChanged(QVariant station)
+ \fn QIviAmFmTunerBackendInterface::stationChanged(const QIviAmFmTunerStation &station)
Emitted when the current station changed. The new station is passed as \a station.
*/
diff --git a/src/ivimedia/qiviamfmtunerbackendinterface.h b/src/ivimedia/qiviamfmtunerbackendinterface.h
index 9e06798..6577c2a 100644
--- a/src/ivimedia/qiviamfmtunerbackendinterface.h
+++ b/src/ivimedia/qiviamfmtunerbackendinterface.h
@@ -68,7 +68,7 @@ public:
Q_SIGNALS:
void frequencyChanged(int frequency);
void bandChanged(QIviAmFmTuner::Band band);
- void stationChanged(QVariant station);
+ void stationChanged(const QIviAmFmTunerStation &station);
};
diff --git a/src/ivimedia/qiviplayableitem.cpp b/src/ivimedia/qiviplayableitem.cpp
index 045fff1..3d5f777 100644
--- a/src/ivimedia/qiviplayableitem.cpp
+++ b/src/ivimedia/qiviplayableitem.cpp
@@ -41,6 +41,58 @@
#include "qiviplayableitem.h"
+QT_BEGIN_NAMESPACE
+
+class QIviPlayableItemPrivate : public QSharedData
+{
+public:
+ QIviPlayableItemPrivate()
+ {}
+
+ QIviPlayableItemPrivate(const QIviPlayableItemPrivate &other)
+ : QSharedData(other)
+ , m_url(other.m_url)
+ {}
+
+ QUrl m_url;
+};
+
+class QIviAudioTrackItemPrivate : public QSharedData
+{
+public:
+ QIviAudioTrackItemPrivate()
+ : m_year(-1)
+ , m_trackNumber(-1)
+ , m_duration(-1)
+ , m_rating(-1)
+ {}
+
+ QIviAudioTrackItemPrivate(const QIviAudioTrackItemPrivate &other)
+ : QSharedData(other)
+ , m_title(other.m_title)
+ , m_artist(other.m_artist)
+ , m_album(other.m_album)
+ , m_genre(other.m_genre)
+ , m_year(other.m_year)
+ , m_trackNumber(other.m_trackNumber)
+ , m_duration(other.m_duration)
+ , m_coverArtUrl(other.m_coverArtUrl)
+ , m_rating(other.m_rating)
+ {}
+
+ QString m_title;
+ QString m_artist;
+ QString m_album;
+ QString m_genre;
+ int m_year;
+ int m_trackNumber;
+ qint64 m_duration;
+ QUrl m_coverArtUrl;
+ int m_rating;
+};
+
+QT_END_NAMESPACE
+
/*!
\class QIviPlayableItem
\inmodule QtIviMedia
@@ -74,13 +126,66 @@
*/
QIviPlayableItem::QIviPlayableItem()
+ : QIviSearchAndBrowseModelItem()
+ , d(new QIviPlayableItemPrivate)
{
}
+QIviPlayableItem::QIviPlayableItem(const QIviPlayableItem &rhs)
+ : QIviSearchAndBrowseModelItem(rhs)
+ , d(rhs.d)
+{
+}
+
+QIviPlayableItem &QIviPlayableItem::operator=(const QIviPlayableItem &rhs)
+{
+ QIviSearchAndBrowseModelItem::operator=(rhs);
+ if (this != &rhs)
+ d.operator=(rhs.d);
+ return *this;
+}
+
QIviPlayableItem::~QIviPlayableItem()
{
}
+QUrl QIviPlayableItem::url() const
+{
+ return d->m_url;
+}
+
+void QIviPlayableItem::setUrl(const QUrl &url)
+{
+ d->m_url = url;
+}
+
+/*!
+ \reimp
+*/
+QString QIviPlayableItem::type() const
+{
+ return QLatin1String("playableitem");
+}
+
+/*!
+ Returns \e true if this item is equal to \a other; otherwise returns false.
+
+ \sa operator!=()
+*/
+bool QIviPlayableItem::operator==(const QIviPlayableItem &other)
+{
+ return (QIviSearchAndBrowseModelItem::operator==(other) &&
+ d->m_url == other.d->m_url);
+}
+
+/*!
+ \fn bool QIviPlayableItem::operator!=(const QIviPlayableItem &other)
+
+ Returns \e true if this item is not equal to \a other; otherwise returns false.
+
+ \sa operator==()
+*/
+
/*!
\class QIviAudioTrackItem
\inmodule QtIviMedia
@@ -189,7 +294,7 @@ QIviPlayableItem::~QIviPlayableItem()
*/
/*!
- \property QIviAudioTrackItem::coverArt
+ \property QIviAudioTrackItem::coverArtUrl
Holds the cover art of the audio track.
@@ -212,9 +317,159 @@ QIviPlayableItem::~QIviPlayableItem()
This is usually a value between \e 0 and \e 5.
*/
QIviAudioTrackItem::QIviAudioTrackItem()
+ : QIviPlayableItem()
+ , d(new QIviAudioTrackItemPrivate)
+{
+}
+
+QIviAudioTrackItem::QIviAudioTrackItem(const QIviAudioTrackItem &rhs)
+ : QIviPlayableItem(rhs)
+ , d(rhs.d)
{
}
+QIviAudioTrackItem &QIviAudioTrackItem::operator=(const QIviAudioTrackItem &rhs)
+{
+ QIviPlayableItem::operator=(rhs);
+ if (this != &rhs)
+ d.operator=(rhs.d);
+ return *this;
+}
+
QIviAudioTrackItem::~QIviAudioTrackItem()
{
}
+
+QString QIviAudioTrackItem::title()
+{
+ return d->m_title;
+}
+
+void QIviAudioTrackItem::setTitle(const QString &title)
+{
+ d->m_title = title;
+}
+
+QString QIviAudioTrackItem::artist()
+{
+ return d->m_artist;
+}
+
+void QIviAudioTrackItem::setArtist(const QString &artist)
+{
+ d->m_artist = artist;
+}
+
+QString QIviAudioTrackItem::album()
+{
+ return d->m_album;
+}
+
+void QIviAudioTrackItem::setAlbum(const QString &album)
+{
+ d->m_album = album;
+}
+
+QString QIviAudioTrackItem::genre()
+{
+ return d->m_genre;
+}
+
+void QIviAudioTrackItem::setGenre(const QString &genre)
+{
+ d->m_genre = genre;
+}
+
+int QIviAudioTrackItem::year()
+{
+ return d->m_year;
+}
+
+void QIviAudioTrackItem::setYear(int year)
+{
+ d->m_year = year;
+}
+
+int QIviAudioTrackItem::trackNumber()
+{
+ return d->m_trackNumber;
+}
+
+void QIviAudioTrackItem::setTrackNumber(int trackNumber)
+{
+ d->m_trackNumber = trackNumber;
+}
+
+qint64 QIviAudioTrackItem::duration()
+{
+ return d->m_duration;
+}
+
+void QIviAudioTrackItem::setDuration(qint64 duration)
+{
+ d->m_duration = duration;
+}
+
+QUrl QIviAudioTrackItem::coverArtUrl()
+{
+ return d->m_coverArtUrl;
+}
+
+void QIviAudioTrackItem::setCoverArtUrl(const QUrl &url)
+{
+ d->m_coverArtUrl = url;
+}
+
+int QIviAudioTrackItem::rating()
+{
+ return d->m_rating;
+}
+
+
+void QIviAudioTrackItem::setRating(int rating)
+{
+ d->m_rating = rating;
+}
+
+/*!
+ \reimp
+*/
+QString QIviAudioTrackItem::name() const
+{
+ return d->m_title;
+}
+
+/*!
+ \reimp
+*/
+QString QIviAudioTrackItem::type() const
+{
+ return QLatin1String("audiotrack");
+}
+
+/*!
+ Returns \e true if this item is equal to \a other; otherwise returns false.
+
+ \sa operator!=()
+*/
+bool QIviAudioTrackItem::operator==(const QIviAudioTrackItem &other)
+{
+ return (QIviPlayableItem::operator==(other) &&
+ d->m_title == other.d->m_title &&
+ d->m_artist == other.d->m_artist &&
+ d->m_album == other.d->m_album &&
+ d->m_genre == other.d->m_genre &&
+ d->m_year == other.d->m_year &&
+ d->m_trackNumber == other.d->m_trackNumber &&
+ d->m_duration == other.d->m_duration &&
+ d->m_coverArtUrl == other.d->m_coverArtUrl &&
+ d->m_rating == other.d->m_rating);
+}
+
+/*!
+ \fn bool QIviAudioTrackItem::operator!=(const QIviAudioTrackItem &other)
+
+ Returns \e true if this item is not equal to \a other; otherwise returns false.
+
+ \sa operator==()
+*/
diff --git a/src/ivimedia/qiviplayableitem.h b/src/ivimedia/qiviplayableitem.h
index 5cd96c7..0716e1e 100644
--- a/src/ivimedia/qiviplayableitem.h
+++ b/src/ivimedia/qiviplayableitem.h
@@ -44,50 +44,86 @@
#include <QtIviMedia/qtivimediaglobal.h>
#include <QtIviCore/QIviSearchAndBrowseModel>
+#include <QtIviCore/QIviSearchAndBrowseModelItem>
#include <QtCore/QUrl>
QT_BEGIN_NAMESPACE
-class Q_QTIVIMEDIA_EXPORT QIviPlayableItem : public QIviSearchAndBrowseListItem
+class QIviPlayableItemPrivate;
+class QIviAudioTrackItemPrivate;
+
+class Q_QTIVIMEDIA_EXPORT QIviPlayableItem : public QIviSearchAndBrowseModelItem
{
Q_GADGET
- Q_PROPERTY(QUrl url READ url)
+ Q_PROPERTY(QUrl url READ url WRITE setUrl)
public:
QIviPlayableItem();
+ QIviPlayableItem(const QIviPlayableItem &);
+ QIviPlayableItem &operator=(const QIviPlayableItem &);
virtual ~QIviPlayableItem();
- virtual QUrl url() const { return QUrl(); }
+
+ virtual QUrl url() const;
+ virtual void setUrl(const QUrl &url);
+ virtual QString type() const Q_DECL_OVERRIDE;
+
+ bool operator==(const QIviPlayableItem &other);
+ inline bool operator!=(const QIviPlayableItem &other) { return !(*this == other); }
+
+private:
+ QSharedDataPointer<QIviPlayableItemPrivate> d;
};
+Q_DECLARE_TYPEINFO(QIviPlayableItem, Q_MOVABLE_TYPE);
class Q_QTIVIMEDIA_EXPORT QIviAudioTrackItem : public QIviPlayableItem
{
Q_GADGET
- Q_PROPERTY(QString title READ title)
- Q_PROPERTY(QString artist READ artist)
- Q_PROPERTY(QString album READ album)
- Q_PROPERTY(QString genre READ genre)
- Q_PROPERTY(int year READ year) //FIXME What type should we use here ?
- Q_PROPERTY(int trackNumber READ trackNumber)
- Q_PROPERTY(qint64 duration READ duration)
- Q_PROPERTY(QString coverArt READ coverArt) //FIXME How to best serve this ?
- Q_PROPERTY(int rating READ rating)
+ Q_PROPERTY(QString title READ title WRITE setTitle)
+ Q_PROPERTY(QString artist READ artist WRITE setArtist)
+ Q_PROPERTY(QString album READ album WRITE setAlbum)
+ Q_PROPERTY(QString genre READ genre WRITE setGenre)
+ Q_PROPERTY(int year READ year WRITE setYear)
+ Q_PROPERTY(int trackNumber READ trackNumber WRITE setTrackNumber)
+ Q_PROPERTY(qint64 duration READ duration WRITE setDuration)
+ Q_PROPERTY(QUrl coverArtUrl READ coverArtUrl WRITE setCoverArtUrl)
+ Q_PROPERTY(int rating READ rating WRITE setRating)
public:
QIviAudioTrackItem();
+ QIviAudioTrackItem(const QIviAudioTrackItem &);
+ QIviAudioTrackItem &operator=(const QIviAudioTrackItem &);
virtual ~QIviAudioTrackItem();
- virtual QString title() { return QString(); }
- virtual QString artist() { return QString(); }
- virtual QString album() { return QString(); }
- virtual QString genre() { return QString(); }
- virtual int year() { return -1; }
- virtual int trackNumber() { return -1; }
- virtual qint64 duration() { return -1; }
- virtual QString coverArt() { return QString(); }
- virtual int rating() { return -1; }
+ virtual QString title();
+ virtual void setTitle(const QString &title);
+ virtual QString artist();
+ virtual void setArtist(const QString &artist);
+ virtual QString album();
+ virtual void setAlbum(const QString &album);
+ virtual QString genre();
+ virtual void setGenre(const QString &genre);
+ virtual int year();
+ virtual void setYear(int year);
+ virtual int trackNumber();
+ virtual void setTrackNumber(int trackNumber);
+ virtual qint64 duration();
+ virtual void setDuration(qint64 duration);
+ virtual QUrl coverArtUrl();
+ virtual void setCoverArtUrl(const QUrl &url);
+ virtual int rating();
+ virtual void setRating(int rating);
+ virtual QString name() const Q_DECL_OVERRIDE;
+ virtual QString type() const Q_DECL_OVERRIDE;
+
+ bool operator==(const QIviAudioTrackItem &other);
+ inline bool operator!=(const QIviAudioTrackItem &other) { return !(*this == other); }
+
+private:
+ QSharedDataPointer<QIviAudioTrackItemPrivate> d;
};
+Q_DECLARE_TYPEINFO(QIviAudioTrackItem, Q_MOVABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/ivimedia/qiviplayqueue.cpp b/src/ivimedia/qiviplayqueue.cpp
index 4b9ca90..76d7219 100644
--- a/src/ivimedia/qiviplayqueue.cpp
+++ b/src/ivimedia/qiviplayqueue.cpp
@@ -443,7 +443,7 @@ QVariant QIviPlayQueue::data(const QModelIndex &index, int role) const
if (row >= d->m_fetchedDataCount - d->m_fetchMoreThreshold && canFetchMore(QModelIndex()))
emit fetchMoreThresholdReached();
- const QIviSearchAndBrowseListItem *item = d->itemAt(row);
+ const QIviSearchAndBrowseModelItem *item = d->itemAt(row);
if (!item)
return QVariant();
diff --git a/src/ivimedia/qivitunerstation.cpp b/src/ivimedia/qivitunerstation.cpp
index 7a5d9d9..cfdfb6f 100644
--- a/src/ivimedia/qivitunerstation.cpp
+++ b/src/ivimedia/qivitunerstation.cpp
@@ -41,20 +41,144 @@
#include "qivitunerstation.h"
+QT_BEGIN_NAMESPACE
+
+class QIviTunerStationPrivate : public QSharedData
+{
+public:
+ QIviTunerStationPrivate()
+ : m_frequency(-1)
+ {}
+
+ QIviTunerStationPrivate(const QIviTunerStationPrivate &other)
+ : QSharedData(other)
+ , m_stationName(other.m_stationName)
+ , m_frequency(other.m_frequency)
+ {}
+
+ QString m_stationName;
+ int m_frequency;
+};
+
+class QIviAmFmTunerStationPrivate : public QSharedData
+{
+public:
+ QIviAmFmTunerStationPrivate()
+ : m_band(QIviAmFmTuner::FMBand)
+ {}
+
+ QIviAmFmTunerStationPrivate(const QIviAmFmTunerStationPrivate &other)
+ : QSharedData(other)
+ , m_band(other.m_band)
+ {}
+
+ QIviAmFmTuner::Band m_band;
+};
+
+QT_END_NAMESPACE
+
QIviTunerStation::QIviTunerStation()
- : QIviSearchAndBrowseListItem()
+ : QIviSearchAndBrowseModelItem()
+ , d(new QIviTunerStationPrivate)
+{
+}
+
+QIviTunerStation::QIviTunerStation(const QIviTunerStation &rhs)
+ : QIviSearchAndBrowseModelItem(rhs)
+ , d(rhs.d)
+{
+}
+
+QIviTunerStation &QIviTunerStation::operator=(const QIviTunerStation &rhs)
{
+ QIviSearchAndBrowseModelItem::operator=(rhs);
+ if (this != &rhs)
+ d.operator=(rhs.d);
+ return *this;
}
QIviTunerStation::~QIviTunerStation()
{
}
+QString QIviTunerStation::stationName() const
+{
+ return d->m_stationName;
+}
+
+void QIviTunerStation::setStationName(const QString &stationName)
+{
+ d->m_stationName = stationName;
+}
+
+int QIviTunerStation::frequency() const
+{
+ return d->m_frequency;
+}
+
+void QIviTunerStation::setFrequency(int frequency)
+{
+ d->m_frequency = frequency;
+}
+
+QString QIviTunerStation::name() const
+{
+ return d->m_stationName;
+}
+
+QString QIviTunerStation::type() const
+{
+ return QLatin1String("tunerstation");
+}
+
+bool QIviTunerStation::operator==(const QIviTunerStation &other)
+{
+ return (QIviSearchAndBrowseModelItem::operator==(other) &&
+ d->m_stationName == other.d->m_stationName &&
+ d->m_frequency == other.d->m_frequency);
+}
+
QIviAmFmTunerStation::QIviAmFmTunerStation()
: QIviTunerStation()
+ , d(new QIviAmFmTunerStationPrivate)
{
}
+QIviAmFmTunerStation::QIviAmFmTunerStation(const QIviAmFmTunerStation &rhs)
+ : QIviTunerStation(rhs)
+ , d(rhs.d)
+{
+}
+
+QIviAmFmTunerStation &QIviAmFmTunerStation::operator=(const QIviAmFmTunerStation &rhs)
+{
+ QIviTunerStation::operator=(rhs);
+ if (this != &rhs)
+ d.operator=(rhs.d);
+ return *this;
+}
+
QIviAmFmTunerStation::~QIviAmFmTunerStation()
{
}
+
+QIviAmFmTuner::Band QIviAmFmTunerStation::band() const
+{
+ return d->m_band;
+}
+
+void QIviAmFmTunerStation::setBand(QIviAmFmTuner::Band band)
+{
+ d->m_band = band;
+}
+
+QString QIviAmFmTunerStation::type() const
+{
+ return QLatin1String("amfmtunerstation");
+}
+
+bool QIviAmFmTunerStation::operator==(const QIviAmFmTunerStation &other)
+{
+ return (QIviTunerStation::operator==(other) &&
+ d->m_band == other.d->m_band);
+}
diff --git a/src/ivimedia/qivitunerstation.h b/src/ivimedia/qivitunerstation.h
index bbdda77..53b5960 100644
--- a/src/ivimedia/qivitunerstation.h
+++ b/src/ivimedia/qivitunerstation.h
@@ -44,37 +44,64 @@
#include <QtIviMedia/qtivimediaglobal.h>
#include <QtIviMedia/QIviAmFmTuner>
-#include <QtIviCore/QIviSearchAndBrowseListItem>
+#include <QtIviCore/QIviSearchAndBrowseModelItem>
QT_BEGIN_NAMESPACE
-class Q_QTIVIMEDIA_EXPORT QIviTunerStation : public QIviSearchAndBrowseListItem
+class QIviTunerStationPrivate;
+class QIviAmFmTunerStationPrivate;
+
+class Q_QTIVIMEDIA_EXPORT QIviTunerStation : public QIviSearchAndBrowseModelItem
{
Q_GADGET
- Q_PROPERTY(QString stationName READ stationName)
- Q_PROPERTY(int frequency READ frequency)
+ Q_PROPERTY(QString stationName READ stationName WRITE setStationName)
+ Q_PROPERTY(int frequency READ frequency WRITE setFrequency)
public:
QIviTunerStation();
+ QIviTunerStation(const QIviTunerStation &);
+ QIviTunerStation &operator=(const QIviTunerStation &);
virtual ~QIviTunerStation();
- virtual QString stationName() const { return QString(); }
- virtual int frequency() const { return -1; }
+ virtual QString stationName() const;
+ virtual void setStationName(const QString &stationName);
+ virtual int frequency() const;
+ virtual void setFrequency(int frequency);
+ virtual QString name() const Q_DECL_OVERRIDE;
+ virtual QString type() const Q_DECL_OVERRIDE;
+
+ bool operator==(const QIviTunerStation &other);
+ inline bool operator!=(const QIviTunerStation &other) { return !(*this == other); }
+
+private:
+ QSharedDataPointer<QIviTunerStationPrivate> d;
};
+Q_DECLARE_TYPEINFO(QIviTunerStation, Q_MOVABLE_TYPE);
class Q_QTIVIMEDIA_EXPORT QIviAmFmTunerStation : public QIviTunerStation
{
Q_GADGET
- Q_PROPERTY(QIviAmFmTuner::Band band READ band)
+ Q_PROPERTY(QIviAmFmTuner::Band band READ band WRITE setBand)
public:
QIviAmFmTunerStation();
+ QIviAmFmTunerStation(const QIviAmFmTunerStation &);
+ QIviAmFmTunerStation &operator=(const QIviAmFmTunerStation &);
virtual ~QIviAmFmTunerStation();
- virtual QIviAmFmTuner::Band band() const { return QIviAmFmTuner::FMBand; }
+ virtual QIviAmFmTuner::Band band() const;
+ virtual void setBand(QIviAmFmTuner::Band band);
+ virtual QString type() const Q_DECL_OVERRIDE;
+
+ bool operator==(const QIviAmFmTunerStation &other);
+ inline bool operator!=(const QIviAmFmTunerStation &other) { return !(*this == other); }
+
+private:
+ QSharedDataPointer<QIviAmFmTunerStationPrivate> d;
};
+Q_DECLARE_TYPEINFO(QIviAmFmTunerStation, Q_MOVABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp
index 01fc0c4..74fc723 100644
--- a/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp
+++ b/src/plugins/ivimedia/media_simulator/mediaplayerbackend.cpp
@@ -121,7 +121,7 @@ void MediaPlayerBackend::fetchData(int start, int count)
void MediaPlayerBackend::insert(int index, const QIviPlayableItem *item)
{
- if (item->type() != "track")
+ if (item->type() != "audiotrack")
return;
int track_index = item->id().toInt();
@@ -181,7 +181,7 @@ void MediaPlayerBackend::doSqlOperation(MediaPlayerBackend::OperationType type,
QString album = query.value(2).toString();
//Creating the TrackItem in an factory with would make this more performant
- TrackItem item;
+ QIviAudioTrackItem item;
item.setId(id);
item.setTitle(query.value(3).toString());
item.setArtist(artist);
diff --git a/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.cpp b/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.cpp
index 977e8df..29433fa 100644
--- a/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.cpp
+++ b/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.cpp
@@ -51,10 +51,9 @@ SearchAndBrowseBackend::SearchAndBrowseBackend(const QSqlDatabase &database, QOb
: QIviSearchAndBrowseModelInterface(parent)
{
qRegisterMetaType<SearchAndBrowseItem>();
- qRegisterMetaType<TrackItem>();
registerContentType<SearchAndBrowseItem>("artist");
registerContentType<SearchAndBrowseItem>("album");
- registerContentType<TrackItem>("track");
+ registerContentType<QIviAudioTrackItem>("track");
m_db = database;
m_db.open();
@@ -148,7 +147,7 @@ void SearchAndBrowseBackend::search(const QUuid &identifier, const QString &quer
QString album = query.value(1).toString();
if (type == QLatin1String("track")) {
- TrackItem item;
+ QIviAudioTrackItem item;
item.setId(query.value(6).toString());
item.setTitle(query.value(2).toString());
item.setArtist(artist);
diff --git a/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.h b/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.h
index 4619706..435cd73 100644
--- a/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.h
+++ b/src/plugins/ivimedia/media_simulator/searchandbrowsebackend.h
@@ -48,7 +48,7 @@
#include <QSqlDatabase>
#include <QStack>
-class SearchAndBrowseItem : public QIviSearchAndBrowseListItem
+class SearchAndBrowseItem : public QIviSearchAndBrowseModelItem
{
Q_GADGET
@@ -65,33 +65,6 @@ private:
};
Q_DECLARE_METATYPE(SearchAndBrowseItem)
-class TrackItem : public QIviAudioTrackItem
-{
- Q_GADGET
-
-public:
- virtual QString id() const { return m_id; }
- void setId(const QString &id) { m_id = id; }
- virtual QString name() const { return m_title; }
- virtual QString type() const { return "track"; }
- virtual QString title() { return QString(); }
- void setTitle(const QString &title) { m_title = title; }
- virtual QString artist() { return QString(); }
- void setArtist(const QString &artist) { m_artist = artist; }
- virtual QString album() { return QString(); }
- void setAlbum(const QString &album) { m_artist = album; }
- virtual QUrl url() const { return m_url; }
- void setUrl(const QUrl &url) { m_url = url; }
-
-private:
- QString m_id;
- QString m_title;
- QString m_artist;
- QString m_album;
- QUrl m_url;
-};
-Q_DECLARE_METATYPE(TrackItem)
-
class SearchAndBrowseBackend : public QIviSearchAndBrowseModelInterface
{
Q_OBJECT
diff --git a/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.cpp b/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.cpp
index a7b64f0..cd16876 100644
--- a/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.cpp
+++ b/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.cpp
@@ -47,17 +47,17 @@ AmFmTunerBackend::AmFmTunerBackend(QObject *parent)
: QIviAmFmTunerBackendInterface(parent)
, m_band(QIviAmFmTuner::FMBand)
{
- qRegisterMetaType<AmFmStation>();
+ qRegisterMetaType<QIviAmFmTunerStation>();
- QVector<AmFmStation> fm_stations;
- AmFmStation radioQt;
+ QVector<QIviAmFmTunerStation> fm_stations;
+ QIviAmFmTunerStation radioQt;
radioQt.setId("0");
radioQt.setStationName("Radio Qt");
radioQt.setFrequency(87500000);
radioQt.setBand(QIviAmFmTuner::FMBand);
fm_stations.append(radioQt);
- AmFmStation qtRocksNonStop;
+ QIviAmFmTunerStation qtRocksNonStop;
qtRocksNonStop.setId("1");
qtRocksNonStop.setStationName("Qt Rocks non-stop");
qtRocksNonStop.setFrequency(102500000);
@@ -79,7 +79,7 @@ void AmFmTunerBackend::initialize()
{
emit bandChanged(m_band);
emit frequencyChanged(m_bandHash[m_band].m_frequency);
- emit stationChanged(QVariant::fromValue(m_bandHash[m_band].m_stations.at(0)));
+ emit stationChanged(m_bandHash[m_band].m_stations.at(0));
}
void AmFmTunerBackend::setFrequency(int frequency)
@@ -91,7 +91,7 @@ void AmFmTunerBackend::setFrequency(int frequency)
m_bandHash[m_band].m_frequency = frequency;
emit frequencyChanged(frequency);
- emit stationChanged(QVariant::fromValue(stationAt(m_bandHash[m_band].m_frequency)));
+ emit stationChanged(stationAt(m_bandHash[m_band].m_frequency));
}
void AmFmTunerBackend::setBand(QIviAmFmTuner::Band band)
@@ -104,7 +104,7 @@ void AmFmTunerBackend::setBand(QIviAmFmTuner::Band band)
m_band = band;
emit bandChanged(band);
emit frequencyChanged(m_bandHash[m_band].m_frequency);
- emit stationChanged(QVariant::fromValue(stationAt(m_bandHash[m_band].m_frequency)));
+ emit stationChanged(stationAt(m_bandHash[m_band].m_frequency));
}
void AmFmTunerBackend::stepUp()
@@ -123,7 +123,7 @@ void AmFmTunerBackend::seekUp()
{
qWarning() << "SIMULATION Seek Up";
- QVector<AmFmStation> stations = m_bandHash[m_band].m_stations;
+ QVector<QIviAmFmTunerStation> stations = m_bandHash[m_band].m_stations;
if (stations.count() == 0) {
return;
} else if (stations.count() == 1) {
@@ -142,7 +142,7 @@ void AmFmTunerBackend::seekDown()
{
qWarning() << "SIMULATION Seek Down";
- QVector<AmFmStation> stations = m_bandHash[m_band].m_stations;
+ QVector<QIviAmFmTunerStation> stations = m_bandHash[m_band].m_stations;
if (stations.count() == 0) {
return;
} else if (stations.count() == 1) {
@@ -157,21 +157,21 @@ void AmFmTunerBackend::seekDown()
}
}
-void AmFmTunerBackend::setCurrentStation(const AmFmStation& station)
+void AmFmTunerBackend::setCurrentStation(const QIviAmFmTunerStation &station)
{
m_bandHash[m_band].m_frequency = station.frequency();
qWarning() << "SIMULATION Station changed to" << station.stationName() << station.frequency();
emit frequencyChanged(station.frequency());
- emit stationChanged(QVariant::fromValue(station));
+ emit stationChanged(station);
}
int AmFmTunerBackend::stationIndexFromFrequency(int frequency) const
{
- QVector<AmFmStation> stations = m_bandHash[m_band].m_stations;
+ QVector<QIviAmFmTunerStation> stations = m_bandHash[m_band].m_stations;
for (int i=0; i < stations.count(); i++) {
- const AmFmStation& station = stations.at(i);
+ const QIviAmFmTunerStation& station = stations.at(i);
if (station.frequency() == frequency)
return i;
}
@@ -179,11 +179,11 @@ int AmFmTunerBackend::stationIndexFromFrequency(int frequency) const
return -1;
}
-AmFmStation AmFmTunerBackend::stationAt(int frequency) const
+QIviAmFmTunerStation AmFmTunerBackend::stationAt(int frequency) const
{
int index = stationIndexFromFrequency(frequency);
if (index != -1)
return m_bandHash[m_band].m_stations.at(index);
- return AmFmStation();
+ return QIviAmFmTunerStation();
}
diff --git a/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.h b/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.h
index 20f33b0..1d519ff 100644
--- a/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.h
+++ b/src/plugins/ivimedia/tuner_simulator/amfmtunerbackend.h
@@ -44,33 +44,7 @@
#include <QtIviMedia/QIviAmFmTunerBackendInterface>
#include <QtIviMedia/QIviTunerStation>
-
-class AmFmStation : public QIviAmFmTunerStation
-{
- Q_GADGET
-
-public:
- virtual QString id() const { return m_id; }
- void setId(const QString &id) { m_id = id; }
- virtual QString name() const { return m_stationName; }
- virtual QString type() const { return "amfmstation"; }
-
- virtual QString stationName() const { return m_stationName; }
- void setStationName(const QString &name) { m_stationName = name; }
-
- virtual int frequency() const { return m_frequency; }
- void setFrequency(int frequency) { m_frequency = frequency; }
-
- virtual QIviAmFmTuner::Band band() const { return m_band; }
- void setBand(QIviAmFmTuner::Band band) { m_band = band; }
-
-private:
- QString m_id;
- QString m_stationName;
- int m_frequency;
- QIviAmFmTuner::Band m_band;
-};
-Q_DECLARE_METATYPE(AmFmStation)
+#include <QtCore/QVector>
class AmFmTunerBackend : public QIviAmFmTunerBackendInterface
{
@@ -87,13 +61,13 @@ public:
virtual void seekDown() Q_DECL_OVERRIDE;
private:
- void setCurrentStation(const AmFmStation &station);
+ void setCurrentStation(const QIviAmFmTunerStation &station);
int stationIndexFromFrequency(int frequency) const;
- AmFmStation stationAt(int frequency) const;
+ QIviAmFmTunerStation stationAt(int frequency) const;
QIviAmFmTuner::Band m_band;
struct BandData {
- QVector<AmFmStation> m_stations;
+ QVector<QIviAmFmTunerStation> m_stations;
int m_stepSize;
int m_frequency;
};
diff --git a/src/plugins/ivimedia/tuner_simulator/searchandbrowsebackend.cpp b/src/plugins/ivimedia/tuner_simulator/searchandbrowsebackend.cpp
index 0159796..83a5a01 100644
--- a/src/plugins/ivimedia/tuner_simulator/searchandbrowsebackend.cpp
+++ b/src/plugins/ivimedia/tuner_simulator/searchandbrowsebackend.cpp
@@ -48,8 +48,8 @@ SearchAndBrowseBackend::SearchAndBrowseBackend(AmFmTunerBackend *tunerBackend, Q
: QIviSearchAndBrowseModelInterface(parent)
, m_tunerBackend(tunerBackend)
{
- qRegisterMetaType<AmFmStation>();
- registerContentType<AmFmStation>("station");
+ qRegisterMetaType<QIviAmFmTunerStation>();
+ registerContentType<QIviAmFmTunerStation>("station");
}
@@ -68,7 +68,7 @@ void SearchAndBrowseBackend::fetchData(const QUuid &identifier, const QString &t
if (type != "station")
return;
- QVector<AmFmStation> stations = m_tunerBackend->m_bandHash[QIviAmFmTuner::AMBand].m_stations + m_tunerBackend->m_bandHash[QIviAmFmTuner::FMBand].m_stations;
+ QVector<QIviAmFmTunerStation> stations = m_tunerBackend->m_bandHash[QIviAmFmTuner::AMBand].m_stations + m_tunerBackend->m_bandHash[QIviAmFmTuner::FMBand].m_stations;
emit countChanged(identifier, stations.length());
QVariantList requestedStations;