AirMapRestrictionManager.h 1.86 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
#include "QGCGeoBoundingCube.h"
16

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

Gus Grubba's avatar
Gus Grubba committed
20
#include "airmap/geometry.h"
21
#include "airmap/airspaces.h"
Gus Grubba's avatar
Gus Grubba committed
22

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

class AirMapRestrictionManager : public AirspaceRestrictionProvider, public LifetimeChecker
{
    Q_OBJECT
public:
32 33 34
    AirMapRestrictionManager            (AirMapSharedState& shared);
    QmlObjectListModel* polygons        () override { return &_polygons; }
    QmlObjectListModel* circles         () override { return &_circles; }
35
    void                setROI          (const QGCGeoBoundingCube &roi, bool reset = false) override;
36 37

signals:
38
    void error                          (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
39 40

private:
41
    void            _requestRestrictions(const QGCGeoBoundingCube& roi);
Gus Grubba's avatar
Gus Grubba committed
42 43
    void            _addPolygonToList   (const airmap::Geometry::Polygon& polygon, const QString advisoryID, const QColor color, const QColor lineColor, float lineWidth);
    void            _getColor           (const airmap::Airspace& airspace, QColor &color, QColor &lineColor, float &lineWidth);
44

45 46 47 48
    enum class State {
        Idle,
        RetrieveItems,
    };
49 50

    AirMapSharedState&  _shared;
51
    QGCGeoBoundingCube  _lastROI;
52 53 54
    State               _state = State::Idle;
    QmlObjectListModel  _polygons;
    QmlObjectListModel  _circles;
55 56
};