AirMapRestrictionManager.h 1.65 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/****************************************************************************
 *
 *   (c) 2017 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

#pragma once

Gus Grubba's avatar
Gus Grubba committed
12
#include "LifetimeChecker.h"
13
#include "AirspaceRestrictionProvider.h"
Gus Grubba's avatar
Gus Grubba committed
14
#include "AirMapSharedState.h"
15

Gus Grubba's avatar
Gus Grubba committed
16 17 18
#include <QList>
#include <QGeoCoordinate>

Gus Grubba's avatar
Gus Grubba committed
19
#include "airmap/geometry.h"
Gus Grubba's avatar
Gus Grubba committed
20

21 22 23 24 25 26 27 28 29
/**
 * @file AirMapRestrictionManager.h
 * Class to download polygons from AirMap
 */

class AirMapRestrictionManager : public AirspaceRestrictionProvider, public LifetimeChecker
{
    Q_OBJECT
public:
30 31 32 33
    AirMapRestrictionManager            (AirMapSharedState& shared);
    QmlObjectListModel* polygons        () override { return &_polygons; }
    QmlObjectListModel* circles         () override { return &_circles; }
    void                setROI          (const QGeoCoordinate& center, double radiusMeters) override;
34 35

signals:
36
    void error                          (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
37 38

private:
39 40 41
    void            _requestRestrictions(const QGeoCoordinate& center, double radiusMeters);
    void            _addPolygonToList   (const airmap::Geometry::Polygon& polygon);

42 43 44 45
    enum class State {
        Idle,
        RetrieveItems,
    };
46 47 48 49 50 51 52

    AirMapSharedState&  _shared;
    double              _lastRadius;
    QGeoCoordinate      _lastRoiCenter;
    State               _state = State::Idle;
    QmlObjectListModel  _polygons;
    QmlObjectListModel  _circles;
53 54
};