diff options
author | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-14 21:44:51 +0200 |
---|---|---|
committer | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-14 21:44:51 +0200 |
commit | fc3f5e2ea8ba535d40610444c1f79b8ee9457968 (patch) | |
tree | b8a6812bb255dfc44d67bd0013658fb003be7159 | |
parent | 52969e957df3db332e6d95105a2600ab8f5f0ec6 (diff) | |
parent | 036c51c6841a207921a8d2dff3971e74f71201e9 (diff) | |
download | qtlocation-fc3f5e2ea8ba535d40610444c1f79b8ee9457968.tar.gz |
Merge remote-tracking branch 'origin/5.3' into dev
Change-Id: I79173a906d9af146e3707f8cacc60892609f590c
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; } |