1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 Jolla Ltd.
4 ** Contact: Aaron McCarthy <aaron.mccarthy@jollamobile.com>
5 ** Copyright (C) 2016 The Qt Company Ltd.
6 ** Contact: https://www.qt.io/licensing/
7 **
8 ** This file is part of the QtPositioning module of the Qt Toolkit.
9 **
10 ** $QT_BEGIN_LICENSE:LGPL$
11 ** Commercial License Usage
12 ** Licensees holding valid commercial Qt licenses may use this file in
13 ** accordance with the commercial license agreement provided with the
14 ** Software or, alternatively, in accordance with the terms contained in
15 ** a written agreement between you and The Qt Company. For licensing terms
16 ** and conditions see https://www.qt.io/terms-conditions. For further
17 ** information use the contact form at https://www.qt.io/contact-us.
18 **
19 ** GNU Lesser General Public License Usage
20 ** Alternatively, this file may be used under the terms of the GNU Lesser
21 ** General Public License version 3 as published by the Free Software
22 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
23 ** packaging of this file. Please review the following information to
24 ** ensure the GNU Lesser General Public License version 3 requirements
25 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
26 **
27 ** GNU General Public License Usage
28 ** Alternatively, this file may be used under the terms of the GNU
29 ** General Public License version 2.0 or (at your option) the GNU General
30 ** Public license version 3 or any later version approved by the KDE Free
31 ** Qt Foundation. The licenses are as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
33 ** included in the packaging of this file. Please review the following
34 ** information to ensure the GNU General Public License requirements will
35 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
36 ** https://www.gnu.org/licenses/gpl-3.0.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ***************************************************************************/
41 
42 #ifndef QDECLARATIVEPOSITION_H
43 #define QDECLARATIVEPOSITION_H
44 
45 //
46 //  W A R N I N G
47 //  -------------
48 //
49 // This file is not part of the Qt API.  It exists purely as an
50 // implementation detail.  This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55 
56 #include <QtPositioningQuick/private/qpositioningquickglobal_p.h>
57 #include <QtPositioning/QGeoPositionInfo>
58 #include <QtCore/QObject>
59 #include <QtCore/QDateTime>
60 #include <QtQml/qqml.h>
61 
62 QT_BEGIN_NAMESPACE
63 
64 class Q_POSITIONINGQUICK_PRIVATE_EXPORT QDeclarativePosition : public QObject
65 {
66     Q_OBJECT
67 
68     Q_PROPERTY(bool latitudeValid READ isLatitudeValid NOTIFY latitudeValidChanged)
69     Q_PROPERTY(bool longitudeValid READ isLongitudeValid NOTIFY longitudeValidChanged)
70     Q_PROPERTY(bool altitudeValid READ isAltitudeValid NOTIFY altitudeValidChanged)
71     Q_PROPERTY(QGeoCoordinate coordinate READ coordinate NOTIFY coordinateChanged)
72     Q_PROPERTY(QDateTime timestamp READ timestamp NOTIFY timestampChanged)
73     Q_PROPERTY(double speed READ speed NOTIFY speedChanged)
74     Q_PROPERTY(bool speedValid READ isSpeedValid NOTIFY speedValidChanged)
75     Q_PROPERTY(qreal horizontalAccuracy READ horizontalAccuracy WRITE setHorizontalAccuracy NOTIFY horizontalAccuracyChanged)
76     Q_PROPERTY(qreal verticalAccuracy READ verticalAccuracy WRITE setVerticalAccuracy NOTIFY verticalAccuracyChanged)
77     Q_PROPERTY(bool horizontalAccuracyValid READ isHorizontalAccuracyValid NOTIFY horizontalAccuracyValidChanged)
78     Q_PROPERTY(bool verticalAccuracyValid READ isVerticalAccuracyValid NOTIFY verticalAccuracyValidChanged)
79 
80     Q_PROPERTY(bool directionValid READ isDirectionValid NOTIFY directionValidChanged REVISION 1)
81     Q_PROPERTY(double direction READ direction NOTIFY directionChanged REVISION 1)
82     Q_PROPERTY(bool verticalSpeedValid READ isVerticalSpeedValid NOTIFY verticalSpeedValidChanged REVISION 1)
83     Q_PROPERTY(double verticalSpeed READ verticalSpeed NOTIFY verticalSpeedChanged REVISION 1)
84 
85     Q_PROPERTY(double magneticVariation READ magneticVariation NOTIFY magneticVariationChanged REVISION 2)
86     Q_PROPERTY(bool magneticVariationValid READ isMagneticVariationValid NOTIFY magneticVariationChanged REVISION 2)
87 
88 public:
89     explicit QDeclarativePosition(QObject *parent = 0);
90     ~QDeclarativePosition();
91 
92     bool isLatitudeValid() const;
93     bool isLongitudeValid() const;
94     bool isAltitudeValid() const;
95     QDateTime timestamp() const;
96     double speed() const;
97     bool isSpeedValid() const;
98     QGeoCoordinate coordinate();
99     bool isHorizontalAccuracyValid() const;
100     qreal horizontalAccuracy() const;
101     void setHorizontalAccuracy(qreal horizontalAccuracy);
102     bool isVerticalAccuracyValid() const;
103     qreal verticalAccuracy() const;
104     void setVerticalAccuracy(qreal verticalAccuracy);
105 
106     bool isDirectionValid() const;
107     double direction() const;
108     void setDirection(double direction);
109 
110     bool isVerticalSpeedValid() const;
111     double verticalSpeed() const;
112     void setVerticalSpeed(double speed);
113 
114     bool isMagneticVariationValid() const;
115     double magneticVariation() const;
116 
117     void setPosition(const QGeoPositionInfo &info);
118     const QGeoPositionInfo &position() const;
119 
120 Q_SIGNALS:
121     void latitudeValidChanged();
122     void longitudeValidChanged();
123     void altitudeValidChanged();
124     void timestampChanged();
125     void speedChanged();
126     void speedValidChanged();
127     void coordinateChanged();
128     void horizontalAccuracyChanged();
129     void horizontalAccuracyValidChanged();
130     void verticalAccuracyChanged();
131     void verticalAccuracyValidChanged();
132 
133     Q_REVISION(1) void directionValidChanged();
134     Q_REVISION(1) void directionChanged();
135     Q_REVISION(1) void verticalSpeedValidChanged();
136     Q_REVISION(1) void verticalSpeedChanged();
137 
138     Q_REVISION(2) void magneticVariationChanged();
139     Q_REVISION(2) void magneticVariationValidChanged();
140 
141 private:
142     QGeoPositionInfo m_info;
143 };
144 
145 QT_END_NAMESPACE
146 
147 QML_DECLARE_TYPE(QDeclarativePosition)
148 
149 #endif
150