GeoFenceController.h 5.44 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/****************************************************************************
 *
 *   (c) 2009-2016 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.
 *
 ****************************************************************************/

#ifndef GeoFenceController_H
#define GeoFenceController_H

#include "PlanElementController.h"
#include "GeoFenceManager.h"
#include "QGCMapPolygon.h"
#include "Vehicle.h"
#include "MultiVehicleManager.h"
#include "QGCLoggingCategory.h"

Q_DECLARE_LOGGING_CATEGORY(GeoFenceControllerLog)

22 23
class GeoFenceManager;

24 25 26 27 28 29 30 31
class GeoFenceController : public PlanElementController
{
    Q_OBJECT
    
public:
    GeoFenceController(QObject* parent = NULL);
    ~GeoFenceController();
    
32 33 34 35 36 37 38 39 40 41 42 43 44 45
    Q_PROPERTY(bool             circleEnabled       READ circleEnabled                                      NOTIFY circleEnabledChanged)
    Q_PROPERTY(float            circleRadius        READ circleRadius                                       NOTIFY circleRadiusChanged)

    Q_PROPERTY(bool             polygonEnabled      READ polygonEnabled                                     NOTIFY polygonEnabledChanged)
    Q_PROPERTY(QGCMapPolygon*   polygon             READ polygon                                            CONSTANT)

    Q_PROPERTY(bool             breachReturnEnabled READ breachReturnEnabled                                NOTIFY breachReturnEnabledChanged)
    Q_PROPERTY(QGeoCoordinate   breachReturnPoint   READ breachReturnPoint      WRITE setBreachReturnPoint  NOTIFY breachReturnPointChanged)

    Q_PROPERTY(QVariantList     params              READ params                                             NOTIFY paramsChanged)
    Q_PROPERTY(QStringList      paramLabels         READ paramLabels                                        NOTIFY paramLabelsChanged)
    Q_PROPERTY(QString          editorQml           READ editorQml                                          NOTIFY editorQmlChanged)

#if 0
46
    Q_PROPERTY(bool                 fenceSupported          READ fenceSupported                                     NOTIFY fenceSupportedChanged)
47
    Q_PROPERTY(bool                 fenceEnabled            READ fenceEnabled                                       NOTIFY fenceEnabledChanged)
48 49 50
    Q_PROPERTY(bool                 circleSupported         READ circleSupported                                    NOTIFY circleSupportedChanged)
    Q_PROPERTY(bool                 polygonSupported        READ polygonSupported                                   NOTIFY polygonSupportedChanged)
    Q_PROPERTY(bool                 breachReturnSupported   READ breachReturnSupported                              NOTIFY breachReturnSupportedChanged)
51
#endif
52

53 54 55 56 57 58 59 60 61 62 63 64
    void start                      (bool editMode) final;
    void startStaticActiveVehicle   (Vehicle* vehicle) final;
    void loadFromVehicle            (void) final;
    void sendToVehicle              (void) final;
    void loadFromFilePicker         (void) final;
    void loadFromFile               (const QString& filename) final;
    void saveToFilePicker           (void) final;
    void saveToFile                 (const QString& filename) final;
    void removeAll                  (void) final;
    bool syncInProgress             (void) const final;
    bool dirty                      (void) const final;
    void setDirty                   (bool dirty) final;
65

66 67
    QString fileExtension(void) const final;

68 69 70 71 72 73 74 75 76
    bool                circleEnabled       (void) const;
    bool                polygonEnabled      (void) const;
    bool                breachReturnEnabled (void) const;
    float               circleRadius        (void) const;
    QGCMapPolygon*      polygon             (void) { return &_polygon; }
    QGeoCoordinate      breachReturnPoint   (void) const { return _breachReturnPoint; }
    QVariantList        params              (void) const;
    QStringList         paramLabels         (void) const;
    QString             editorQml           (void) const;
77 78 79 80

    void setBreachReturnPoint(const QGeoCoordinate& breachReturnPoint);

signals:
81 82 83 84 85 86 87 88 89 90
    void circleEnabledChanged       (bool circleEnabled);
    void polygonEnabledChanged      (bool polygonEnabled);
    void breachReturnEnabledChanged (bool breachReturnEnabled);
    void circleRadiusChanged        (float circleRadius);
    void polygonPathChanged         (const QVariantList& polygonPath);
    void breachReturnPointChanged   (QGeoCoordinate breachReturnPoint);
    void paramsChanged              (QVariantList params);
    void paramLabelsChanged         (QStringList paramLabels);
    void editorQmlChanged           (QString editorQml);
    void loadComplete               (void);
91 92 93

private slots:
    void _polygonDirtyChanged(bool dirty);
94
    void _setDirty(void);
95 96 97
    void _setPolygonFromManager(const QList<QGeoCoordinate>& polygon);
    void _setReturnPointFromManager(QGeoCoordinate breachReturnPoint);
    void _loadComplete(const QGeoCoordinate& breachReturn, const QList<QGeoCoordinate>& polygon);
98 99

private:
100
    void _init(void);
101
    void _signalAll(void);
102
    bool _loadJsonFile(QJsonDocument& jsonDoc, QString& errorString);
103

104
    void _activeVehicleBeingRemoved(void) final;
105 106
    void _activeVehicleSet(void) final;

107 108 109 110 111 112
    bool                _dirty;
    QGCMapPolygon       _polygon;
    QGeoCoordinate      _breachReturnPoint;
    QVariantList        _params;

    static const char* _jsonFileTypeValue;
113
    static const char* _jsonBreachReturnKey;
114 115 116
};

#endif