diff --git a/src/imports/positioning/plugins.qmltypes b/src/imports/positioning/plugins.qmltypes index bfb76203f4f0918aaff0d8d8045196ba0b2cf5dc..a956a7861cabd016c18954004ea7177e217467fe 100644 --- a/src/imports/positioning/plugins.qmltypes +++ b/src/imports/positioning/plugins.qmltypes @@ -4,15 +4,15 @@ import QtQuick.tooling 1.1 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -notrelocatable QtPositioning 5.3' +// 'qmlplugindump -notrelocatable QtPositioning 5.4' Module { Component { name: "GeoShapeValueType" prototype: "QQmlValueType" - exports: ["QtPositioning/GeoShape 5.0", "QtPositioning/GeoShape 5.2"] + exports: ["QtPositioning/GeoShape 5.0"] isCreatable: false - exportMetaObjectRevisions: [0, 0] + exportMetaObjectRevisions: [0] Enum { name: "ShapeType" values: { @@ -33,13 +33,10 @@ Module { Component { name: "LocationSingleton" prototype: "QObject" - exports: [ - "QtPositioning/QtPositioning 5.0", - "QtPositioning/QtPositioning 5.2" - ] + exports: ["QtPositioning/QtPositioning 5.0"] isCreatable: false isSingleton: true - exportMetaObjectRevisions: [0, 0] + exportMetaObjectRevisions: [0] Method { name: "coordinate"; type: "QGeoCoordinate" } Method { name: "coordinate" @@ -90,8 +87,8 @@ Module { Component { name: "QDeclarativeGeoAddress" prototype: "QObject" - exports: ["QtPositioning/Address 5.0", "QtPositioning/Address 5.2"] - exportMetaObjectRevisions: [0, 0] + exports: ["QtPositioning/Address 5.0"] + exportMetaObjectRevisions: [0] Property { name: "address"; type: "QGeoAddress" } Property { name: "text"; type: "string" } Property { name: "country"; type: "string" } @@ -115,8 +112,8 @@ Module { Component { name: "QDeclarativeGeoLocation" prototype: "QObject" - exports: ["QtPositioning/Location 5.0", "QtPositioning/Location 5.2"] - exportMetaObjectRevisions: [0, 0] + exports: ["QtPositioning/Location 5.0"] + exportMetaObjectRevisions: [0] Property { name: "location"; type: "QGeoLocation" } Property { name: "address"; type: "QDeclarativeGeoAddress"; isPointer: true } Property { name: "coordinate"; type: "QGeoCoordinate" } @@ -127,10 +124,10 @@ Module { prototype: "QObject" exports: [ "QtPositioning/Position 5.0", - "QtPositioning/Position 5.2", - "QtPositioning/Position 5.3" + "QtPositioning/Position 5.3", + "QtPositioning/Position 5.4" ] - exportMetaObjectRevisions: [0, 0, 1] + exportMetaObjectRevisions: [0, 1, 2] Property { name: "latitudeValid"; type: "bool"; isReadonly: true } Property { name: "longitudeValid"; type: "bool"; isReadonly: true } Property { name: "altitudeValid"; type: "bool"; isReadonly: true } @@ -146,6 +143,8 @@ Module { Property { name: "direction"; revision: 1; type: "double"; isReadonly: true } Property { name: "verticalSpeedValid"; revision: 1; type: "bool"; isReadonly: true } Property { name: "verticalSpeed"; revision: 1; type: "double"; isReadonly: true } + Property { name: "magneticVariation"; revision: 2; type: "double"; isReadonly: true } + Property { name: "magneticVariationValid"; revision: 2; type: "bool"; isReadonly: true } Signal { name: "directionValidChanged"; revision: 1 } Signal { name: "directionChanged"; revision: 1 } Signal { name: "verticalSpeedValidChanged"; revision: 1 } @@ -154,11 +153,8 @@ Module { Component { name: "QDeclarativePositionSource" prototype: "QObject" - exports: [ - "QtPositioning/PositionSource 5.0", - "QtPositioning/PositionSource 5.2" - ] - exportMetaObjectRevisions: [0, 0] + exports: ["QtPositioning/PositionSource 5.0"] + exportMetaObjectRevisions: [0] Enum { name: "PositioningMethod" values: { diff --git a/src/imports/positioning/positioning.cpp b/src/imports/positioning/positioning.cpp index 7b2139603cf126ede6e29d5601a4ce796a28b01a..cff324769adff3fbf3f6de2a809df6e6c2883747 100644 --- a/src/imports/positioning/positioning.cpp +++ b/src/imports/positioning/positioning.cpp @@ -129,7 +129,7 @@ public: // Register the 5.4 types // Introduction of 5.4 version; existing 5.3 exports become automatically available under 5.4 minor = 4; - qmlRegisterSingletonType<LocationSingleton >(uri, major, minor, "QtPositioning", singleton_type_factory); + qmlRegisterType<QDeclarativePosition, 2>(uri, major, minor, "Position"); } else { qDebug() << "Unsupported URI given to load positioning QML plugin: " << QLatin1String(uri); } diff --git a/src/imports/positioning/qdeclarativeposition.cpp b/src/imports/positioning/qdeclarativeposition.cpp index dbd6729087ce718472b703fd03a2d5be03a1a634..9497fa7abac112533b8a342e2dec98e9b021e6c5 100644 --- a/src/imports/positioning/qdeclarativeposition.cpp +++ b/src/imports/positioning/qdeclarativeposition.cpp @@ -142,7 +142,10 @@ void QDeclarativePosition::setPosition(const QGeoPositionInfo &info) bool emitVerticalSpeedValidChanged = exclusiveNaN(pVerticalSpeed, verticalSpeed); // magnetic variation - // not in QML API + const qreal pMagneticVariation = m_info.attribute(QGeoPositionInfo::MagneticVariation); + const qreal magneticVariation = info.attribute(QGeoPositionInfo::MagneticVariation); + bool emitMagneticVariationChanged = !equalOrNaN(pMagneticVariation, magneticVariation); + bool emitMagneticVariationValidChanged = exclusiveNaN(pMagneticVariation, magneticVariation); // horizontal accuracy const qreal pHorizontalAccuracy = m_info.attribute(QGeoPositionInfo::HorizontalAccuracy); @@ -188,6 +191,10 @@ void QDeclarativePosition::setPosition(const QGeoPositionInfo &info) emit verticalAccuracyChanged(); if (emitVerticalAccuracyValidChanged) emit verticalAccuracyValidChanged(); + if (emitMagneticVariationChanged) + emit magneticVariationChanged(); + if (emitMagneticVariationValidChanged) + emit magneticVariationValidChanged(); } /*! @@ -429,6 +436,38 @@ double QDeclarativePosition::verticalSpeed() const return m_info.attribute(QGeoPositionInfo::VerticalSpeed); } +/*! + \qmlproperty bool Position::magneticVariationValid + \since Qt Positioning 5.4 + + This property is true if \l magneticVariation has been set (to indicate whether that data has been + received or not, as every update does not necessarily contain all data). + + \sa magneticVariation +*/ +bool QDeclarativePosition::isMagneticVariationValid() const +{ + return !qIsNaN(m_info.attribute(QGeoPositionInfo::MagneticVariation)); +} + +/*! + \qmlproperty double Position::magneticVariation + \since Qt Positioning 5.4 + + This property holds the angle between the horizontal component of the + magnetic field and true north, in degrees. Also known as magnetic + declination. A positive value indicates a clockwise direction from + true north and a negative value indicates a counter-clockwise direction. + + It is a read-only property. + + \sa magneticVariationValid +*/ +double QDeclarativePosition::magneticVariation() const +{ + return m_info.attribute(QGeoPositionInfo::MagneticVariation); +} + #include "moc_qdeclarativeposition_p.cpp" QT_END_NAMESPACE diff --git a/src/imports/positioning/qdeclarativeposition_p.h b/src/imports/positioning/qdeclarativeposition_p.h index d92353689a0d74915bbf7e1d7088dc2a711f4d12..ed054835206dbaa0f871b0c47a6e8f8dba363700 100644 --- a/src/imports/positioning/qdeclarativeposition_p.h +++ b/src/imports/positioning/qdeclarativeposition_p.h @@ -72,6 +72,9 @@ class QDeclarativePosition : public QObject Q_PROPERTY(bool verticalSpeedValid READ isVerticalSpeedValid NOTIFY verticalSpeedValidChanged REVISION 1) Q_PROPERTY(double verticalSpeed READ verticalSpeed NOTIFY verticalSpeedChanged REVISION 1) + Q_PROPERTY(double magneticVariation READ magneticVariation NOTIFY magneticVariationChanged REVISION 2) + Q_PROPERTY(bool magneticVariationValid READ isMagneticVariationValid NOTIFY magneticVariationChanged REVISION 2) + public: explicit QDeclarativePosition(QObject *parent = 0); ~QDeclarativePosition(); @@ -98,6 +101,9 @@ public: double verticalSpeed() const; void setVerticalSpeed(double speed); + bool isMagneticVariationValid() const; + double magneticVariation() const; + void setPosition(const QGeoPositionInfo &info); Q_SIGNALS: @@ -118,6 +124,9 @@ Q_SIGNALS: Q_REVISION(1) void verticalSpeedValidChanged(); Q_REVISION(1) void verticalSpeedChanged(); + Q_REVISION(2) void magneticVariationChanged(); + Q_REVISION(2) void magneticVariationValidChanged(); + private: QGeoPositionInfo m_info; };