summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Ahumada <sahumada@blackberry.com>2014-06-17 12:06:18 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-17 12:06:18 +0200
commit2f53ba168ec95b299e1544dd2e5b0840b8aa6cb2 (patch)
tree78a8b013ed275658de80292cc5a0fc809c522fde
parentaa4d3d39e51def04dcbfd527a42c31c7841d68d3 (diff)
parentfc3f5e2ea8ba535d40610444c1f79b8ee9457968 (diff)
downloadqtlocation-2f53ba168ec95b299e1544dd2e5b0840b8aa6cb2.tar.gz
Merge "Merge remote-tracking branch 'origin/5.3' into dev" into refs/staging/dev
-rw-r--r--dist/changes-5.3.157
-rw-r--r--src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java30
-rw-r--r--src/plugins/position/android/src/jnipositioning.cpp4
-rw-r--r--src/plugins/position/position.pro1
-rw-r--r--src/plugins/position/winrt/plugin.json8
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp392
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h117
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp60
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h64
-rw-r--r--src/plugins/position/winrt/winrt.pro15
-rw-r--r--tests/applications/positioning_backend/main.cpp61
-rw-r--r--tests/applications/positioning_backend/positioning_backend.pro14
-rw-r--r--tests/applications/positioning_backend/widget.cpp168
-rw-r--r--tests/applications/positioning_backend/widget.h79
-rw-r--r--tests/applications/positioning_backend/widget.ui295
-rw-r--r--tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp63
-rw-r--r--tests/auto/qgeopositioninfo/tst_qgeopositioninfo.cpp6
-rw-r--r--tests/auto/qgeosatelliteinfo/tst_qgeosatelliteinfo.cpp6
18 files changed, 1387 insertions, 53 deletions
diff --git a/dist/changes-5.3.1 b/dist/changes-5.3.1
new file mode 100644
index 00000000..89137708
--- /dev/null
+++ b/dist/changes-5.3.1
@@ -0,0 +1,57 @@
+Qt 5.3.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.3.0.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+ http://qt-project.org/doc/qt-5.3
+
+The Qt version 5.3 series is binary compatible with the 5.2.x series.
+Applications compiled for 5.2 will continue to run with 5.3.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ http://bugreports.qt-project.org/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* General *
+****************************************************************************
+
+General Improvements
+--------------------
+
+ - Added PLUGIN_CLASS_NAME variable to all plug-in based projects. This
+ enables the automatic static linking and deployment of this plug-ins.
+
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtPositioning
+-------------
+
+ - QGeoPositionInfoSource:
+ * WinRT backend added
+
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+Android
+-------
+
+ - [QTBUG-39082] Fixed crash on Galaxy S4 when running satellite and position
+ updates at the same time.
+
+iOS
+---
+
+ - [QTBUG-38770] Added "classname" entry to all qmldir files enabling QML
+ plug-ins when doing static builds on iOS.
+
diff --git a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
index f5725813..f2babd08 100644
--- a/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
+++ b/src/plugins/position/android/jar/src/org/qtproject/qt5/android/positioning/QtPositioning.java
@@ -187,17 +187,18 @@ public class QtPositioning implements LocationListener
try {
boolean exceptionOccurred = false;
QtPositioning positioningListener = new QtPositioning();
- positioningListener.setActiveLooper(true);
positioningListener.nativeClassReference = androidClassKey;
positioningListener.expectedProviders = locationProvider;
positioningListener.isSatelliteUpdate = false;
+ //start update thread
+ positioningListener.setActiveLooper(true);
if (updateInterval == 0)
updateInterval = 1000; //don't update more often than once per second
positioningListener.updateIntervalTime = updateInterval;
if ((locationProvider & QT_GPS_PROVIDER) > 0) {
- Log.d(TAG, "Regular updates using GPS");
+ Log.d(TAG, "Regular updates using GPS " + updateInterval);
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
updateInterval, 0,
@@ -210,7 +211,7 @@ public class QtPositioning implements LocationListener
}
if ((locationProvider & QT_NETWORK_PROVIDER) > 0) {
- Log.d(TAG, "Regular updates using network");
+ Log.d(TAG, "Regular updates using network " + updateInterval);
try {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
updateInterval, 0,
@@ -263,11 +264,12 @@ public class QtPositioning implements LocationListener
try {
boolean exceptionOccurred = false;
QtPositioning positioningListener = new QtPositioning();
- positioningListener.setActiveLooper(true);
positioningListener.nativeClassReference = androidClassKey;
positioningListener.isSingleUpdate = true;
positioningListener.expectedProviders = locationProvider;
positioningListener.isSatelliteUpdate = false;
+ //start update thread
+ positioningListener.setActiveLooper(true);
if ((locationProvider & QT_GPS_PROVIDER) > 0) {
Log.d(TAG, "Single update using GPS");
@@ -321,10 +323,11 @@ public class QtPositioning implements LocationListener
boolean exceptionOccurred = false;
QtPositioning positioningListener = new QtPositioning();
positioningListener.isSatelliteUpdate = true;
- positioningListener.setActiveLooper(true);
positioningListener.nativeClassReference = androidClassKey;
positioningListener.expectedProviders = 1; //always satellite provider
positioningListener.isSingleUpdate = isSingleRequest;
+ //start update thread
+ positioningListener.setActiveLooper(true);
if (updateInterval == 0)
updateInterval = 1000; //don't update more often than once per second
@@ -385,9 +388,14 @@ public class QtPositioning implements LocationListener
if (isSatelliteUpdate)
looperThread.isSatelliteListener(true);
+ long start = System.currentTimeMillis();
looperThread.start();
+
+ //busy wait but lasts ~20-30 ms only
while (!looperThread.isReady());
- Thread.sleep(1000);
+
+ long stop = System.currentTimeMillis();
+ Log.d(TAG, "Looper Thread startup time in ms: " + (stop-start));
} else {
looperThread.quitLooper();
}
@@ -411,7 +419,6 @@ public class QtPositioning implements LocationListener
{
Looper.prepare();
Handler handler = new Handler();
- looperRunning = true;
if (isSatelliteLooper) {
try {
@@ -422,8 +429,13 @@ public class QtPositioning implements LocationListener
}
posLooper = Looper.myLooper();
+ synchronized (this) {
+ looperRunning = true;
+ }
Looper.loop();
- looperRunning = false;
+ synchronized (this) {
+ looperRunning = false;
+ }
}
public void quitLooper()
@@ -433,7 +445,7 @@ public class QtPositioning implements LocationListener
looper().quit();
}
- public boolean isReady()
+ public synchronized boolean isReady()
{
return looperRunning;
}
diff --git a/src/plugins/position/android/src/jnipositioning.cpp b/src/plugins/position/android/src/jnipositioning.cpp
index afae1c8e..d3cce65b 100644
--- a/src/plugins/position/android/src/jnipositioning.cpp
+++ b/src/plugins/position/android/src/jnipositioning.cpp
@@ -459,7 +459,7 @@ static void positionUpdated(JNIEnv *env, jobject /*thiz*/, jobject location, jin
QGeoPositionInfoSourceAndroid *source = AndroidPositioning::idToPosSource()->value(androidClassKey);
if (!source) {
- qFatal("positionUpdated: source == 0");
+ qWarning("positionUpdated: source == 0");
return;
}
@@ -479,7 +479,7 @@ static void locationProvidersDisabled(JNIEnv *env, jobject /*thiz*/, jint androi
if (!source)
source = AndroidPositioning::idToSatSource()->value(androidClassKey);
if (!source) {
- qFatal("locationProvidersDisabled: source == 0");
+ qWarning("locationProvidersDisabled: source == 0");
return;
}
diff --git a/src/plugins/position/position.pro b/src/plugins/position/position.pro
index 0e2f9a5d..636bcc54 100644
--- a/src/plugins/position/position.pro
+++ b/src/plugins/position/position.pro
@@ -6,6 +6,7 @@ qtHaveModule(simulator):SUBDIRS += simulator
blackberry:SUBDIRS += blackberry
ios:SUBDIRS += corelocation
android:!android-no-sdk:SUBDIRS += android
+winrt:SUBDIRS += winrt
SUBDIRS += \
positionpoll
diff --git a/src/plugins/position/winrt/plugin.json b/src/plugins/position/winrt/plugin.json
new file mode 100644
index 00000000..5bb21702
--- /dev/null
+++ b/src/plugins/position/winrt/plugin.json
@@ -0,0 +1,8 @@
+{
+ "Keys": ["winrt"],
+ "Provider": "winrt",
+ "Position": true,
+ "Satellite": false,
+ "Monitor" : false,
+ "Priority": 1000
+}
diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
new file mode 100644
index 00000000..f979a9df
--- /dev/null
+++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
@@ -0,0 +1,392 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgeopositioninfosource_winrt_p.h"
+
+#include <QCoreApplication>
+
+#include <windows.system.h>
+#include <windows.devices.geolocation.h>
+#include <windows.foundation.collections.h>
+
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+using namespace ABI::Windows::Devices::Geolocation;
+using namespace ABI::Windows::Foundation;
+using namespace ABI::Windows::System;
+
+typedef ITypedEventHandler<Geolocator *, PositionChangedEventArgs *> GeoLocatorPositionHandler;
+typedef ITypedEventHandler<Geolocator *, StatusChangedEventArgs *> GeoLocatorStatusHandler;
+
+QT_BEGIN_NAMESPACE
+
+QGeoPositionInfoSourceWinrt::QGeoPositionInfoSourceWinrt(QObject *parent)
+ : QGeoPositionInfoSource(parent)
+ , m_positionError(QGeoPositionInfoSource::NoError)
+ , m_updatesOngoing(false)
+{
+ HRESULT hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Devices_Geolocation_Geolocator).Get(),
+ &m_locator);
+
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not initialize native location services");
+ return;
+ }
+
+ hr = m_locator->put_ReportInterval(minimumUpdateInterval());
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not initialize report interval");
+ return;
+ }
+ hr = m_locator->put_DesiredAccuracy(PositionAccuracy::PositionAccuracy_High);
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not initialize desired accuracy");
+ return;
+ }
+
+ m_positionToken.value = 0;
+
+ m_periodicTimer.setSingleShot(true);
+ m_periodicTimer.setInterval(minimumUpdateInterval());
+ connect(&m_periodicTimer, SIGNAL(timeout()), this, SLOT(virtualPositionUpdate()));
+
+ m_singleUpdateTimer.setSingleShot(true);
+ connect(&m_singleUpdateTimer, SIGNAL(timeout()), this, SLOT(singleUpdateTimeOut()));
+
+ setPreferredPositioningMethods(QGeoPositionInfoSource::AllPositioningMethods);
+}
+
+QGeoPositionInfoSourceWinrt::~QGeoPositionInfoSourceWinrt()
+{
+}
+
+QGeoPositionInfo QGeoPositionInfoSourceWinrt::lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const
+{
+ Q_UNUSED(fromSatellitePositioningMethodsOnly)
+ return m_lastPosition;
+}
+
+QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSourceWinrt::supportedPositioningMethods() const
+{
+ PositionStatus status;
+ HRESULT hr = m_locator->get_LocationStatus(&status);
+ if (FAILED(hr))
+ return QGeoPositionInfoSource::NoPositioningMethods;
+
+ switch (status) {
+ case PositionStatus::PositionStatus_NoData:
+ case PositionStatus::PositionStatus_Disabled:
+ case PositionStatus::PositionStatus_NotAvailable:
+ return QGeoPositionInfoSource::NoPositioningMethods;
+ }
+
+ return QGeoPositionInfoSource::AllPositioningMethods;
+}
+
+void QGeoPositionInfoSourceWinrt::setPreferredPositioningMethods(QGeoPositionInfoSource::PositioningMethods methods)
+{
+ PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods();
+ QGeoPositionInfoSource::setPreferredPositioningMethods(methods);
+ if (previousPreferredPositioningMethods == preferredPositioningMethods())
+ return;
+
+ bool needsRestart = m_positionToken.value != 0;
+
+ if (needsRestart)
+ stopHandler();
+
+ HRESULT hr;
+ if (methods & PositioningMethod::SatellitePositioningMethods)
+ hr = m_locator->put_DesiredAccuracy(PositionAccuracy::PositionAccuracy_High);
+ else
+ hr = m_locator->put_DesiredAccuracy(PositionAccuracy::PositionAccuracy_Default);
+
+ if (FAILED(hr)) {
+ qErrnoWarning(hr, "Could not set positioning accuracy");
+ return;
+ }
+
+ if (needsRestart)
+ startHandler();
+}
+
+void QGeoPositionInfoSourceWinrt::setUpdateInterval(int msec)
+{
+ // If msec is 0 we send updates as data becomes available, otherwise we force msec to be equal
+ // to or larger than the minimum update interval.
+ if (msec != 0 && msec < minimumUpdateInterval())
+ msec = minimumUpdateInterval();
+
+ HRESULT hr = m_locator->put_ReportInterval(msec);
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Failed to set update interval");
+ return;
+ }
+ if (msec != 0)
+ m_periodicTimer.setInterval(msec);
+ else
+ m_periodicTimer.setInterval(minimumUpdateInterval());
+
+ QGeoPositionInfoSource::setUpdateInterval(msec);
+}
+
+int QGeoPositionInfoSourceWinrt::minimumUpdateInterval() const
+{
+ // We use one second to reduce potential timer events
+ // in case the platform itself stops reporting
+ return 1000;
+}
+
+void QGeoPositionInfoSourceWinrt::startUpdates()
+{
+ if (m_updatesOngoing)
+ return;
+
+ if (!startHandler())
+ return;
+ m_updatesOngoing = true;
+ m_periodicTimer.start();
+}
+
+void QGeoPositionInfoSourceWinrt::stopUpdates()
+{
+ stopHandler();
+ m_updatesOngoing = false;
+ m_periodicTimer.stop();
+}
+
+bool QGeoPositionInfoSourceWinrt::startHandler()
+{
+ // Check if already attached
+ if (m_positionToken.value != 0)
+ return true;
+
+ if (preferredPositioningMethods() == QGeoPositionInfoSource::NoPositioningMethods) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ return false;
+ }
+
+ if (!checkNativeState())
+ return false;
+
+ HRESULT hr = m_locator->add_PositionChanged(Callback<GeoLocatorPositionHandler>(this,
+ &QGeoPositionInfoSourceWinrt::onPositionChanged).Get(),
+ &m_positionToken);
+
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not add position handler");
+ return false;
+ }
+ return true;
+}
+
+void QGeoPositionInfoSourceWinrt::stopHandler()
+{
+ if (!m_positionToken.value)
+ return;
+ m_locator->remove_PositionChanged(m_positionToken);
+ m_positionToken.value = 0;
+}
+
+void QGeoPositionInfoSourceWinrt::requestUpdate(int timeout)
+{
+ if (timeout < minimumUpdateInterval()) {
+ emit updateTimeout();
+ return;
+ }
+ startHandler();
+ m_singleUpdateTimer.start(timeout);
+}
+
+void QGeoPositionInfoSourceWinrt::virtualPositionUpdate()
+{
+ // Need to check if services are still running and ok
+ if (!checkNativeState()) {
+ stopUpdates();
+ return;
+ }
+
+ // The operating system did not provide information in time
+ // Hence we send a virtual position update to keep same behavior
+ // between backends.
+ // This only applies to the periodic timer, not for single requests
+ // We can only do this if we received a valid position before
+ if (m_lastPosition.isValid()) {
+ QGeoPositionInfo sent = m_lastPosition;
+ sent.setTimestamp(QDateTime::currentDateTime());
+ m_lastPosition = sent;
+ emit positionUpdated(sent);
+ }
+ m_periodicTimer.start();
+}
+
+void QGeoPositionInfoSourceWinrt::singleUpdateTimeOut()
+{
+ emit updateTimeout();
+ if (!m_updatesOngoing)
+ stopHandler();
+}
+
+QGeoPositionInfoSource::Error QGeoPositionInfoSourceWinrt::error() const
+{
+ return m_positionError;
+}
+
+void QGeoPositionInfoSourceWinrt::setError(QGeoPositionInfoSource::Error positionError)
+{
+ if (positionError == m_positionError)
+ return;
+ m_positionError = positionError;
+ emit QGeoPositionInfoSource::error(positionError);
+}
+
+bool QGeoPositionInfoSourceWinrt::checkNativeState()
+{
+ PositionStatus status;
+ HRESULT hr = m_locator->get_LocationStatus(&status);
+ if (FAILED(hr)) {
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ qErrnoWarning(hr, "Could not query status");
+ return false;
+ }
+
+ bool result = false;
+ switch (status) {
+ case PositionStatus::PositionStatus_NotAvailable:
+ setError(QGeoPositionInfoSource::UnknownSourceError);
+ break;
+ case PositionStatus::PositionStatus_Disabled:
+ case PositionStatus::PositionStatus_NoData:
+ setError(QGeoPositionInfoSource::ClosedError);
+ break;
+ default:
+ setError(QGeoPositionInfoSource::NoError);
+ result = true;
+ break;
+ }
+ return result;
+}
+
+HRESULT QGeoPositionInfoSourceWinrt::onPositionChanged(IGeolocator *locator, IPositionChangedEventArgs *args)
+{
+ Q_UNUSED(locator);
+
+ m_periodicTimer.stop();
+
+ HRESULT hr;
+ ComPtr<IGeoposition> pos;
+ hr = args->get_Position(&pos);
+ if (FAILED(hr))
+ qErrnoWarning(hr, "Could not access position object");
+
+ QGeoPositionInfo currentInfo;
+
+ ComPtr<IGeocoordinate> coord;
+ hr = pos->get_Coordinate(&coord);
+ if (FAILED(hr))
+ qErrnoWarning(hr, "Could not access coordinate");
+
+ DOUBLE lat;
+ hr = coord->get_Latitude(&lat);
+ if (FAILED(hr))
+ qErrnoWarning(hr, "Could not access latitude");
+
+ DOUBLE lon;
+ hr = coord->get_Longitude(&lon);
+ if (FAILED(hr))
+ qErrnoWarning(hr, "Could not access longitude");
+
+ // Depending on data source altitude can
+ // be identified or not
+ IReference<double> *alt;
+ hr = coord->get_Altitude(&alt);
+ if (SUCCEEDED(hr) && alt) {
+ double altd;
+ hr = alt->get_Value(&altd);
+ currentInfo.setCoordinate(QGeoCoordinate(lat, lon, altd));
+ } else {
+ currentInfo.setCoordinate(QGeoCoordinate(lat, lon));
+ }
+
+ DOUBLE accuracy;
+ hr = coord->get_Accuracy(&accuracy);
+ if (SUCCEEDED(hr))
+ currentInfo.setAttribute(QGeoPositionInfo::HorizontalAccuracy, accuracy);
+
+ IReference<double> *altAccuracy;
+ hr = coord->get_AltitudeAccuracy(&altAccuracy);
+ if (SUCCEEDED(hr) && altAccuracy) {
+ double value;
+ hr = alt->get_Value(&value);
+ currentInfo.setAttribute(QGeoPositionInfo::VerticalAccuracy, value);
+ }
+
+ IReference<double> *speed;
+ hr = coord->get_Speed(&speed);
+ if (SUCCEEDED(hr) && speed) {
+ double value;
+ hr = speed->get_Value(&value);
+ currentInfo.setAttribute(QGeoPositionInfo::GroundSpeed, value);
+ }
+
+ currentInfo.setTimestamp(QDateTime::currentDateTime());
+
+ m_lastPosition = currentInfo;
+
+ if (m_updatesOngoing)
+ m_periodicTimer.start();
+
+ if (m_singleUpdateTimer.isActive()) {
+ m_singleUpdateTimer.stop();
+ if (!m_updatesOngoing)
+ stopHandler();
+ }
+
+ emit positionUpdated(currentInfo);
+ return S_OK;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h
new file mode 100644
index 00000000..9f67a990
--- /dev/null
+++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt_p.h
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGEOPOSITIONINFOSOURCEWINRT_H
+#define QGEOPOSITIONINFOSOURCEWINRT_H
+
+#include "qgeopositioninfosource.h"
+#include "qgeopositioninfo.h"
+
+#include <QTimer>
+
+#include <EventToken.h>
+#include <wrl.h>
+
+namespace ABI {
+ namespace Windows {
+ namespace Devices {
+ namespace Geolocation{
+ struct IGeolocator;
+ struct IPositionChangedEventArgs;
+ struct IStatusChangedEventArgs;
+ }
+ }
+ }
+}
+
+QT_BEGIN_NAMESPACE
+
+class QGeoPositionInfoSourceWinrt : public QGeoPositionInfoSource
+{
+ Q_OBJECT
+public:
+ QGeoPositionInfoSourceWinrt(QObject *parent = 0);
+ ~QGeoPositionInfoSourceWinrt();
+
+ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
+ PositioningMethods supportedPositioningMethods() const;
+
+ void setPreferredPositioningMethods(PositioningMethods methods);
+
+ void setUpdateInterval(int msec);
+ int minimumUpdateInterval() const;
+ Error error() const;
+
+ HRESULT onPositionChanged(ABI::Windows::Devices::Geolocation::IGeolocator *locator,
+ ABI::Windows::Devices::Geolocation::IPositionChangedEventArgs *args);
+
+public slots:
+ void startUpdates();
+ void stopUpdates();
+
+ void requestUpdate(int timeout = 0);
+
+private slots:
+ void stopHandler();
+ void virtualPositionUpdate();
+ void singleUpdateTimeOut();
+private:
+ bool startHandler();
+
+ Q_DISABLE_COPY(QGeoPositionInfoSourceWinrt)
+ void setError(QGeoPositionInfoSource::Error positionError);
+ bool checkNativeState();
+
+ Microsoft::WRL::ComPtr<ABI::Windows::Devices::Geolocation::IGeolocator> m_locator;
+ EventRegistrationToken m_positionToken;
+
+ QGeoPositionInfo m_lastPosition;
+ QGeoPositionInfoSource::Error m_positionError;
+
+ //EventRegistrationToken m_StatusToken;
+ QTimer m_periodicTimer;
+ QTimer m_singleUpdateTimer;
+ bool m_updatesOngoing;
+};
+
+QT_END_NAMESPACE
+
+#endif // QGEOPOSITIONINFOSOURCEWINRT_H
diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp
new file mode 100644
index 00000000..be51cd20
--- /dev/null
+++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.cpp
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgeopositioninfosourcefactory_winrt.h"
+#include "qgeopositioninfosource_winrt_p.h"
+
+QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryWinrt::positionInfoSource(QObject *parent)
+{
+ return new QGeoPositionInfoSourceWinrt(parent);
+}
+
+QGeoSatelliteInfoSource *QGeoPositionInfoSourceFactoryWinrt::satelliteInfoSource(QObject *parent)
+{
+ Q_UNUSED(parent);
+ return 0;
+}
+
+QGeoAreaMonitorSource *QGeoPositionInfoSourceFactoryWinrt::areaMonitor(QObject *parent)
+{
+ Q_UNUSED(parent);
+ return 0;
+}
diff --git a/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h
new file mode 100644
index 00000000..41ba1d16
--- /dev/null
+++ b/src/plugins/position/winrt/qgeopositioninfosourcefactory_winrt.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGEOPOSITIONINFOSOURCEFACTORY_WINRT_H
+#define QGEOPOSITIONINFOSOURCEFACTORY_WINRT_H
+
+#include <QObject>
+#include <QGeoPositionInfoSourceFactory>
+
+QT_BEGIN_NAMESPACE
+
+class QGeoPositionInfoSourceFactoryWinrt : public QObject, public QGeoPositionInfoSourceFactory
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.qt.position.sourcefactory/5.0"
+ FILE "plugin.json")
+ Q_INTERFACES(QGeoPositionInfoSourceFactory)
+public:
+ QGeoPositionInfoSource *positionInfoSource(QObject *parent);
+ QGeoSatelliteInfoSource *satelliteInfoSource(QObject *parent);
+ QGeoAreaMonitorSource *areaMonitor(QObject *parent);
+};
+
+QT_END_NAMESPACE
+
+#endif // QGEOPOSITIONINFOSOURCEFACTORY_WINRT_H
diff --git a/src/plugins/position/winrt/winrt.pro b/src/plugins/position/winrt/winrt.pro
new file mode 100644
index 00000000..2632d4f8
--- /dev/null
+++ b/src/plugins/position/winrt/winrt.pro
@@ -0,0 +1,15 @@
+TARGET = qtposition_winrt
+QT = core positioning
+
+PLUGIN_TYPE = position
+load(qt_plugin)
+
+INCLUDEPATH += $$QT.location.includes
+
+SOURCES += qgeopositioninfosource_winrt.cpp \
+ qgeopositioninfosourcefactory_winrt.cpp
+HEADERS += qgeopositioninfosource_winrt_p.h \
+ qgeopositioninfosourcefactory_winrt.h
+
+OTHER_FILES += \
+ plugin.json
diff --git a/tests/applications/positioning_backend/main.cpp b/tests/applications/positioning_backend/main.cpp
new file mode 100644
index 00000000..2ca4a0aa
--- /dev/null
+++ b/tests/applications/positioning_backend/main.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "widget.h"
+#include <QLabel>
+
+#include <QApplication>
+#include <QtWidgets>
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ Widget w1;
+ Widget w2;
+
+ QTabWidget tabWidget;
+ tabWidget.setTabPosition(QTabWidget::South);
+
+ tabWidget.addTab(&w1, "Instance 1");
+ tabWidget.addTab(&w2, "Instance 2");
+
+ tabWidget.show();
+ return a.exec();
+}
diff --git a/tests/applications/positioning_backend/positioning_backend.pro b/tests/applications/positioning_backend/positioning_backend.pro
new file mode 100644
index 00000000..410dbc86
--- /dev/null
+++ b/tests/applications/positioning_backend/positioning_backend.pro
@@ -0,0 +1,14 @@
+QT += core gui positioning widgets
+
+TARGET = posbackendtesting
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+ widget.cpp
+
+HEADERS += widget.h
+
+FORMS += widget.ui
+
+winrt: WINRT_MANIFEST.capabilities_device += location
diff --git a/tests/applications/positioning_backend/widget.cpp b/tests/applications/positioning_backend/widget.cpp
new file mode 100644
index 00000000..0624a837
--- /dev/null
+++ b/tests/applications/positioning_backend/widget.cpp
@@ -0,0 +1,168 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "widget.h"
+#include "ui_widget.h"
+#include <QGeoPositionInfoSource>
+#include <QDebug>
+
+Widget::Widget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Widget)
+{
+ ui->setupUi(this);
+ qDebug() << "Available:" << QGeoPositionInfoSource::availableSources();
+ m_posSource = QGeoPositionInfoSource::createDefaultSource(this);
+ if (!m_posSource)
+ qFatal("No Position Source created!");
+ connect(m_posSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this, SLOT(positionUpdated(QGeoPositionInfo)));
+
+ connect(ui->horizontalSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setInterval(int)));
+ connect(m_posSource, SIGNAL(updateTimeout()),
+ this, SLOT(positionTimedOut()));
+
+ ui->groupBox->setLayout(ui->gridLayout);
+ ui->horizontalSlider->setMinimum(m_posSource->minimumUpdateInterval());
+ ui->labelTimeOut->setVisible(false);
+
+ connect(m_posSource, SIGNAL(error(QGeoPositionInfoSource::Error)),
+ this, SLOT(errorChanged(QGeoPositionInfoSource::Error)));
+}
+
+void Widget::positionUpdated(QGeoPositionInfo gpsPos)
+{
+ QGeoCoordinate coord = gpsPos.coordinate();
+ ui->labelLatitude->setText(QString::number(coord.latitude()));
+ ui->labelLongitude->setText(QString::number(coord.longitude()));
+ ui->labelAltitude->setText(QString::number(coord.altitude()));
+ ui->labelTimeStamp->setText(gpsPos.timestamp().toString());
+ if (gpsPos.hasAttribute(QGeoPositionInfo::HorizontalAccuracy))
+ ui->labelHAccuracy->setText(QString::number(gpsPos.attribute(QGeoPositionInfo::HorizontalAccuracy)));
+ else
+ ui->labelHAccuracy->setText(QStringLiteral("N/A"));
+
+ if (gpsPos.hasAttribute(QGeoPositionInfo::VerticalAccuracy))
+ ui->labelVAccuracy->setText(QString::number(gpsPos.attribute(QGeoPositionInfo::VerticalAccuracy)));
+ else
+ ui->labelVAccuracy->setText(QStringLiteral("N/A"));
+}
+
+void Widget::positionTimedOut()
+{
+ ui->labelTimeOut->setVisible(true);
+}
+
+void Widget::errorChanged(QGeoPositionInfoSource::Error err)
+{
+ ui->labelErrorState->setText(err == 3 ? QStringLiteral("OK") : QString::number(err));
+}
+
+Widget::~Widget()
+{
+ delete ui;
+}
+
+void Widget::setInterval(int msec)
+{
+ m_posSource->setUpdateInterval(msec);
+}
+
+void Widget::on_buttonRetrieve_clicked()
+{
+ // Requesting current position for _one_ time
+ m_posSource->requestUpdate(10000);
+}
+
+void Widget::on_buttonStart_clicked()
+{
+ // Either start or stop the current position info source
+ bool running = ui->checkBox->isChecked();
+ if (running) {
+ m_posSource->stopUpdates();
+ ui->checkBox->setChecked(false);
+ } else {
+ m_posSource->startUpdates();
+ ui->checkBox->setChecked(true);
+ }
+}
+
+void Widget::on_radioButton_clicked()
+{
+ m_posSource->setPreferredPositioningMethods(QGeoPositionInfoSource::NoPositioningMethods);
+}
+
+void Widget::on_radioButton_2_clicked()
+{
+ m_posSource->setPreferredPositioningMethods(QGeoPositionInfoSource::SatellitePositioningMethods);
+}
+
+void Widget::on_radioButton_3_clicked()
+{
+ m_posSource->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);
+}
+
+void Widget::on_radioButton_4_clicked()
+{
+ m_posSource->setPreferredPositioningMethods(QGeoPositionInfoSource::AllPositioningMethods);
+}
+
+void Widget::on_buttonUpdateSupported_clicked()
+{
+ QGeoPositionInfoSource::PositioningMethods m = m_posSource->supportedPositioningMethods();
+ QString text;
+ switch (m) {
+ case QGeoPositionInfoSource::NoPositioningMethods:
+ text = QStringLiteral("None");
+ break;
+ case QGeoPositionInfoSource::SatellitePositioningMethods:
+ text = QStringLiteral("Satellite");
+ break;
+ case QGeoPositionInfoSource::NonSatellitePositioningMethods:
+ text = QStringLiteral("Non Satellite");
+ break;
+ case QGeoPositionInfoSource::AllPositioningMethods:
+ text = QStringLiteral("All");
+ break;
+ }
+
+ ui->labelSupported->setText(text);
+}
diff --git a/tests/applications/positioning_backend/widget.h b/tests/applications/positioning_backend/widget.h
new file mode 100644
index 00000000..94ccceef
--- /dev/null
+++ b/tests/applications/positioning_backend/widget.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+#include <QGeoPositionInfoSource>
+
+namespace Ui {
+ class Widget;
+}
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(QWidget *parent = 0);
+ ~Widget();
+
+public slots:
+ void positionUpdated(QGeoPositionInfo gpsPos);
+ void setInterval(int msec);
+ void positionTimedOut();
+ void errorChanged(QGeoPositionInfoSource::Error err);
+private slots:
+ void on_buttonRetrieve_clicked();
+ void on_buttonStart_clicked();
+ void on_radioButton_2_clicked();
+ void on_radioButton_clicked();
+ void on_radioButton_3_clicked();
+ void on_radioButton_4_clicked();
+
+ void on_buttonUpdateSupported_clicked();
+
+private:
+ Ui::Widget *ui;
+ QGeoPositionInfoSource *m_posSource;
+};
+
+#endif // WIDGET_H
diff --git a/tests/applications/positioning_backend/widget.ui b/tests/applications/positioning_backend/widget.ui
new file mode 100644
index 00000000..d19497d2
--- /dev/null
+++ b/tests/applications/positioning_backend/widget.ui
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>276</width>
+ <height>467</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Widget</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Latitude:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="labelLatitude">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Longitude:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="labelLongitude">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Altitude:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="labelAltitude">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>TimeStamp:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="labelTimeStamp">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Horizontal Accuracy:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="labelHAccuracy">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Vertical Accuracy:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QLabel" name="labelVAccuracy">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>TimeOut:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QLabel" name="labelTimeOut">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>!!!!!TimeOut!!!!!</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="label_10">
+ <property name="text">
+ <string>Supported Methods:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Error State:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QLabel" name="labelErrorState">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLabel" name="labelSupported">
+ <property name="text">
+ <string>N/A</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonUpdateSupported">
+ <property name="text">
+ <string>Update</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Method</string>
+ </property>
+ <widget class="QWidget" name="layoutWidget">
+ <property name="geometry">
+ <rect>
+ <x>43</x>
+ <y>21</y>
+ <width>243</width>
+ <height>71</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="radioButton">
+ <property name="text">
+ <string>None</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QRadioButton" name="radioButton_2">
+ <property name="text">
+ <string>Satelite</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QRadioButton" name="radioButton_3">
+ <property name="text">
+ <string>Non-Satelite</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QRadioButton" name="radioButton_4">
+ <property name="text">
+ <string>All</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Interval:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="horizontalSlider">
+ <property name="minimum">
+ <number>50</number>
+ </property>
+ <property name="maximum">
+ <number>10000</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelInterval">
+ <property name="text">
+ <string>0</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Running</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QPushButton" name="buttonStart">
+ <property name="text">
+ <string>Start/Stop</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonRetrieve">
+ <property name="text">
+ <string>Retrieve</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>horizontalSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>labelInterval</receiver>
+ <slot>setNum(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>217</x>
+ <y>137</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>386</x>
+ <y>138</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp b/tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp
index b3c2d020..581f5c00 100644
--- a/tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp
+++ b/tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp
@@ -516,36 +516,39 @@ private slots:
<< qreal(1000.0)
<< qreal(10.0)
<< QGeoCoordinate();
- QTest::newRow("brisbane -> melbourne")
- << BRISBANE
- << qreal(1374820.1618767744)
- << qreal(211.1717286649)
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
- << MELBOURNE;
-#else
- << QGeoCoordinate(-37.8142515084775, 144.963170622944);
-#endif
- QTest::newRow("london -> new york")
- << LONDON
- << qreal(5570538.4987236429)
- << qreal(288.3388804508)
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
- << NEW_YORK;
-#else
- << QGeoCoordinate(40.7145220608416, -74.0071216045375);
-#endif
- QTest::newRow("north pole -> south pole")
- << NORTH_POLE
- << qreal(20015109.4154876769)
- << qreal(180.0)
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
- << SOUTH_POLE;
-#else
- << QGeoCoordinate(-89.9999947369857, -90.0);
-#endif
+ if (sizeof(qreal) == sizeof(double)) {
+ QTest::newRow("brisbane -> melbourne")
+ << BRISBANE
+ << qreal(1374820.1618767744)
+ << qreal(211.1717286649)
+ << MELBOURNE;
+ QTest::newRow("london -> new york")
+ << LONDON
+ << qreal(5570538.4987236429)
+ << qreal(288.3388804508)
+ << NEW_YORK;
+ QTest::newRow("north pole -> south pole")
+ << NORTH_POLE
+ << qreal(20015109.4154876769)
+ << qreal(180.0)
+ << SOUTH_POLE;
+ } else {
+ QTest::newRow("brisbane -> melbourne")
+ << BRISBANE
+ << qreal(1374820.1618767744)
+ << qreal(211.1717286649)
+ << QGeoCoordinate(-37.8142515084775, 144.963170622944);
+ QTest::newRow("london -> new york")
+ << LONDON
+ << qreal(5570538.4987236429)
+ << qreal(288.3388804508)
+ << QGeoCoordinate(40.7145220608416, -74.0071216045375);
+ QTest::newRow("north pole -> south pole")
+ << NORTH_POLE
+ << qreal(20015109.4154876769)
+ << qreal(180.0)
+ << QGeoCoordinate(-89.9999947369857, -90.0);
+ }
}
void degreesToString()
diff --git a/tests/auto/qgeopositioninfo/tst_qgeopositioninfo.cpp b/tests/auto/qgeopositioninfo/tst_qgeopositioninfo.cpp
index 21417f84..1a1274c6 100644
--- a/tests/auto/qgeopositioninfo/tst_qgeopositioninfo.cpp
+++ b/tests/auto/qgeopositioninfo/tst_qgeopositioninfo.cpp
@@ -73,21 +73,15 @@ QList<qreal> tst_qgeopositioninfo_qrealTestValues()
{
QList<qreal> values;
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
if (qreal(DBL_MIN) == DBL_MIN)
values << DBL_MIN;
-#endif
values << FLT_MIN;
values << -1.0 << 0.0 << 1.0;
values << FLT_MAX;
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
if (qreal(DBL_MAX) == DBL_MAX)
values << DBL_MAX;
-#endif
return values;
}
diff --git a/tests/auto/qgeosatelliteinfo/tst_qgeosatelliteinfo.cpp b/tests/auto/qgeosatelliteinfo/tst_qgeosatelliteinfo.cpp
index 69f04762..7dc38d6b 100644
--- a/tests/auto/qgeosatelliteinfo/tst_qgeosatelliteinfo.cpp
+++ b/tests/auto/qgeosatelliteinfo/tst_qgeosatelliteinfo.cpp
@@ -73,21 +73,15 @@ QList<qreal> tst_qgeosatelliteinfo_qrealTestValues()
{
QList<qreal> values;
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
if (qreal(DBL_MIN) == DBL_MIN)
values << DBL_MIN;
-#endif
values << FLT_MIN;
values << -1.0 << 0.0 << 1.0;
values << FLT_MAX;
-// the following platforms use float for qreal
-#if !defined(QT_NO_FPU) && !defined(Q_PROCESSOR_ARM) && !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
if (qreal(DBL_MAX) == DBL_MAX)
values << DBL_MAX;
-#endif
return values;
}