1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtLocation module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL3$
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 http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
28 ** Software Foundation and appearing in the file LICENSE.GPL included in
29 ** the packaging of this file. Please review the following information to
30 ** ensure the GNU General Public License version 2.0 requirements will be
31 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
32 **
33 ** $QT_END_LICENSE$
34 **
35 ****************************************************************************/
36
37 #include "qplaceattribute_p.h"
38 #include "qplaceattribute.h"
39
40 QT_USE_NAMESPACE
41
clone()42 template<> QPlaceAttributePrivate *QSharedDataPointer<QPlaceAttributePrivate>::clone()
43 {
44 return d->clone();
45 }
46
QPlaceAttributePrivate(const QPlaceAttributePrivate & other)47 QPlaceAttributePrivate::QPlaceAttributePrivate(const QPlaceAttributePrivate &other)
48 : QSharedData(other),
49 label(other.label),
50 text(other.text)
51 {
52 }
53
operator ==(const QPlaceAttributePrivate & other) const54 bool QPlaceAttributePrivate::operator== (const QPlaceAttributePrivate &other) const
55 {
56 return label == other.label
57 && text == other.text;
58 }
59
isEmpty() const60 bool QPlaceAttributePrivate::isEmpty() const
61 {
62 return label.isEmpty()
63 && text.isEmpty();
64 }
65
66
67 /*!
68 \class QPlaceAttribute
69 \inmodule QtLocation
70 \ingroup QtLocation-places
71 \ingroup QtLocation-places-data
72 \since 5.6
73
74 \brief The QPlaceAttribute class represents generic attribute information about a place.
75
76 A QPlaceAttribute instance stores an additional piece of information about a place that is not
77 otherwise exposed through the QPlace class. A QPlaceAttribute encapsulates a
78 localized label which describes the attribute and rich text string representing the attribute's value.
79 Generally, both are intended to be displayed to the end-user as is.
80
81 Some plugins may not support attributes at all, others may only support a
82 certain set, others still may support a dynamically changing set of attributes
83 over time or even allow attributes to be arbitrarily defined by the client
84 application. The attributes could also vary on a place by place basis,
85 for example one place may have opening hours while another does not.
86 Consult the \l {Plugin References and Parameters}{plugin
87 references} for details.
88
89 \section2 Attribute Types
90 The QPlaceAttribute class defines some constant strings which characterize standard \e {attribute types}.
91 \list
92 \li QPlaceAttribute::OpeningHours
93 \li QPlaceAttribute::Payment
94 \li QPlaceAttribute::Provider
95 \endlist
96
97 There is a class of attribute types of the format x_id_<provider> for example x_id_here.
98 This class of attributes is a set of alternative identifiers of the place, from the specified provider's
99 perspective.
100
101 The above types are used to access and modify attributes in QPlace via:
102 \list
103 \li QPlace::extendedAttribute()
104 \li QPlace::setExtendedAttribute()
105 \li QPlace::removeExtendedAttribute()
106 \li QPlace::removeExtendedAttribute()
107 \endlist
108
109 The \e {attribute type} is a string type so that providers are able to introduce
110 new attributes as necessary. Custom attribute types should always be prefixed
111 by a qualifier in order to avoid conflicts.
112
113 \section3 User Readable and Non-User Readable Attributes
114 Some attributes may not be intended to be readable by end users, the label field
115 of such attributes are empty to indicate this fact.
116 */
117
118 /*!
119 \variable QPlaceAttribute::OpeningHours
120 Specifies the opening hours.
121 */
122 const QString QPlaceAttribute::OpeningHours(QLatin1String("openingHours"));
123
124 /*!
125 \variable QPlaceAttribute::Payment
126 The constant to specify an attribute that defines the methods of payment.
127 */
128 const QString QPlaceAttribute::Payment(QLatin1String("payment"));
129
130 /*!
131 \variable QPlaceAttribute::Provider
132 The constant to specify an attribute that defines which
133 provider the place came from.
134 */
135 const QString QPlaceAttribute::Provider(QLatin1String("x_provider"));
136
137 /*!
138 Constructs an attribute.
139 */
QPlaceAttribute()140 QPlaceAttribute::QPlaceAttribute()
141 : d_ptr(new QPlaceAttributePrivate)
142 {
143 }
144
145 /*!
146 Destroys the attribute.
147 */
~QPlaceAttribute()148 QPlaceAttribute::~QPlaceAttribute()
149 {
150 }
151
152 /*!
153 Creates a copy of \a other.
154 */
QPlaceAttribute(const QPlaceAttribute & other)155 QPlaceAttribute::QPlaceAttribute(const QPlaceAttribute &other)
156 :d_ptr(other.d_ptr)
157 {
158 }
159
160 /*!
161 Assigns \a other to this attribute and returns a reference to this
162 attribute.
163 */
operator =(const QPlaceAttribute & other)164 QPlaceAttribute &QPlaceAttribute::operator=(const QPlaceAttribute &other)
165 {
166 if (this == &other)
167 return *this;
168
169 d_ptr = other.d_ptr;
170 return *this;
171 }
172
173 /*!
174 Returns true if \a other is equal to this attribute, otherwise
175 returns false.
176 */
operator ==(const QPlaceAttribute & other) const177 bool QPlaceAttribute::operator== (const QPlaceAttribute &other) const
178 {
179 if (d_ptr == other.d_ptr)
180 return true;
181 return ( *(d_ptr.constData()) == *(other.d_ptr.constData()));
182 }
183
184 /*!
185 Returns true if \a other is not equal to this attribute,
186 otherwise returns false.
187 */
operator !=(const QPlaceAttribute & other) const188 bool QPlaceAttribute::operator!= (const QPlaceAttribute &other) const
189 {
190 return (!this->operator ==(other));
191 }
192
193 /*!
194 Returns a localized label describing the attribute.
195 */
label() const196 QString QPlaceAttribute::label() const
197 {
198 return d_ptr->label;
199 }
200
201 /*!
202 Sets the \a label of the attribute.
203 */
setLabel(const QString & label)204 void QPlaceAttribute::setLabel(const QString &label)
205 {
206 d_ptr->label = label;
207 }
208
209 /*!
210 Returns a piece of rich text representing the attribute value.
211 */
text() const212 QString QPlaceAttribute::text() const
213 {
214 return d_ptr->text;
215 }
216
217 /*!
218 Sets the \a text of the attribute.
219 */
setText(const QString & text)220 void QPlaceAttribute::setText(const QString &text)
221 {
222 d_ptr->text = text;
223 }
224
225 /*!
226 Returns a boolean indicating whether the all the fields of the place attribute are empty or not.
227 */
isEmpty() const228 bool QPlaceAttribute::isEmpty() const
229 {
230 return d_ptr->isEmpty();
231 }
232