blob: 14403581871b92f583943132e7285157e178dbe6 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtPositioning 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 "qdeclarativegeoaddress_p.h"
QT_BEGIN_NAMESPACE
/*!
\qmltype Address
\inqmlmodule QtPositioning
\since 5.2
\brief The Address QML type represents a specific location as a street address.
An Address is used as a unit of data for queries such as (Reverse) Geocoding
or Places searches -- many of these operations either accept an Address
or return one.
Not all properties of an Address are necessarily available or relevant
in all parts of the world and all locales. The \l district, \l state and
\l county properties are particularly area-specific for many data sources,
and often only one or two of these are available or useful.
The Address has a \l text property which holds a formatted string. It
is the recommended way to display an address to the user and typically
takes the format of an address as found on an envelope, but this is not always
the case. The \l text may be automatically generated from constituent
address properties such as \l street, \l city and and so on, but can also
be explicitly assigned. See \l text for details.
\section2 Example Usage
The following code snippet shows the declaration of an Address object.
\code
Address {
id: address
street: "53 Brandl St"
city: "Eight Mile Plains"
country: "Australia"
countryCode: "AUS"
}
\endcode
This could then be used, for example, as the value of a geocoding query,
to get an exact longitude and latitude for the address.
\sa {QGeoAddress}
*/
QDeclarativeGeoAddress::QDeclarativeGeoAddress(QObject *parent) :
QObject(parent)
{
}
QDeclarativeGeoAddress::QDeclarativeGeoAddress(const QGeoAddress &address, QObject *parent) :
QObject(parent), m_address(address)
{
}
/*!
\qmlproperty QGeoAddress QtPositioning::Address::address
For details on how to use this property to interface between C++ and QML see
"\l {Address - QGeoAddress} {Interfaces between C++ and QML Code}".
*/
QGeoAddress QDeclarativeGeoAddress::address() const
{
return m_address;
}
void QDeclarativeGeoAddress::setAddress(const QGeoAddress &address)
{
// Elaborate but takes care of emiting needed signals
setText(address.text());
setCountry(address.country());
setCountryCode(address.countryCode());
setState(address.state());
setCounty(address.county());
setCity(address.city());
setDistrict(address.district());
setStreet(address.street());
setPostalCode(address.postalCode());
m_address = address;
}
/*!
\qmlproperty string QtPositioning::Address::text
This property holds the address as a single formatted string. It is the recommended
string to use to display the address to the user. It typically takes the format of
an address as found on an envelope, but this is not always necessarily the case.
The address \c text is either automatically generated or explicitly assigned,
this can be determined by checking \l isTextGenerated.
If an empty string is assigned to \c text, then \l isTextGenerated will be set
to true and \c text will return a string which is locally formatted according to
\l countryCode and based on the properties of the address. Modifying the address
properties such as \l street, \l city and so on may cause the contents of \c text to
change.
If a non-empty string is assigned to \c text, then \l isTextGenerated will be
set to false and \c text will always return the explicitly assigned string.
Modifying address properties will not affect the \c text property.
*/
QString QDeclarativeGeoAddress::text() const
{
return m_address.text();
}
void QDeclarativeGeoAddress::setText(const QString &address)
{
QString oldText = m_address.text();
bool oldIsTextGenerated = m_address.isTextGenerated();
m_address.setText(address);
if (oldText != m_address.text())
emit textChanged();
if (oldIsTextGenerated != m_address.isTextGenerated())
emit isTextGeneratedChanged();
}
/*!
\qmlproperty string QtPositioning::Address::country
This property holds the country of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::country() const
{
return m_address.country();
}
void QDeclarativeGeoAddress::setCountry(const QString &country)
{
if (m_address.country() == country)
return;
QString oldText = m_address.text();
m_address.setCountry(country);
emit countryChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::countryCode
This property holds the country code of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::countryCode() const
{
return m_address.countryCode();
}
void QDeclarativeGeoAddress::setCountryCode(const QString &countryCode)
{
if (m_address.countryCode() == countryCode)
return;
QString oldText = m_address.text();
m_address.setCountryCode(countryCode);
emit countryCodeChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::state
This property holds the state of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::state() const
{
return m_address.state();
}
void QDeclarativeGeoAddress::setState(const QString &state)
{
if (m_address.state() == state)
return;
QString oldText = m_address.text();
m_address.setState(state);
emit stateChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::county
This property holds the county of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::county() const
{
return m_address.county();
}
void QDeclarativeGeoAddress::setCounty(const QString &county)
{
if (m_address.county() == county)
return;
QString oldText = m_address.text();
m_address.setCounty(county);
emit countyChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::city
This property holds the city of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::city() const
{
return m_address.city();
}
void QDeclarativeGeoAddress::setCity(const QString &city)
{
if (m_address.city() == city)
return;
QString oldText = m_address.text();
m_address.setCity(city);
emit cityChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::district
This property holds the district of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::district() const
{
return m_address.district();
}
void QDeclarativeGeoAddress::setDistrict(const QString &district)
{
if (m_address.district() == district)
return;
QString oldText = m_address.text();
m_address.setDistrict(district);
emit districtChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::street
This property holds the street of the address but
may also contain things like a unit number, a building
name, or anything else that might be used to
distinguish one address from another.
*/
QString QDeclarativeGeoAddress::street() const
{
return m_address.street();
}
void QDeclarativeGeoAddress::setStreet(const QString &street)
{
if (m_address.street() == street)
return;
QString oldText = m_address.text();
m_address.setStreet(street);
emit streetChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty string QtPositioning::Address::postalCode
This property holds the postal code of the address as a single formatted string.
*/
QString QDeclarativeGeoAddress::postalCode() const
{
return m_address.postalCode();
}
void QDeclarativeGeoAddress::setPostalCode(const QString &postalCode)
{
if (m_address.postalCode() == postalCode)
return;
QString oldText = m_address.text();
m_address.setPostalCode(postalCode);
emit postalCodeChanged();
if (m_address.isTextGenerated() && oldText != m_address.text())
emit textChanged();
}
/*!
\qmlproperty bool QtPositioning::Address::isTextGenerated
This property holds a boolean that if true, indicates that \l text is automatically
generated from address properties. If false, it indicates that the \l text has been
explicitly assigned.
*/
bool QDeclarativeGeoAddress::isTextGenerated() const
{
return m_address.isTextGenerated();
}
QT_END_NAMESPACE