1/***************************************************************************
2 **
3 ** Copyright (C) 2016 - 2012 Research In Motion
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtNfc module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39
40#ifndef QNDEFNFCSMARTPOSTERRECORD_H
41#define QNDEFNFCSMARTPOSTERRECORD_H
42
43#include <QtCore/QList>
44#include <QtNfc/qtnfcglobal.h>
45#include <QtNfc/QNdefRecord>
46#include <QtNfc/qndefnfctextrecord.h>
47#include <QtNfc/qndefnfcurirecord.h>
48
49QT_FORWARD_DECLARE_CLASS(QUrl)
50
51QT_BEGIN_NAMESPACE
52
53class QNdefNfcSmartPosterRecordPrivate;
54
55#define Q_DECLARE_ISRECORDTYPE_FOR_MIME_NDEF_RECORD(className) \
56 QT_BEGIN_NAMESPACE \
57 template<> inline bool QNdefRecord::isRecordType<className>() const\
58 { \
59 return (typeNameFormat() == QNdefRecord::Mime); \
60 } \
61 QT_END_NAMESPACE
62
63#define Q_DECLARE_MIME_NDEF_RECORD(className, initialPayload) \
64 className() : QNdefRecord(QNdefRecord::Mime, "") { setPayload(initialPayload); } \
65 className(const QNdefRecord &other) : QNdefRecord(other, QNdefRecord::Mime) { }
66
67class Q_NFC_EXPORT QNdefNfcIconRecord : public QNdefRecord
68{
69public:
70 Q_DECLARE_MIME_NDEF_RECORD(QNdefNfcIconRecord, QByteArray(0, char(0)))
71
72 void setData(const QByteArray &data);
73 QByteArray data() const;
74};
75
76class Q_NFC_EXPORT QNdefNfcSmartPosterRecord : public QNdefRecord
77{
78public:
79 enum Action {
80 UnspecifiedAction = -1,
81 DoAction = 0,
82 SaveAction = 1,
83 EditAction = 2
84 };
85
86 QNdefNfcSmartPosterRecord();
87 QNdefNfcSmartPosterRecord(const QNdefRecord &other);
88 QNdefNfcSmartPosterRecord(const QNdefNfcSmartPosterRecord &other);
89 QNdefNfcSmartPosterRecord &operator=(const QNdefNfcSmartPosterRecord &other);
90 ~QNdefNfcSmartPosterRecord();
91
92 void setPayload(const QByteArray &payload);
93
94 bool hasTitle(const QString &locale = QString()) const;
95 bool hasAction() const;
96 bool hasIcon(const QByteArray &mimetype = QByteArray()) const;
97 bool hasSize() const;
98 bool hasTypeInfo() const;
99
100 int titleCount() const;
101 QNdefNfcTextRecord titleRecord(const int index) const;
102 QString title(const QString &locale = QString()) const;
103 QList<QNdefNfcTextRecord> titleRecords() const;
104
105 bool addTitle(const QNdefNfcTextRecord &text);
106 bool addTitle(const QString &text, const QString &locale, QNdefNfcTextRecord::Encoding encoding);
107 bool removeTitle(const QNdefNfcTextRecord &text);
108 bool removeTitle(const QString &locale);
109 void setTitles(const QList<QNdefNfcTextRecord> &titles);
110
111 QUrl uri() const;
112 QNdefNfcUriRecord uriRecord() const;
113 void setUri(const QNdefNfcUriRecord &url);
114 void setUri(const QUrl &url);
115
116 Action action() const;
117 void setAction(Action act);
118
119 int iconCount() const;
120 QNdefNfcIconRecord iconRecord(const int index) const;
121 QByteArray icon(const QByteArray& mimetype = QByteArray()) const;
122
123 QList<QNdefNfcIconRecord> iconRecords() const;
124
125 void addIcon(const QNdefNfcIconRecord &icon);
126 void addIcon(const QByteArray &type, const QByteArray &data);
127 bool removeIcon(const QNdefNfcIconRecord &icon);
128 bool removeIcon(const QByteArray &type);
129 void setIcons(const QList<QNdefNfcIconRecord> &icons);
130
131 quint32 size() const;
132 void setSize(quint32 size);
133
134 //TODO Qt 6 the mimetype should be QString as it is UTF-8
135 QByteArray typeInfo() const;
136 void setTypeInfo(const QByteArray &type);
137
138private:
139 QSharedDataPointer<QNdefNfcSmartPosterRecordPrivate> d;
140
141 void cleanup();
142 void convertToPayload();
143
144 bool addTitleInternal(const QNdefNfcTextRecord &text);
145 void addIconInternal(const QNdefNfcIconRecord &icon);
146};
147
148QT_END_NAMESPACE
149
150Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD(QNdefNfcSmartPosterRecord, QNdefRecord::NfcRtd, "Sp")
151Q_DECLARE_ISRECORDTYPE_FOR_MIME_NDEF_RECORD(QNdefNfcIconRecord)
152
153#endif // QNDEFNFCSMARTPOSTERRECORD_H
154

source code of qtconnectivity/src/nfc/qndefnfcsmartposterrecord.h