AirspaceFlightPlanProvider.h 10.2 KB
Newer Older
Gus Grubba's avatar
Gus Grubba committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/****************************************************************************
 *
 *   (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

/**
 * @file AirspaceFlightPlanProvider.h
 * Create and maintain a flight plan
 */

17 18 19
#include "AirspaceAdvisoryProvider.h"
#include "QmlObjectListModel.h"

Gus Grubba's avatar
Gus Grubba committed
20
#include <QObject>
21
#include <QDateTime>
Gus Grubba's avatar
Gus Grubba committed
22
#include <QAbstractListModel>
Gus Grubba's avatar
Gus Grubba committed
23

24
class PlanMasterController;
Gus Grubba's avatar
Gus Grubba committed
25
class AirspaceFlightInfo;
Gus Grubba's avatar
Gus Grubba committed
26

Gus Grubba's avatar
Gus Grubba committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
//-----------------------------------------------------------------------------
class AirspaceFlightAuthorization : public QObject
{
    Q_OBJECT
public:
    AirspaceFlightAuthorization                     (QObject *parent = nullptr);

    enum AuthorizationStatus {
        Accepted,
        Rejected,
        Pending,
        AcceptedOnSubmission,
        RejectedOnSubmission,
        Unknown
    };

    Q_ENUM(AuthorizationStatus)

    Q_PROPERTY(QString              name            READ name           CONSTANT)
    Q_PROPERTY(QString              id              READ id             CONSTANT)
    Q_PROPERTY(AuthorizationStatus  status          READ status         CONSTANT)
    Q_PROPERTY(QString              message         READ message        CONSTANT)

    virtual QString                 name            () = 0;
    virtual QString                 id              () = 0;
    virtual AuthorizationStatus     status          () = 0;
    virtual QString                 message         () = 0;

};


Gus Grubba's avatar
Gus Grubba committed
58 59 60 61 62
//-----------------------------------------------------------------------------
class AirspaceFlightInfo : public QObject
{
    Q_OBJECT
public:
Gus Grubba's avatar
Gus Grubba committed
63
    AirspaceFlightInfo                              (QObject *parent = nullptr);
Gus Grubba's avatar
Gus Grubba committed
64

Gus Grubba's avatar
Gus Grubba committed
65 66 67 68 69 70 71
    Q_PROPERTY(QString              flightID        READ flightID       CONSTANT)
    Q_PROPERTY(QString              flightPlanID    READ flightPlanID   CONSTANT)
    Q_PROPERTY(QString              createdTime     READ createdTime    CONSTANT)
    Q_PROPERTY(QString              startTime       READ startTime      CONSTANT)
    Q_PROPERTY(QString              endTime         READ endTime        CONSTANT)
    Q_PROPERTY(QGeoCoordinate       takeOff         READ takeOff        CONSTANT)
    Q_PROPERTY(QmlObjectListModel*  boundingBox     READ boundingBox    CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
72 73
    Q_PROPERTY(bool                 beingDeleted    READ beingDeleted   WRITE  setBeingDeleted  NOTIFY beingDeletedChanged)
    Q_PROPERTY(bool                 selected        READ selected       WRITE  setSelected      NOTIFY selectedChanged)
Gus Grubba's avatar
Gus Grubba committed
74 75 76 77 78 79 80 81 82

    virtual QString                 flightID        () = 0;
    virtual QString                 flightPlanID    () = 0;
    virtual QString                 createdTime     () = 0;
    virtual QString                 startTime       () = 0;
    virtual QString                 endTime         () = 0;
    virtual QGeoCoordinate          takeOff         () = 0;
    virtual QmlObjectListModel*     boundingBox     () = 0;

Gus Grubba's avatar
Gus Grubba committed
83 84
    virtual bool                    beingDeleted    () { return _beingDeleted; }
    virtual void                    setBeingDeleted (bool val) { _beingDeleted = val; emit beingDeletedChanged(); }
Gus Grubba's avatar
Gus Grubba committed
85 86
    virtual bool                    selected        () { return _selected; }
    virtual void                    setSelected     (bool sel) { _selected = sel; emit selectedChanged(); }
Gus Grubba's avatar
Gus Grubba committed
87 88

signals:
Gus Grubba's avatar
Gus Grubba committed
89
    void    selectedChanged                         ();
Gus Grubba's avatar
Gus Grubba committed
90
    void    beingDeletedChanged                     ();
Gus Grubba's avatar
Gus Grubba committed
91 92

protected:
Gus Grubba's avatar
Gus Grubba committed
93
    bool    _beingDeleted;
Gus Grubba's avatar
Gus Grubba committed
94 95 96
    bool    _selected;
};

Gus Grubba's avatar
Gus Grubba committed
97 98 99 100 101 102 103 104 105 106
//-----------------------------------------------------------------------------
class AirspaceFlightModel : public QAbstractListModel
{
    Q_OBJECT
public:

    enum QGCLogModelRoles {
        ObjectRole = Qt::UserRole + 1
    };

Gus Grubba's avatar
Gus Grubba committed
107
    AirspaceFlightModel         (QObject *parent = 0);
Gus Grubba's avatar
Gus Grubba committed
108 109

    Q_PROPERTY(int count READ count NOTIFY countChanged)
Gus Grubba's avatar
Gus Grubba committed
110 111 112

    Q_INVOKABLE AirspaceFlightInfo* get                 (int index);
    Q_INVOKABLE int                 findFlightPlanID    (QString flightPlanID);
Gus Grubba's avatar
Gus Grubba committed
113 114 115

    int         count           (void) const;
    void        append          (AirspaceFlightInfo *entry);
Gus Grubba's avatar
Gus Grubba committed
116 117
    void        remove          (const QString& flightPlanID);
    void        remove          (int index);
Gus Grubba's avatar
Gus Grubba committed
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    void        clear           (void);

    AirspaceFlightInfo*
                operator[]      (int i);

    int         rowCount        (const QModelIndex & parent = QModelIndex()) const;
    QVariant    data            (const QModelIndex & index, int role = Qt::DisplayRole) const;

signals:
    void        countChanged    ();

protected:
    QHash<int, QByteArray> roleNames() const;
private:
    QList<AirspaceFlightInfo*> _flightEntries;
};

Gus Grubba's avatar
Gus Grubba committed
135 136 137 138 139 140 141
//-----------------------------------------------------------------------------
class AirspaceFlightPlanProvider : public QObject
{
    Q_OBJECT
public:

    enum PermitStatus {
142
        PermitNone = 0,     //-- No flght plan
Gus Grubba's avatar
Gus Grubba committed
143 144 145 146 147 148 149
        PermitPending,
        PermitAccepted,
        PermitRejected,
    };

    Q_ENUM(PermitStatus)

150
    AirspaceFlightPlanProvider                      (QObject *parent = nullptr);
Gus Grubba's avatar
Gus Grubba committed
151

Gus Grubba's avatar
Gus Grubba committed
152
    ///< Flight Planning and Filing
153 154
    Q_PROPERTY(QDateTime            flightStartTime         READ flightStartTime    WRITE  setFlightStartTime   NOTIFY flightStartTimeChanged)      ///< Start of flight
    Q_PROPERTY(QDateTime            flightEndTime           READ flightEndTime      WRITE  setFlightEndTime     NOTIFY flightEndTimeChanged)        ///< End of flight
Gus Grubba's avatar
Gus Grubba committed
155 156 157

    ///< Flight Briefing
    Q_PROPERTY(PermitStatus         flightPermitStatus      READ flightPermitStatus                             NOTIFY flightPermitStatusChanged)   ///< State of flight permission
158 159
    Q_PROPERTY(bool                 valid                   READ valid                                          NOTIFY advisoryChanged)
    Q_PROPERTY(QmlObjectListModel*  advisories              READ advisories                                     NOTIFY advisoryChanged)
Gus Grubba's avatar
Gus Grubba committed
160
    Q_PROPERTY(QmlObjectListModel*  ruleSets                READ ruleSets                                       NOTIFY advisoryChanged)
161
    Q_PROPERTY(QGCGeoBoundingCube*  missionArea             READ missionArea                                    NOTIFY missionAreaChanged)
162
    Q_PROPERTY(AirspaceAdvisoryProvider::AdvisoryColor airspaceColor READ airspaceColor                         NOTIFY advisoryChanged)
163 164 165 166
    Q_PROPERTY(QmlObjectListModel*  rulesViolation          READ rulesViolation                                 NOTIFY rulesChanged)
    Q_PROPERTY(QmlObjectListModel*  rulesInfo               READ rulesInfo                                      NOTIFY rulesChanged)
    Q_PROPERTY(QmlObjectListModel*  rulesReview             READ rulesReview                                    NOTIFY rulesChanged)
    Q_PROPERTY(QmlObjectListModel*  rulesFollowing          READ rulesFollowing                                 NOTIFY rulesChanged)
167
    Q_PROPERTY(QmlObjectListModel*  briefFeatures           READ briefFeatures                                  NOTIFY rulesChanged)
Gus Grubba's avatar
Gus Grubba committed
168 169 170
    Q_PROPERTY(QmlObjectListModel*  authorizations          READ authorizations                                 NOTIFY rulesChanged)

    ///< Flight Management
Gus Grubba's avatar
Gus Grubba committed
171
    Q_PROPERTY(AirspaceFlightModel* flightList              READ flightList                                     NOTIFY flightListChanged)
Gus Grubba's avatar
Gus Grubba committed
172
    Q_PROPERTY(bool                 loadingFlightList       READ loadingFlightList                              NOTIFY loadingFlightListChanged)
173

Gus Grubba's avatar
Gus Grubba committed
174
    //-- TODO: This will submit the current flight plan in memory.
Gus Grubba's avatar
Gus Grubba committed
175 176 177 178 179
    Q_INVOKABLE virtual void    submitFlightPlan            () = 0;
    Q_INVOKABLE virtual void    updateFlightPlan            () = 0;
    Q_INVOKABLE virtual void    loadFlightList              (QDateTime startTime, QDateTime endTime) = 0;
    Q_INVOKABLE virtual void    deleteFlightPlan            (QString flighPlanID) = 0;
    Q_INVOKABLE virtual void    deleteSelectedFlightPlans   () = 0;
180

181
    virtual PermitStatus        flightPermitStatus  () const { return PermitNone; }
182 183
    virtual QDateTime           flightStartTime     () const = 0;
    virtual QDateTime           flightEndTime       () const = 0;
184
    virtual QGCGeoBoundingCube* missionArea         () = 0;
Gus Grubba's avatar
Gus Grubba committed
185 186 187 188
    virtual bool                valid               () = 0;                     ///< Current advisory list is valid
    virtual QmlObjectListModel* advisories          () = 0;                     ///< List of AirspaceAdvisory
    virtual QmlObjectListModel* ruleSets            () = 0;                     ///< List of AirspaceRuleSet
    virtual AirspaceAdvisoryProvider::AdvisoryColor  airspaceColor () = 0;      ///< Aispace overall color
Gus Grubba's avatar
Gus Grubba committed
189

190 191 192 193
    virtual QmlObjectListModel* rulesViolation      () = 0;                     ///< List of AirspaceRule in violation
    virtual QmlObjectListModel* rulesInfo           () = 0;                     ///< List of AirspaceRule need more information
    virtual QmlObjectListModel* rulesReview         () = 0;                     ///< List of AirspaceRule should review
    virtual QmlObjectListModel* rulesFollowing      () = 0;                     ///< List of AirspaceRule following
194
    virtual QmlObjectListModel* briefFeatures       () = 0;                     ///< List of AirspaceRule in violation
Gus Grubba's avatar
Gus Grubba committed
195
    virtual QmlObjectListModel* authorizations      () = 0;                     ///< List of AirspaceFlightAuthorization
Gus Grubba's avatar
Gus Grubba committed
196
    virtual AirspaceFlightModel*flightList          () = 0;                     ///< List of AirspaceFlightInfo
Gus Grubba's avatar
Gus Grubba committed
197
    virtual bool                loadingFlightList   () = 0;
198

199 200
    virtual void                setFlightStartTime  (QDateTime start) = 0;
    virtual void                setFlightEndTime    (QDateTime end) = 0;
201
    virtual void                startFlightPlanning (PlanMasterController* planController) = 0;
Gus Grubba's avatar
Gus Grubba committed
202 203

signals:
204 205 206 207
    void flightPermitStatusChanged                  ();
    void flightStartTimeChanged                     ();
    void flightEndTimeChanged                       ();
    void advisoryChanged                            ();
208
    void missionAreaChanged                         ();
209
    void rulesChanged                               ();
Gus Grubba's avatar
Gus Grubba committed
210
    void flightListChanged                          ();
Gus Grubba's avatar
Gus Grubba committed
211
    void loadingFlightListChanged                   ();
Gus Grubba's avatar
Gus Grubba committed
212
};