// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \example satelliteinfo
    \title SatelliteInfo (C++/QML)

    \brief The SatelliteInfo example shows the available satellites
    at the user's current position and marks the satellites
    currently contributing to the GPS fix as pink.

    \ingroup qtpositioning-examples

    Key \l{Qt Positioning} classes used in this example:

    \list
    \li \l{QGeoSatelliteInfo}
    \li \l{QGeoSatelliteInfoSource}
    \endlist

    \image ../images/example-satelliteinfo.png

    The example displays the signal strength of all satellites in view. Any
    satellite that is currently used to calculate the GPS fix is marked pink.
    The number at the bottom of each signal bar is the individual satellite
    identifier.

    The application operates in three different modes:

    \table
        \header
            \li Application mode
            \li Description
        \row
            \li running
            \li The application continuously queries the system for satellite updates. When new data
                is available it will be displayed.
        \row
            \li stopped
            \li The application stops updating the satellite information.
        \row
            \li single
            \li The application makes a single update request with a timeout of 10s. The display
                remains empty until the request was answered by the system.
    \endtable

    If the platform does not provide satellite information, the application
    automatically switches into a demo mode, whereby it continuously switches
    between predefined sets of satellite data.

    \include examples-run.qdocinc

    \section1 Satellite Info Model

    The key part of this example is the \c SatelliteModel data model. It
    represents the information about the satellites.
    It uses the \l Q_PROPERTY and \l QML_ELEMENT macros, so that it can be
    available from QML.

    \snippet satelliteinfo/satellitemodel.h 0
    \snippet satelliteinfo/satellitemodel.h 1
    \snippet satelliteinfo/satellitemodel.h 2

    The \c SatelliteModel object creates an instance of
    \l QGeoSatelliteInfoSource using the \l {QGeoSatelliteInfoSource::}
    {createDefaultSource()} method. Once the source is created, the
    \l {QGeoSatelliteInfoSource::}{satellitesInViewUpdated()} and
    \l {QGeoSatelliteInfoSource::}{satellitesInUseUpdated()} signals are used
    to notify about the changes in satellite information.

    \snippet satelliteinfo/satellitemodel.cpp 0

    The aforementioned signals provide the lists of \l QGeoSatelliteInfo
    objects that represent satellites in view and satellites in use,
    respectively. This data is used to update the model.

    \snippet satelliteinfo/satellitemodel.cpp 1

    If the satellite info source is not available, demo data is used to simulate
    satellite information updates.

    \snippet satelliteinfo/satellitemodel.cpp 2

    The model is later used in QML to visualize the data.

    \section1 Exposing the Model to QML

    To expose \c SatelliteModel to QML, we use the \l QML_ELEMENT macro.
    See the \l QQmlEngine class documentation for more details on it.

    To make the type available in QML, we need to update our build accordingly.

    \section2 CMake Build

    For a CMake-based build, we need to add the following to the
    \c {CMakeLists.txt}:

    \quotefromfile satelliteinfo/CMakeLists.txt
    \skipto qt_add_qml_module(satelliteinfo
    \printuntil )

    \section2 qmake Build

    For a qmake build, we need to modify the \c {satelliteinfo.pro} file in the
    following way:

    \quotefromfile satelliteinfo/satelliteinfo.pro
    \skipto CONFIG
    \printuntil QML_IMPORT_MAJOR_VERSION
*/
