summaryrefslogtreecommitdiff
path: root/src/ivicore/qtivicoremodule.cpp
blob: 8dc4954b989113b496f645b8814a221a810d0748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2019 Luxoft Sweden AB
** Copyright (C) 2018 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtIvi module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** 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 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$
**
****************************************************************************/

#include "qtivicoremodule.h"
#include "qivipendingreply.h"
#include "qiviabstractfeature.h"
#include "qiviabstractzonedfeature.h"
#include "qiviservicemanager.h"
#include "qiviserviceobject.h"
#include "qivipagingmodel.h"
#include "qivisearchandbrowsemodel.h"

#include <QQmlEngine>

/*! \internal */
QObject* qtivicoremodule_singletontype_provider(QQmlEngine*, QJSEngine*)
{
    return new QtIviCoreModule();
}

QObject* serviceManagerSingelton(QQmlEngine *, QJSEngine *)
{
    auto manager = QIviServiceManager::instance();
    QQmlEngine::setObjectOwnership(manager, QQmlEngine::CppOwnership);
    return manager;
}

/*!
    \class QtIviCoreModule
    \inmodule QtIviCore

    \brief The QtIviCoreModule class holds enums which are used by multiple classes of QtIviCore
    and provides convenience functions to register types to QML.
*/

/*!
    \qmltype QtIvi
    \instantiates QtIviCoreModule
    \inqmlmodule QtIvi

    \brief The QtIvi singleton holds enums, which are used by multiple Items of the QtIviCore module.

    The following enums are exported from this object:

    \section3 ModelCapability
    \value NoExtras
           The backend does only support the minimum feature set and is stateful.
    \value SupportsGetSize
           The backend can return the final number of items for a specific request. This makes it possible to support the QIviSearchAndBrowseModel::DataChanged loading
           type.
    \value SupportsFiltering
           The backend supports filtering of the content. QIviSearchAndBrowseModelInterface::availableContentTypesChanged() and QIviSearchAndBrowseModelInterface::queryIdentifiersChanged() will be used as input for the
           \l {Qt IVI Query Language}.
    \value SupportsSorting
           The backend supports sorting of the content. QIviSearchAndBrowseModelInterface::availableContentTypesChanged() and QIviSearchAndBrowseModelInterface::queryIdentifiersChanged() will be used as input for the
           \l {Qt IVI Query Language}.
    \value SupportsAndConjunction
           The backend supports handling multiple filters at the same time and these filters can be combined by using the AND conjunction.
    \value SupportsOrConjunction
           The backend supports handling multiple filters at the same time and these filters can be combined by using the OR conjunction.
    \value SupportsStatelessNavigation
           The backend is stateless and supports handling multiple instances of a QIviSearchAndBrowseModel requesting different data at the same time.
           E.g. One request for artists, sorted by name and another request for tracks. The backend has to consider that both request come from models which are
           currently visible at the same time.
    \value SupportsInsert
           The backend supports inserting new items at a given position.
    \value SupportsMove
           The backend supports moving items within the model.
    \value SupportsRemove
           The backend supports removing items from the model.
*/
QtIviCoreModule::QtIviCoreModule(QObject *parent)
    : QObject(parent)
{
}


/*!
    \enum QtIviCoreModule::ModelCapability
    \value NoExtras
           The backend does only support the minimum feature set and is stateful.
    \value SupportsGetSize
           The backend can return the final number of items for a specific request. This makes it possible to support the QIviSearchAndBrowseModel::DataChanged loading
           type.
    \value SupportsFiltering
           The backend supports filtering of the content. QIviSearchAndBrowseModelInterface::availableContentTypesChanged() and QIviSearchAndBrowseModelInterface::queryIdentifiersChanged() will be used as input for the
           \l {Qt IVI Query Language}.
    \value SupportsSorting
           The backend supports sorting of the content. QIviSearchAndBrowseModelInterface::availableContentTypesChanged() and QIviSearchAndBrowseModelInterface::queryIdentifiersChanged() will be used as input for the
           \l {Qt IVI Query Language}.
    \value SupportsAndConjunction
           The backend supports handling multiple filters at the same time and these filters can be combined by using the AND conjunction.
    \value SupportsOrConjunction
           The backend supports handling multiple filters at the same time and these filters can be combined by using the OR conjunction.
    \value SupportsStatelessNavigation
           The backend is stateless and supports handling multiple instances of a QIviSearchAndBrowseModel requesting different data at the same time.
           E.g. One request for artists, sorted by name and another request for tracks. The backend has to consider that both request come from models which are
           currently visible at the same time.
    \value SupportsInsert
           The backend supports inserting new items at a given position.
    \value SupportsMove
           The backend supports moving items within the model.
    \value SupportsRemove
           The backend supports removing items from the model.
*/

/*!
    Registers all enums in this class in the Qt MetaType system
*/
void QtIviCoreModule::registerTypes()
{
    qRegisterMetaType<QIviServiceObject*>();
    qRegisterMetaType<QList<QIviServiceObject*>>("QList<QIviServiceObject*>");
    qRegisterMetaType<QtIviCoreModule::ModelCapabilities>();
    qIviRegisterPendingReplyType<QtIviCoreModule::ModelCapabilities>();
}

/*!
    Registers the QtIviCore classes to the QML System in the library imported from \a uri having
    the version number composed from \a majorVersion and \a minorVersion.
*/
void QtIviCoreModule::registerQmlTypes(const QString &uri, int majorVersion, int minorVersion)
{
    registerTypes();
    QByteArray u = uri.toLatin1();
    qmlRegisterSingletonType<QtIviCoreModule>(u, majorVersion, minorVersion,
                                        "QtIviCoreModule",
                                        qtivicoremodule_singletontype_provider);
    qmlRegisterUncreatableType<QIviAbstractFeature>(u, 1, 0, "AbstractFeature", QStringLiteral("AbstractFeature is not accessible directly"));
    qmlRegisterUncreatableType<QIviAbstractZonedFeature>(u, 1, 0, "AbstractZonedFeature", QStringLiteral("AbstractZonedFeature is not accessible directly"));
    qmlRegisterType<QIviPagingModel>(u, 1, 0, "PagingModel");
    qmlRegisterType<QIviSearchAndBrowseModel>(u, 1, 0, "SearchAndBrowseModel");
    qmlRegisterSingletonType<QIviServiceManager>(u, 1, 0, "ServiceManager", &serviceManagerSingelton);
}