| 1 | /**************************************************************************** |
| 2 | ** |
| 3 | ** Copyright (C) 2016 The Qt Company Ltd. |
| 4 | ** Contact: https://www.qt.io/licensing/ |
| 5 | ** |
| 6 | ** This file is part of the QtPositioning module of the Qt Toolkit. |
| 7 | ** |
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ |
| 9 | ** Commercial License Usage |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in |
| 11 | ** accordance with the commercial license agreement provided with the |
| 12 | ** Software or, alternatively, in accordance with the terms contained in |
| 13 | ** a written agreement between you and The Qt Company. For licensing terms |
| 14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
| 15 | ** information use the contact form at https://www.qt.io/contact-us. |
| 16 | ** |
| 17 | ** GNU Lesser General Public License Usage |
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
| 19 | ** General Public License version 3 as published by the Free Software |
| 20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| 21 | ** packaging of this file. Please review the following information to |
| 22 | ** ensure the GNU Lesser General Public License version 3 requirements |
| 23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| 24 | ** |
| 25 | ** GNU General Public License Usage |
| 26 | ** Alternatively, this file may be used under the terms of the GNU |
| 27 | ** General Public License version 2.0 or (at your option) the GNU General |
| 28 | ** Public license version 3 or any later version approved by the KDE Free |
| 29 | ** Qt Foundation. The licenses are as published by the Free Software |
| 30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| 31 | ** included in the packaging of this file. Please review the following |
| 32 | ** information to ensure the GNU General Public License requirements will |
| 33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| 34 | ** https://www.gnu.org/licenses/gpl-3.0.html. |
| 35 | ** |
| 36 | ** $QT_END_LICENSE$ |
| 37 | ** |
| 38 | ****************************************************************************/ |
| 39 | |
| 40 | |
| 41 | #include <QtPositioningQuick/private/qdeclarativegeoaddress_p.h> |
| 42 | #include <QtPositioningQuick/private/qdeclarativegeolocation_p.h> |
| 43 | #include <QtPositioning/private/qwebmercator_p.h> |
| 44 | #include <QtPositioningQuick/private/qdeclarativeposition_p.h> |
| 45 | #include <QtPositioningQuick/private/qdeclarativepositionsource_p.h> |
| 46 | #include <QtPositioningQuick/private/qdeclarativepluginparameter_p.h> |
| 47 | |
| 48 | #include <QtPositioningQuick/private/qquickgeocoordinateanimation_p.h> |
| 49 | #include "locationsingleton.h" |
| 50 | |
| 51 | #include <QtCore/QVariantAnimation> |
| 52 | |
| 53 | #include <QtQml/qqmlextensionplugin.h> |
| 54 | #include <QtQml/private/qqmlvaluetype_p.h> |
| 55 | |
| 56 | #include <QtPositioning/QGeoRectangle> |
| 57 | #include <QtPositioning/QGeoCircle> |
| 58 | #include <QtPositioning/QGeoPath> |
| 59 | #include <QtPositioning/QGeoLocation> |
| 60 | #include <QtPositioning/QGeoPositionInfo> |
| 61 | #include <QtPositioning/private/qgeocoordinateobject_p.h> |
| 62 | |
| 63 | #include <QtCore/QDebug> |
| 64 | |
| 65 | QT_BEGIN_NAMESPACE |
| 66 | |
| 67 | /*! |
| 68 | \qmlbasictype coordinate |
| 69 | \inqmlmodule QtPositioning |
| 70 | \ingroup qml-QtPositioning5-basictypes |
| 71 | \since 5.2 |
| 72 | |
| 73 | \brief The coordinate type represents and stores a geographic position. |
| 74 | |
| 75 | This type is a QML representation of \l QGeoCoordinate and represents a geographic |
| 76 | position in the form of \l {latitude}, \l longitude and \l altitude attributes. |
| 77 | The \l latitude attribute specifies the number of |
| 78 | decimal degrees above and below the equator. A positive latitude indicates the Northern |
| 79 | Hemisphere and a negative latitude indicates the Southern Hemisphere. The \l longitude |
| 80 | attribute specifies the number of decimal degrees east and west. A positive longitude |
| 81 | indicates the Eastern Hemisphere and a negative longitude indicates the Western Hemisphere. |
| 82 | The \l altitude attribute specifies the number of meters above sea level. Together, these |
| 83 | attributes specify a 3-dimensional position anywhere on or near the Earth's surface. |
| 84 | |
| 85 | The \l isValid attribute can be used to test if a coordinate is valid. A coordinate is |
| 86 | considered valid if it has a valid latitude and longitude. A valid altitude is not required. |
| 87 | The latitude must be between -90 and 90 inclusive and the longitude must be between -180 and |
| 88 | 180 inclusive. |
| 89 | |
| 90 | The \c coordinate type is used by many other types in the Qt Location module, for specifying |
| 91 | the position of an object on a Map, the current position of a device and many other tasks. |
| 92 | They also feature a number of important utility methods that make otherwise complex |
| 93 | calculations simple to use, such as \l {atDistanceAndAzimuth}(). |
| 94 | |
| 95 | \section1 Accuracy |
| 96 | |
| 97 | The latitude, longitude and altitude attributes stored in the coordinate type are represented |
| 98 | as doubles, giving them approximately 16 decimal digits of precision -- enough to specify |
| 99 | micrometers. The calculations performed in coordinate's methods such as \l {azimuthTo}() and |
| 100 | \l {distanceTo}() also use doubles for all intermediate values, but the inherent inaccuracies in |
| 101 | their spherical Earth model dominate the amount of error in their output. |
| 102 | |
| 103 | \section1 Example Usage |
| 104 | |
| 105 | Use properties of type \l variant to store a \c {coordinate}. To create a \c coordinate use |
| 106 | one of the methods described below. In all cases, specifying the \l altitude attribute is |
| 107 | optional. |
| 108 | |
| 109 | To create a \c coordinate value, use the \l{QtPositioning::coordinate}{QtPositioning.coordinate()} |
| 110 | function: |
| 111 | |
| 112 | \qml |
| 113 | import QtPositioning 5.2 |
| 114 | |
| 115 | Location { coordinate: QtPositioning.coordinate(-27.5, 153.1) } |
| 116 | \endqml |
| 117 | |
| 118 | or as separate \l latitude, \l longitude and \l altitude components: |
| 119 | |
| 120 | \qml |
| 121 | Location { |
| 122 | coordinate { |
| 123 | latitude: -27.5 |
| 124 | longitude: 153.1 |
| 125 | } |
| 126 | } |
| 127 | \endqml |
| 128 | |
| 129 | When integrating with C++, note that any QGeoCoordinate value passed into QML from C++ is |
| 130 | automatically converted into a \c coordinate value, and vice-versa. |
| 131 | |
| 132 | \section1 Properties |
| 133 | |
| 134 | \section2 latitude |
| 135 | |
| 136 | \code |
| 137 | real latitude |
| 138 | \endcode |
| 139 | |
| 140 | This property holds the latitude value of the geographical position |
| 141 | (decimal degrees). A positive latitude indicates the Northern Hemisphere, |
| 142 | and a negative latitude indicates the Southern Hemisphere. |
| 143 | If the property has not been set, its default value is NaN. |
| 144 | |
| 145 | For more details see the \l {QGeoCoordinate::latitude} property |
| 146 | |
| 147 | \section2 longitude |
| 148 | |
| 149 | \code |
| 150 | real longitude |
| 151 | \endcode |
| 152 | |
| 153 | This property holds the longitude value of the geographical position |
| 154 | (decimal degrees). A positive longitude indicates the Eastern Hemisphere, |
| 155 | and a negative longitude indicates the Western Hemisphere |
| 156 | If the property has not been set, its default value is NaN. |
| 157 | |
| 158 | For more details see the \l {QGeoCoordinate::longitude} property |
| 159 | |
| 160 | \section2 altitude |
| 161 | |
| 162 | \code |
| 163 | real altitude |
| 164 | \endcode |
| 165 | |
| 166 | This property holds the altitude value (meters above sea level). |
| 167 | If the property has not been set, its default value is NaN. |
| 168 | |
| 169 | For more details see the \l {QGeoCoordinate::altitude} property |
| 170 | |
| 171 | \section2 isValid |
| 172 | |
| 173 | \code |
| 174 | bool isValid |
| 175 | \endcode |
| 176 | |
| 177 | This property holds the current validity of the coordinate. Coordinates |
| 178 | are considered valid if they have been set with a valid latitude and |
| 179 | longitude (altitude is not required). |
| 180 | |
| 181 | The latitude must be between -90 to 90 inclusive to be considered valid, |
| 182 | and the longitude must be between -180 to 180 inclusive to be considered |
| 183 | valid. |
| 184 | |
| 185 | This is a read-only property. |
| 186 | |
| 187 | \section1 Methods |
| 188 | |
| 189 | \section2 distanceTo() |
| 190 | |
| 191 | \code |
| 192 | real distanceTo(coordinate other) |
| 193 | \endcode |
| 194 | |
| 195 | Returns the distance (in meters) from this coordinate to the coordinate specified by \a other. |
| 196 | Altitude is not used in the calculation. |
| 197 | |
| 198 | This calculation returns the great-circle distance between the two coordinates, with an |
| 199 | assumption that the Earth is spherical for the purpose of this calculation. |
| 200 | |
| 201 | \section2 azimuthTo() |
| 202 | |
| 203 | \code |
| 204 | real azimuth(coordinate other) |
| 205 | \endcode |
| 206 | |
| 207 | Returns the azimuth (or bearing) in degrees from this coordinate to the coordinate specified by |
| 208 | \a other. Altitude is not used in the calculation. |
| 209 | |
| 210 | There is an assumption that the Earth is spherical for the purpose of this calculation. |
| 211 | |
| 212 | \section2 atDistanceAndAzimuth() |
| 213 | |
| 214 | \code |
| 215 | coordinate atDistanceAndAzimuth(real distance, real azimuth) |
| 216 | \endcode |
| 217 | |
| 218 | Returns the coordinate that is reached by traveling \a distance metres from this coordinate at |
| 219 | \a azimuth degrees along a great-circle. |
| 220 | |
| 221 | There is an assumption that the Earth is spherical for the purpose of this calculation. |
| 222 | */ |
| 223 | |
| 224 | /*! |
| 225 | \qmlbasictype geoshape |
| 226 | \inqmlmodule QtPositioning |
| 227 | \ingroup qml-QtPositioning5-basictypes |
| 228 | \since 5.2 |
| 229 | |
| 230 | \brief A geoshape type represents an abstract geographic area. |
| 231 | |
| 232 | This type is a QML representation of \l QGeoShape which is an abstract geographic area. |
| 233 | It includes attributes and methods common to all geographic areas. To create objects |
| 234 | that represent a valid geographic area use \l {georectangle} or \l {geocircle}. |
| 235 | |
| 236 | The \l isValid attribute can be used to test if the geoshape represents a valid geographic |
| 237 | area. |
| 238 | |
| 239 | The \l isEmpty attribute can be used to test if the geoshape represents a region with a |
| 240 | geometrical area of 0. |
| 241 | |
| 242 | The \l {contains}() method can be used to test if a \l {coordinate} is |
| 243 | within the geoshape. |
| 244 | |
| 245 | \section1 Example Usage |
| 246 | |
| 247 | Use properties of type \l variant to store a \c {geoshape}. To create a \c geoshape use one |
| 248 | of the methods described below. |
| 249 | |
| 250 | To create a \c geoshape value, specify it as a "shape()" string: |
| 251 | |
| 252 | \qml |
| 253 | import QtPositioning |
| 254 | |
| 255 | Item { |
| 256 | property variant region: "shape()" |
| 257 | } |
| 258 | \endqml |
| 259 | |
| 260 | or with the \l {QtPositioning::shape}{QtPositioning.shape()} function: |
| 261 | |
| 262 | \qml |
| 263 | import QtPositioning 5.2 |
| 264 | |
| 265 | Item { |
| 266 | property variant region: QtPositioning.shape() |
| 267 | } |
| 268 | \endqml |
| 269 | |
| 270 | When integrating with C++, note that any QGeoShape value passed into QML from C++ is |
| 271 | automatically converted into a \c geoshape value, and vice-versa. |
| 272 | |
| 273 | \section1 Properties |
| 274 | |
| 275 | \section2 isEmpty |
| 276 | |
| 277 | \code |
| 278 | bool isEmpty |
| 279 | \endcode |
| 280 | |
| 281 | Returns whether this geoshape is empty. An empty geoshape is a region which has |
| 282 | a geometrical area of 0. |
| 283 | |
| 284 | \section2 isValid |
| 285 | |
| 286 | \code |
| 287 | bool isValid |
| 288 | \endcode |
| 289 | |
| 290 | Returns whether this geoshape is valid. |
| 291 | |
| 292 | A geoshape is considered to be invalid if some of the data that is required to |
| 293 | unambiguously describe the geoshape has not been set or has been set to an |
| 294 | unsuitable value. |
| 295 | |
| 296 | \section2 type |
| 297 | |
| 298 | \code |
| 299 | ShapeType type |
| 300 | \endcode |
| 301 | |
| 302 | Returns the current type of the shape. |
| 303 | |
| 304 | \list |
| 305 | \li \c GeoShape.UnknownType - The shape's type is not known. |
| 306 | \li \c GeoShape.RectangleType - The shape is a \l georectangle. |
| 307 | \li \c GeoShape.CircleType - The shape is a \l geocircle. |
| 308 | \li \c GeoShape.PathType - The shape is a \l geopath. (Since Qt 5.9) |
| 309 | \li \c GeoShape.PolygonType - The shape is a \l geopolygon. (Since Qt 5.10) |
| 310 | \endlist |
| 311 | |
| 312 | This QML property was introduced by Qt 5.5. |
| 313 | |
| 314 | \section1 Methods |
| 315 | |
| 316 | \section2 contains() |
| 317 | |
| 318 | \code |
| 319 | bool contains(coordinate coord) |
| 320 | \endcode |
| 321 | |
| 322 | Returns true if the \l {QtPositioning::coordinate}{coordinate} specified by \a coord is within |
| 323 | this geoshape; Otherwise returns false. |
| 324 | */ |
| 325 | |
| 326 | /*! |
| 327 | \qmlbasictype georectangle |
| 328 | \inqmlmodule QtPositioning |
| 329 | \ingroup qml-QtPositioning5-basictypes |
| 330 | \since 5.2 |
| 331 | |
| 332 | \brief The georectangle type represents a rectangular geographic area. |
| 333 | |
| 334 | The \c georectangle type is a \l {geoshape} that represents a |
| 335 | rectangular geographic area. The type is direct representation of a \l QGeoRectangle. |
| 336 | It is defined by a pair of \l {coordinate}{coordinates} which represent the top-left |
| 337 | and bottom-right corners of the \c {georectangle}. The coordinates are accessible |
| 338 | from the \l topLeft and \l bottomRight attributes. |
| 339 | |
| 340 | A \c georectangle is considered invalid if the top-left or bottom-right coordinates are invalid |
| 341 | or if the top-left coordinate is south of the bottom-right coordinate. |
| 342 | |
| 343 | The coordinates of the four corners of the \c georectangle can be accessed with the |
| 344 | \l {topLeft}, \l {topRight}, \l {bottomLeft} and \l {bottomRight} attributes. The \l center |
| 345 | attribute can be used to get the coordinate of the center of the \c georectangle. The \l width |
| 346 | and \l height attributes can be used to get the width and height of the \c georectangle in |
| 347 | degrees. Setting one of these attributes will cause the other attributes to be adjusted |
| 348 | accordingly. |
| 349 | |
| 350 | \section1 Limitations |
| 351 | |
| 352 | A \c georectangle can never cross the poles. |
| 353 | |
| 354 | If the height or center of a \c georectangle is adjusted such that it would cross one of the |
| 355 | poles the height is modified such that the \c georectangle touches but does not cross the pole |
| 356 | and that the center coordinate is still in the center of the \c georectangle. |
| 357 | |
| 358 | \section1 Example Usage |
| 359 | |
| 360 | Use properties of type \l variant to store a \c {georectangle}. To create a \c georectangle |
| 361 | value, use the \l {QtPositioning::rectangle}{QtPositioning.rectangle()} function: |
| 362 | |
| 363 | \qml |
| 364 | import QtPositioning 5.2 |
| 365 | |
| 366 | Item { |
| 367 | property variant region: QtPositioning.rectangle(QtPositioning.coordinate(-27.5, 153.1), QtPositioning.coordinate(-27.6, 153.2)) |
| 368 | } |
| 369 | \endqml |
| 370 | |
| 371 | When integrating with C++, note that any QGeoRectangle value passed into QML from C++ is |
| 372 | automatically converted into a \c georectangle value, and vice-versa. |
| 373 | |
| 374 | \section1 Properties |
| 375 | |
| 376 | \section2 bottomLeft |
| 377 | |
| 378 | \code |
| 379 | coordinate bottomLeft |
| 380 | \endcode |
| 381 | |
| 382 | This property holds the bottom left coordinate of this georectangle. |
| 383 | |
| 384 | \section2 bottomRight |
| 385 | |
| 386 | \code |
| 387 | coordinate bottomRight |
| 388 | \endcode |
| 389 | |
| 390 | This property holds the bottom right coordinate of this georectangle. |
| 391 | |
| 392 | \section2 center |
| 393 | |
| 394 | \code |
| 395 | coordinate center |
| 396 | \endcode |
| 397 | |
| 398 | This property holds the center coordinate of this georectangle. For more details |
| 399 | see \l {QGeoRectangle::setCenter()}. |
| 400 | |
| 401 | \section2 height |
| 402 | |
| 403 | \code |
| 404 | double height |
| 405 | \endcode |
| 406 | |
| 407 | This property holds the height of this georectangle (in degrees). For more details |
| 408 | see \l {QGeoRectangle::setHeight()}. |
| 409 | |
| 410 | \note If the georectangle is invalid, it is not possible to set the height. QtPositioning |
| 411 | releases prior to Qt 5.5 permitted the setting of the height even on invalid georectangles. |
| 412 | |
| 413 | \section2 topLeft |
| 414 | |
| 415 | \code |
| 416 | coordinate topLeft |
| 417 | \endcode |
| 418 | |
| 419 | This property holds the top left coordinate of this georectangle. |
| 420 | |
| 421 | \section2 topRight |
| 422 | |
| 423 | \code |
| 424 | coordinate topRight |
| 425 | \endcode |
| 426 | |
| 427 | This property holds the top right coordinate of this georectangle. |
| 428 | |
| 429 | \section2 width |
| 430 | |
| 431 | \code |
| 432 | double width |
| 433 | \endcode |
| 434 | |
| 435 | This property holds the width of this georectangle (in degrees). For more details |
| 436 | see \l {QGeoRectangle::setWidth()}. |
| 437 | |
| 438 | \note If the georectangle is invalid, it is not possible to set the width. QtPositioning |
| 439 | releases prior to Qt 5.5 permitted the setting of the width even on invalid georectangles. |
| 440 | */ |
| 441 | |
| 442 | /*! |
| 443 | \qmlbasictype geocircle |
| 444 | \inqmlmodule QtPositioning |
| 445 | \ingroup qml-QtPositioning5-basictypes |
| 446 | \since 5.2 |
| 447 | |
| 448 | \brief The geocircle type represents a circular geographic area. |
| 449 | |
| 450 | The \c geocircle type is a \l {geoshape} that represents a circular |
| 451 | geographic area. It is a direct representation of a \l QGeoCircle and is defined |
| 452 | in terms of a \l {coordinate} which specifies the \l center of the circle and |
| 453 | a qreal which specifies the \l radius of the circle in meters. |
| 454 | |
| 455 | The circle is considered invalid if the \l center coordinate is invalid or if |
| 456 | the \l radius is less than zero. |
| 457 | |
| 458 | \section1 Example Usage |
| 459 | |
| 460 | Use properties of type \l variant to store a \c {geocircle}. To create a \c geocircle value, |
| 461 | use the \l {QtPositioning::circle}{QtPositioning.circle()} function: |
| 462 | |
| 463 | \qml |
| 464 | import QtPositioning 5.2 |
| 465 | |
| 466 | Item { |
| 467 | property variant region: QtPositioning.circle(QtPositioning.coordinate(-27.5, 153.1), 1000) |
| 468 | } |
| 469 | \endqml |
| 470 | |
| 471 | When integrating with C++, note that any QGeoCircle value passed into QML from C++ is |
| 472 | automatically converted into a \c geocircle value, and vise-versa. |
| 473 | |
| 474 | \section1 Properties |
| 475 | |
| 476 | \section2 center |
| 477 | |
| 478 | \code |
| 479 | coordinate radius |
| 480 | \endcode |
| 481 | |
| 482 | This property holds the coordinate of the center of the geocircle. |
| 483 | |
| 484 | \section2 radius |
| 485 | |
| 486 | \code |
| 487 | real radius |
| 488 | \endcode |
| 489 | |
| 490 | This property holds the radius of the geocircle in meters. |
| 491 | |
| 492 | The default value for the radius is -1 indicating an invalid geocircle area. |
| 493 | */ |
| 494 | |
| 495 | /*! |
| 496 | \qmlbasictype geopath |
| 497 | \inqmlmodule QtPositioning |
| 498 | \ingroup qml-QtPositioning5-basictypes |
| 499 | \since 5.9 |
| 500 | |
| 501 | \brief The geopath type represents a geographic path. |
| 502 | |
| 503 | The \c geopath type is a \l {geoshape} that represents a geographic |
| 504 | path. It is a direct representation of a \l QGeoPath and is defined |
| 505 | in terms of a \l {path} which holds the list of geo coordinates in the |
| 506 | path. |
| 507 | |
| 508 | The path is considered invalid if it is empty. |
| 509 | |
| 510 | When integrating with C++, note that any QGeoPath value passed into QML from C++ is |
| 511 | automatically converted into a \c geopath value, and vice versa. |
| 512 | |
| 513 | \section1 Properties |
| 514 | |
| 515 | \section2 path |
| 516 | |
| 517 | This property holds the list of coordinates defining the path. |
| 518 | |
| 519 | \section2 width |
| 520 | |
| 521 | This property holds the width of the path in meters. This is currently only used |
| 522 | when calling the \l {contains}() method. |
| 523 | |
| 524 | The default value for the width is 0. |
| 525 | */ |
| 526 | |
| 527 | /*! |
| 528 | \qmlbasictype geopolygon |
| 529 | \inqmlmodule QtPositioning |
| 530 | \ingroup qml-QtPositioning5-basictypes |
| 531 | \since 5.10 |
| 532 | |
| 533 | \brief The geopolygon type represents a geographic polygon. |
| 534 | |
| 535 | The \c geopolygon type is a \l [QML] geoshape that represents a geographic |
| 536 | polygon. It is a direct representation of QGeoPolygon and is defined in |
| 537 | terms of a \l path which holds a list of geo coordinates in the polygon. |
| 538 | |
| 539 | The polygon is considered invalid if its path holds less than three |
| 540 | coordinates. |
| 541 | |
| 542 | When integrating with C++, note that any QGeoPolygon value passed into QML |
| 543 | is automatically converted into a \c geopolygon, and vice versa. |
| 544 | |
| 545 | \section1 Properties |
| 546 | |
| 547 | \section2 path |
| 548 | |
| 549 | This property holds the list of coordinates defining the polygon. |
| 550 | */ |
| 551 | |
| 552 | static QObject *singleton_type_factory(QQmlEngine *engine, QJSEngine *jsEngine) |
| 553 | { |
| 554 | Q_UNUSED(engine); |
| 555 | Q_UNUSED(jsEngine); |
| 556 | |
| 557 | return new LocationSingleton; |
| 558 | } |
| 559 | |
| 560 | class QtPositioningDeclarativeModule: public QQmlExtensionPlugin |
| 561 | { |
| 562 | Q_OBJECT |
| 563 | |
| 564 | Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid |
| 565 | FILE "plugin.json" ) |
| 566 | |
| 567 | public: |
| 568 | QtPositioningDeclarativeModule(QObject *parent = 0) : QQmlExtensionPlugin(parent) { } |
| 569 | virtual void registerTypes(const char *uri) |
| 570 | { |
| 571 | if (QLatin1String(uri) == QStringLiteral("QtPositioning" )) { |
| 572 | |
| 573 | // @uri QtPositioning 5.0 |
| 574 | |
| 575 | int major = 5; |
| 576 | int minor = 0; |
| 577 | |
| 578 | qRegisterMetaType<QGeoCoordinate>(); |
| 579 | QMetaType::registerEqualsComparator<QGeoCoordinate>(); |
| 580 | qRegisterMetaType<QGeoAddress>(); |
| 581 | qRegisterMetaType<QGeoRectangle>(); |
| 582 | QMetaType::registerEqualsComparator<QGeoRectangle>(); |
| 583 | qRegisterMetaType<QGeoCircle>(); |
| 584 | QMetaType::registerEqualsComparator<QGeoCircle>(); |
| 585 | qRegisterMetaType<QGeoPath>(); |
| 586 | QMetaType::registerEqualsComparator<QGeoPath>(); |
| 587 | qRegisterMetaType<QGeoPolygon>(); |
| 588 | QMetaType::registerEqualsComparator<QGeoPolygon>(); |
| 589 | qRegisterMetaType<QGeoLocation>(); |
| 590 | qRegisterMetaType<QGeoShape>(); |
| 591 | QMetaType::registerEqualsComparator<QGeoShape>(); |
| 592 | qRegisterMetaType<QGeoCoordinateObject *>(); |
| 593 | qRegisterMetaType<QGeoPositionInfo>(); |
| 594 | QMetaType::registerEqualsComparator<QGeoPositionInfo>(); |
| 595 | |
| 596 | qRegisterAnimationInterpolator<QGeoCoordinate>(func: q_coordinateInterpolator); |
| 597 | |
| 598 | // Register the 5.0 types |
| 599 | // 5.0 is silent and not advertised |
| 600 | qmlRegisterSingletonType<LocationSingleton >(uri, versionMajor: major, versionMinor: minor, typeName: "QtPositioning" , callback: singleton_type_factory); |
| 601 | qmlRegisterValueTypeEnums<QGeoShape >(uri, versionMajor: major, versionMinor: minor, qmlName: "GeoShape" ); |
| 602 | qmlRegisterType<QDeclarativePosition >(uri, versionMajor: major, versionMinor: minor, qmlName: "Position" ); |
| 603 | qmlRegisterType<QDeclarativePositionSource >(uri, versionMajor: major, versionMinor: minor, qmlName: "PositionSource" ); |
| 604 | qmlRegisterType<QDeclarativeGeoAddress >(uri, versionMajor: major, versionMinor: minor, qmlName: "Address" ); |
| 605 | qmlRegisterType<QDeclarativeGeoLocation >(uri, versionMajor: major, versionMinor: minor, qmlName: "Location" ); |
| 606 | |
| 607 | // Register the 5.3 types |
| 608 | // Introduction of 5.3 version; existing 5.0 exports become automatically available under 5.3 |
| 609 | minor = 3; |
| 610 | qmlRegisterType<QQuickGeoCoordinateAnimation >(uri, versionMajor: major, versionMinor: minor, qmlName: "CoordinateAnimation" ); |
| 611 | qmlRegisterType<QDeclarativePosition, 1>(uri, versionMajor: major, versionMinor: minor, qmlName: "Position" ); |
| 612 | |
| 613 | minor = 4; |
| 614 | qmlRegisterType<QDeclarativePosition, 2>(uri, versionMajor: major, versionMinor: minor, qmlName: "Position" ); |
| 615 | |
| 616 | minor = 13; |
| 617 | qmlRegisterType<QDeclarativeGeoLocation, 13>(uri, versionMajor: major, versionMinor: minor, qmlName: "Location" ); |
| 618 | |
| 619 | minor = 14; |
| 620 | qmlRegisterType<QDeclarativePluginParameter >(uri, versionMajor: major, versionMinor: minor, qmlName: "PluginParameter" ); |
| 621 | |
| 622 | // Register the latest Qt version as QML type version |
| 623 | qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR); |
| 624 | } else { |
| 625 | qDebug() << "Unsupported URI given to load positioning QML plugin: " << QLatin1String(uri); |
| 626 | } |
| 627 | } |
| 628 | }; |
| 629 | |
| 630 | QT_END_NAMESPACE |
| 631 | |
| 632 | #include "positioning.moc" |
| 633 | |