~ubuntu-branches/ubuntu/wily/qtconnectivity-opensource-src/wily

« back to all changes in this revision

Viewing changes to src/imports/nfc/qdeclarativenearfield.cpp

  • Committer: Package Import Robot
  • Author(s): Lisandro Damián Nicanor Pérez Meyer, Timo Jyrinki
  • Date: 2014-02-23 00:01:49 UTC
  • mfrom: (0.1.3 experimental) (1.1.1)
  • Revision ID: package-import@ubuntu.com-20140223000149-ht3k3x21dr5n5dol
Tags: 5.2.1-1
[ Timo Jyrinki ]
* New upstream release
* Move mkspecs to the new location
* Make private headers cleaning non version specific
* Add examples package
* Add dependencies to build against the 5.2.1 versions

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
/*!
53
53
    \qmltype NearField
54
54
    \instantiates QDeclarativeNearField
55
 
    \brief The NearField type provides access to NDEF messages stored on NFC Forum tags.
 
55
    \since 5.2
 
56
    \brief Provides access to NDEF messages stored on NFC Forum tags.
56
57
 
57
58
    \ingroup nfc-qml
58
 
    \inqmlmodule QtNfc 5.0
 
59
    \inqmlmodule QtNfc
59
60
 
60
61
    \sa NdefFilter
61
62
    \sa NdefRecord
64
65
    \sa QNdefMessage
65
66
    \sa QNdefRecord
66
67
 
67
 
    The NearField type was introduced in \b {QtNfc 5.0}.
68
 
 
69
68
    The NearField type can be used to read NDEF messages from NFC Forum tags.  Set the \l filter
70
69
    and \l orderMatch properties to match the required NDEF messages.  Once an NDEF message is
71
70
    successfully read from a tag the \l messageRecords property is updated.
72
71
 
73
72
    \code
74
73
        NearField {
75
 
            filter: [ NdefFilter { type: "urn:nfc:wkt:U"; minimum: 1; maximum: 1 } ]
 
74
            filter: [ NdefFilter { type: "U"; typeNameFormat: NdefRecord.NfcRtd; minimum: 1; maximum: 1 } ]
76
75
            orderMatch: false
77
76
 
78
77
            onMessageRecordsChanged: displayMessage()
90
89
    \qmlproperty list<NdefFilter> NearField::filter
91
90
 
92
91
    This property holds the NDEF filter constraints.  The \l messageRecords property will only be
93
 
    set to NDEF messages which match the filter.
 
92
    set to NDEF messages which match the filter. If no filter is set, a message handler for
 
93
    all NDEF messages will be registered.
 
94
 
 
95
    \l QNearFieldManager::registerNdefMessageHandler()
94
96
*/
95
97
 
96
98
/*!
106
108
{
107
109
}
108
110
 
109
 
QQmlListProperty<QDeclarativeNdefRecord> QDeclarativeNearField::messageRecords()
 
111
QQmlListProperty<QQmlNdefRecord> QDeclarativeNearField::messageRecords()
110
112
{
111
 
    return QQmlListProperty<QDeclarativeNdefRecord>(this, 0,
 
113
    return QQmlListProperty<QQmlNdefRecord>(this, 0,
112
114
                                                    &QDeclarativeNearField::append_messageRecord,
113
115
                                                    &QDeclarativeNearField::count_messageRecords,
114
116
                                                    &QDeclarativeNearField::at_messageRecord,
143
145
{
144
146
    m_componentCompleted = true;
145
147
 
146
 
    if (!m_filter.isEmpty())
147
 
        registerMessageHandler();
 
148
    registerMessageHandler();
148
149
}
149
150
 
150
151
void QDeclarativeNearField::registerMessageHandler()
155
156
    if (m_messageHandlerId != -1)
156
157
        m_manager->unregisterNdefMessageHandler(m_messageHandlerId);
157
158
 
158
 
    // no filter abort
159
 
    if (m_filter.isEmpty())
160
 
        return;
161
 
 
162
 
    QNdefFilter filter;
163
 
    filter.setOrderMatch(m_orderMatch);
164
 
    foreach (QDeclarativeNdefFilter *f, m_filter) {
165
 
        const QString type = f->type();
166
 
        uint min = f->minimum() < 0 ? UINT_MAX : f->minimum();
167
 
        uint max = f->maximum() < 0 ? UINT_MAX : f->maximum();
168
 
 
169
 
        if (type.startsWith(QLatin1String("urn:nfc:wkt:")))
170
 
            filter.appendRecord(QNdefRecord::NfcRtd, type.mid(12).toUtf8(), min, max);
171
 
        else if (type.startsWith(QLatin1String("urn:nfc:ext:")))
172
 
            filter.appendRecord(QNdefRecord::ExternalRtd, type.mid(12).toUtf8(), min, max);
173
 
        else if (type.startsWith(QLatin1String("urn:nfc:mime")))
174
 
            filter.appendRecord(QNdefRecord::Mime, type.mid(13).toUtf8(), min, max);
175
 
        else
176
 
            qWarning("Unknown NDEF record type %s", qPrintable(type));
 
159
    QNdefFilter ndefFilter;
 
160
    ndefFilter.setOrderMatch(m_orderMatch);
 
161
    foreach (const QDeclarativeNdefFilter *filter, m_filterList) {
 
162
        const QString type = filter->type();
 
163
        uint min = filter->minimum() < 0 ? UINT_MAX : filter->minimum();
 
164
        uint max = filter->maximum() < 0 ? UINT_MAX : filter->maximum();
 
165
 
 
166
        ndefFilter.appendRecord(static_cast<QNdefRecord::TypeNameFormat>(filter->typeNameFormat()), type.toUtf8(), min, max);
177
167
    }
178
168
 
179
 
    m_messageHandlerId = m_manager->registerNdefMessageHandler(filter, this, SLOT(_q_handleNdefMessage(QNdefMessage)));
 
169
    m_messageHandlerId = m_manager->registerNdefMessageHandler(ndefFilter, this, SLOT(_q_handleNdefMessage(QNdefMessage)));
180
170
}
181
171
 
182
172
void QDeclarativeNearField::_q_handleNdefMessage(const QNdefMessage &message)
195
185
    emit messageRecordsChanged();
196
186
}
197
187
 
198
 
void QDeclarativeNearField::append_messageRecord(QQmlListProperty<QDeclarativeNdefRecord> *list,
199
 
                                                 QDeclarativeNdefRecord *record)
 
188
void QDeclarativeNearField::append_messageRecord(QQmlListProperty<QQmlNdefRecord> *list,
 
189
                                                 QQmlNdefRecord *record)
200
190
{
201
191
    QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
202
192
    if (!nearField)
208
198
        emit nearField->messageRecordsChanged();
209
199
}
210
200
 
211
 
int QDeclarativeNearField::count_messageRecords(QQmlListProperty<QDeclarativeNdefRecord> *list)
 
201
int QDeclarativeNearField::count_messageRecords(QQmlListProperty<QQmlNdefRecord> *list)
212
202
{
213
203
    QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
214
204
    if (!nearField)
217
207
    return nearField->m_message.count();
218
208
}
219
209
 
220
 
QDeclarativeNdefRecord *QDeclarativeNearField::at_messageRecord(QQmlListProperty<QDeclarativeNdefRecord> *list,
 
210
QQmlNdefRecord *QDeclarativeNearField::at_messageRecord(QQmlListProperty<QQmlNdefRecord> *list,
221
211
                                                                int index)
222
212
{
223
213
    QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
227
217
    return nearField->m_message.at(index);
228
218
}
229
219
 
230
 
void QDeclarativeNearField::clear_messageRecords(QQmlListProperty<QDeclarativeNdefRecord> *list)
 
220
void QDeclarativeNearField::clear_messageRecords(QQmlListProperty<QQmlNdefRecord> *list)
231
221
{
232
222
    QDeclarativeNearField *nearField = qobject_cast<QDeclarativeNearField *>(list->object);
233
223
    if (nearField) {
246
236
        return;
247
237
 
248
238
    filter->setParent(nearField);
249
 
    nearField->m_filter.append(filter);
 
239
    nearField->m_filterList.append(filter);
250
240
    emit nearField->filterChanged();
251
241
 
252
242
    if (nearField->m_componentCompleted)
259
249
    if (!nearField)
260
250
        return 0;
261
251
 
262
 
    return nearField->m_filter.count();
 
252
    return nearField->m_filterList.count();
263
253
}
264
254
 
265
255
QDeclarativeNdefFilter *QDeclarativeNearField::at_filter(QQmlListProperty<QDeclarativeNdefFilter> *list,
269
259
    if (!nearField)
270
260
        return 0;
271
261
 
272
 
    return nearField->m_filter.at(index);
 
262
    return nearField->m_filterList.at(index);
273
263
}
274
264
 
275
265
void QDeclarativeNearField::clear_filter(QQmlListProperty<QDeclarativeNdefFilter> *list)
278
268
    if (!nearField)
279
269
        return;
280
270
 
281
 
    qDeleteAll(nearField->m_filter);
282
 
    nearField->m_filter.clear();
 
271
    qDeleteAll(nearField->m_filterList);
 
272
    nearField->m_filterList.clear();
283
273
    emit nearField->filterChanged();
284
274
    if (nearField->m_componentCompleted)
285
275
        nearField->registerMessageHandler();