Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
positioningplugin.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <private/qpositioningquickglobal_p.h>
5#include <QGeoCircle>
6#include <QGeoCoordinate>
7#include <QGeoPath>
8#include <QGeoPolygon>
9#include <QGeoRectangle>
10#include <QtPositioningQuick/private/qquickgeocoordinateanimation_p.h>
11#include <QtCore/QVariantAnimation>
12#include <QtQml/QQmlEngineExtensionPlugin>
13
15
514
515namespace {
516
518{
519 if (const auto it = map.find(QStringLiteral("latitude")); it != map.end())
520 c.setLatitude(it.value().toDouble());
521 else
522 c.setLatitude(qQNaN());
523 if (const auto it = map.find(QStringLiteral("longitude")); it != map.end())
524 c.setLongitude(it.value().toDouble());
525 else
526 c.setLongitude(qQNaN());
527 if (const auto it = map.find(QStringLiteral("altitude")); it != map.end())
528 c.setAltitude(it.value().toDouble());
529 else
530 c.setAltitude(qQNaN());
531
532 // Not considering the case where the map is valid but containing NaNs.
533 return c.isValid();
534}
535
536bool parseRectangle(const QVariantMap &map, QGeoRectangle &rect)
537{
538 if (const auto it = map.find(QStringLiteral("topLeft")); it != map.end())
539 rect.setTopLeft(it.value().value<QGeoCoordinate>());
540 if (const auto it = map.find(QStringLiteral("bottomLeft")); it != map.end())
541 rect.setBottomLeft(it.value().value<QGeoCoordinate>());
542 if (const auto it = map.find(QStringLiteral("topRight")); it != map.end())
543 rect.setTopRight(it.value().value<QGeoCoordinate>());
544 if (const auto it = map.find(QStringLiteral("bottomRight")); it != map.end())
545 rect.setBottomRight(it.value().value<QGeoCoordinate>());
546 if (const auto it = map.find(QStringLiteral("center")); it != map.end())
547 rect.setCenter(it.value().value<QGeoCoordinate>());
548 if (const auto it = map.find(QStringLiteral("width")); it != map.end())
549 rect.setWidth(it.value().toDouble());
550 if (const auto it = map.find(QStringLiteral("height")); it != map.end())
551 rect.setHeight(it.value().toDouble());
552
553 // Not considering the case where the map is valid but containing NaNs.
554 return rect.isValid();
555}
556}
557
559{
560 QMetaType::registerConverter<QGeoRectangle, QGeoShape>();
561 QMetaType::registerConverter<QGeoShape, QGeoRectangle>();
562 QMetaType::registerConverter<QGeoShape, QGeoCircle>();
563 QMetaType::registerConverter<QGeoCircle, QGeoShape>();
564 QMetaType::registerConverter<QGeoShape, QGeoPath>();
565 QMetaType::registerConverter<QGeoPath, QGeoShape>();
566 QMetaType::registerConverter<QGeoShape, QGeoPolygon>();
567 QMetaType::registerConverter<QGeoPolygon, QGeoShape>();
568
569 if (!QMetaType::registerConverterFunction([](const void *src, void *target) -> bool {
570 const QVariantMap &map = *static_cast<const QVariantMap *>(src);
571 QGeoCoordinate &coord = *static_cast<QGeoCoordinate *>(target);
572 return parseCoordinate(map, coord);
573 }, QMetaType::fromType<QVariantMap>(), QMetaType::fromType<QGeoCoordinate>())) {
574 qWarning("Failed to register conversion function from QVariantMap to QGeoCoordinate");
575 }
576
577 if (!QMetaType::registerConverterFunction([](const void *src, void *target) -> bool {
578 const QVariantMap &map = *static_cast<const QVariantMap *>(src);
579 QGeoRectangle &rect = *static_cast<QGeoRectangle *>(target);
580 return parseRectangle(map, rect);
581 }, QMetaType::fromType<QVariantMap>(), QMetaType::fromType<QGeoRectangle>())) {
582 qWarning("Failed to register conversion function from QVariantMap to QGeoRectangle");
583 }
584
585 qRegisterAnimationInterpolator<QGeoCoordinate>(q_coordinateInterpolator);
586}
587
589
591
592#include "positioningplugin.moc"
\inmodule QtPositioning
void setLatitude(double latitude)
Sets the latitude (in decimal degrees) to latitude.
\inmodule QtPositioning
iterator find(const Key &key)
Definition qmap.h:641
iterator end()
Definition qmap.h:602
static bool registerConverterFunction(const ConverterFunction &f, QMetaType from, QMetaType to)
Registers function f as converter function from type id from to to.
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
The QQmlEngineExtensionPlugin class provides an abstract base for custom QML extension plugins.
\qmlvaluetype coordinate\inqmlmodule QtPositioning
QtPositioningDeclarativeModule(QObject *parent=0)
QMap< QString, QString > map
[6]
QSet< QString >::iterator it
rect
[4]
QT_BEGIN_NAMESPACE QGeoCoordinate parseCoordinate(const QJsonArray &coordinateArray)
Combined button and popup list for selecting options.
void QtPositioningDeclarative_initializeModule()
Q_CONSTRUCTOR_FUNCTION(qt_apple_check_os_version)
#define qWarning
Definition qlogging.h:166
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION double qQNaN()
GLenum src
GLenum target
const GLubyte * c
GLuint coord
QT_BEGIN_NAMESPACE void Q_POSITIONINGQUICK_EXPORT qml_register_types_QtPositioning()
#define QQmlExtensionInterface_iid
static const QQmlModuleRegistration registration("QtQml", qml_register_types_QtQml)
QT_BEGIN_NAMESPACE QVariant q_coordinateInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress)
\qmltype CoordinateAnimation \inherits PropertyAnimation \inqmlmodule QtPositioning
#define QStringLiteral(str)
#define Q_OBJECT
#define Q_PLUGIN_METADATA(x)
#define Q_UNUSED(x)