Qt 6.x
The Qt SDK
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
508{
510
512
513public:
515 {
518 }
519};
520
521namespace {
522
524{
525 if (const auto it = map.find(QStringLiteral("latitude")); it != map.end())
526 c.setLatitude(it.value().toDouble());
527 else
528 c.setLatitude(qQNaN());
529 if (const auto it = map.find(QStringLiteral("longitude")); it != map.end())
530 c.setLongitude(it.value().toDouble());
531 else
532 c.setLongitude(qQNaN());
533 if (const auto it = map.find(QStringLiteral("altitude")); it != map.end())
534 c.setAltitude(it.value().toDouble());
535 else
536 c.setAltitude(qQNaN());
537
538 // Not considering the case where the map is valid but containing NaNs.
539 return c.isValid();
540}
541
542bool parseRectangle(const QVariantMap &map, QGeoRectangle &rect)
543{
544 if (const auto it = map.find(QStringLiteral("topLeft")); it != map.end())
545 rect.setTopLeft(it.value().value<QGeoCoordinate>());
546 if (const auto it = map.find(QStringLiteral("bottomLeft")); it != map.end())
547 rect.setBottomLeft(it.value().value<QGeoCoordinate>());
548 if (const auto it = map.find(QStringLiteral("topRight")); it != map.end())
549 rect.setTopRight(it.value().value<QGeoCoordinate>());
550 if (const auto it = map.find(QStringLiteral("bottomRight")); it != map.end())
551 rect.setBottomRight(it.value().value<QGeoCoordinate>());
552 if (const auto it = map.find(QStringLiteral("center")); it != map.end())
553 rect.setCenter(it.value().value<QGeoCoordinate>());
554 if (const auto it = map.find(QStringLiteral("width")); it != map.end())
555 rect.setWidth(it.value().toDouble());
556 if (const auto it = map.find(QStringLiteral("height")); it != map.end())
557 rect.setHeight(it.value().toDouble());
558
559 // Not considering the case where the map is valid but containing NaNs.
560 return rect.isValid();
561}
562}
563
565{
566 QMetaType::registerConverter<QGeoRectangle, QGeoShape>();
567 QMetaType::registerConverter<QGeoShape, QGeoRectangle>();
568 QMetaType::registerConverter<QGeoShape, QGeoCircle>();
569 QMetaType::registerConverter<QGeoCircle, QGeoShape>();
570 QMetaType::registerConverter<QGeoShape, QGeoPath>();
571 QMetaType::registerConverter<QGeoPath, QGeoShape>();
572 QMetaType::registerConverter<QGeoShape, QGeoPolygon>();
573 QMetaType::registerConverter<QGeoPolygon, QGeoShape>();
574
575 if (!QMetaType::registerConverterFunction([](const void *src, void *target) -> bool {
576 const QVariantMap &map = *static_cast<const QVariantMap *>(src);
577 QGeoCoordinate &coord = *static_cast<QGeoCoordinate *>(target);
578 return parseCoordinate(map, coord);
579 }, QMetaType::fromType<QVariantMap>(), QMetaType::fromType<QGeoCoordinate>())) {
580 qWarning("Failed to register conversion function from QVariantMap to QGeoCoordinate");
581 }
582
583 if (!QMetaType::registerConverterFunction([](const void *src, void *target) -> bool {
584 const QVariantMap &map = *static_cast<const QVariantMap *>(src);
585 QGeoRectangle &rect = *static_cast<QGeoRectangle *>(target);
586 return parseRectangle(map, rect);
587 }, QMetaType::fromType<QVariantMap>(), QMetaType::fromType<QGeoRectangle>())) {
588 qWarning("Failed to register conversion function from QVariantMap to QGeoRectangle");
589 }
590
591 qRegisterAnimationInterpolator<QGeoCoordinate>(q_coordinateInterpolator);
592}
593
595
597
598#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:640
iterator end()
Definition qmap.h:601
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:90
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:311
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(initializeStandardUserDefaults)
#define qWarning
Definition qlogging.h:162
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION double qQNaN()
GLenum src
GLenum target
const GLubyte * c
GLuint coord
QT_BEGIN_NAMESPACE void Q_POSITIONINGQUICK_PRIVATE_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)