WimaController.h 7.58 KB
Newer Older
1
#pragma once
2 3

#include <QObject>
4 5 6 7
#include "QGCMapPolygon.h"
#include "QmlObjectListModel.h"

#include "WimaArea.h"
8
#include "WimaMeasurementArea.h"
9
#include "WimaServiceArea.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10
#include "WimaCorridor.h"
11
#include "WimaDataContainer.h"
12 13 14
#include "WimaMeasurementAreaData.h"
#include "WimaCorridorData.h"
#include "WimaServiceAreaData.h"
15 16 17

#include "PlanMasterController.h"
#include "MissionController.h"
18
#include "SurveyComplexItem.h"
19 20
#include "SimpleMissionItem.h"
#include "MissionSettingsItem.h"
21 22 23
#include "JsonHelper.h"
#include "QGCApplication.h"

24 25 26

class WimaController : public QObject
{
27 28
    Q_OBJECT

29 30
    enum FileType {WimaFile, PlanFile};

31
public:
32 33 34
    WimaController(QObject *parent = nullptr);


35 36 37 38 39 40 41
    Q_PROPERTY(PlanMasterController*    masterController    READ masterController       WRITE setMasterController       NOTIFY masterControllerChanged)
    Q_PROPERTY(MissionController*       missionController   READ missionController      WRITE setMissionController      NOTIFY missionControllerChanged)
    Q_PROPERTY(QmlObjectListModel*      visualItems         READ visualItems                                            NOTIFY visualItemsChanged)
    Q_PROPERTY(QString                  currentFile         READ currentFile                                            NOTIFY currentFileChanged)
    Q_PROPERTY(QStringList              loadNameFilters     READ loadNameFilters                                        CONSTANT)
    Q_PROPERTY(QStringList              saveNameFilters     READ saveNameFilters                                        CONSTANT)
    Q_PROPERTY(QString                  fileExtension       READ fileExtension                                          CONSTANT)
42
    Q_PROPERTY(WimaDataContainer*       dataContainer       READ dataContainer          WRITE setDataContainer          NOTIFY dataContainerChanged)
43
    Q_PROPERTY(QmlObjectListModel*      missionItems        READ missionItems                                           NOTIFY missionItemsChanged)
44
    Q_PROPERTY(QmlObjectListModel*      currentMissionItems READ currentMissionItems                                    NOTIFY currentMissionItemsChanged)
45
    Q_PROPERTY(QVariantList             waypointPath        READ waypointPath                                           NOTIFY waypointPathChanged)
46
    Q_PROPERTY(QVariantList             currentWaypointPath READ currentWaypointPath                                    NOTIFY currentWaypointPathChanged)
47 48 49


    // Property accessors
50 51
    PlanMasterController*       masterController       (void)          { return _masterController; }
    MissionController*          missionController      (void)          { return _missionController; }
52
    QmlObjectListModel*         visualItems            (void);
53
    QString                     currentFile            (void) const    { return _currentFile; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
54
    QStringList                 loadNameFilters        (void) const;
55
    QStringList                 saveNameFilters        (void) const;
56
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
57
    QGCMapPolygon               joinedArea             (void) const;
58
    WimaDataContainer*          dataContainer          (void);
59
    QmlObjectListModel*         missionItems           (void);
60
    QmlObjectListModel*         currentMissionItems    (void);
61
    QVariantList                waypointPath           (void);
62
    QVariantList                currentWaypointPath    (void);
63 64 65 66 67


    // Property setters
    void setMasterController        (PlanMasterController* masterController);
    void setMissionController       (MissionController* missionController);
68
    void setDataContainer           (WimaDataContainer* container);
69

70
    // Member Methodes
71
    Q_INVOKABLE void nextPhase();
72 73 74 75 76
    Q_INVOKABLE void startMission();
    Q_INVOKABLE void abortMission();
    Q_INVOKABLE void pauseMission();
    Q_INVOKABLE void resumeMission();

77 78
    Q_INVOKABLE void saveToCurrent  ();
    Q_INVOKABLE void saveToFile     (const QString& filename);
79
    Q_INVOKABLE bool loadFromCurrent();
80
    Q_INVOKABLE bool loadFromFile   (const QString& filename);
81 82


83 84
    // static Members
    static const char* wimaFileExtension;
85 86
    static const char* areaItemsName;
    static const char* missionItemsName;
87 88

    // Member Methodes
89
    QJsonDocument saveToJson(FileType fileType);
90

91 92 93 94 95 96 97 98 99 100
    bool calcShortestPath(const QGeoCoordinate &start, const QGeoCoordinate &destination, QList<QGeoCoordinate> &path);
    /// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList
    bool extractCoordinateList(QmlObjectListModel &missionItems, QList<QGeoCoordinate> &coordinateList);
    /// extracts the coordinates (between startIndex and endIndex) stored in missionItems (list of MissionItems) and stores them in coordinateList.
    bool extractCoordinateList(QmlObjectListModel &missionItems, QList<QGeoCoordinate> &coordinateList, int startIndex, int endIndex);
    /// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList
    bool extractCoordinateList(QmlObjectListModel &missionItems, QVariantList &coordinateList);
    /// extracts the coordinates (between startIndex and endIndex) stored in missionItems (list of MissionItems) and stores them in coordinateList.
    bool extractCoordinateList(QmlObjectListModel &missionItems, QVariantList &coordinateList, int startIndex, int endIndex);

101
signals:
102 103 104
    void masterControllerChanged        (void);
    void missionControllerChanged       (void);
    void visualItemsChanged             (void);
105
    void currentFileChanged             ();
106
    void dataContainerChanged           ();
107
    void readyForSaveSendChanged        (bool ready);
108
    void missionItemsChanged            (void);
109
    void currentMissionItemsChanged     (void);
110
    void waypointPathChanged            (void);
111
    void currentWaypointPathChanged     (void);
112 113

private slots:
114
    void containerDataValidChanged          (bool valid);
115
    void updateCurrentMissionItems          (void);
116
    void updateWaypointPath                 (void);
117 118
    void updateCurrentPath                  (void);

119

120
private:
121 122 123 124 125
    PlanMasterController   *_masterController;
    MissionController      *_missionController;
    QString                 _currentFile; // file for saveing
    WimaDataContainer      *_container; // container for data exchange with WimaController
    QmlObjectListModel      _visualItems; // contains all visible areas
126
    WimaJoinedAreaData      _joinedArea; // joined area fromed by opArea, serArea, _corridor
127 128 129 130
    WimaMeasurementAreaData _measurementArea; // measurement area
    WimaServiceAreaData     _serviceArea; // area for supplying
    WimaCorridorData        _corridor; // corridor connecting opArea and serArea
    bool                    _localPlanDataValid;
131 132 133 134 135 136 137
    QmlObjectListModel      _missionItems; // all mission itmes (Mission Items) generaded by wimaPlaner, displayed in flightView
    QmlObjectListModel      _currentMissionItems; // contains the current mission items, which are a sub set of _missionItems,
                                                  // _currentMissionItems contains a number of mission items which can be worked off with a single battery chrage
    QVariantList            _waypointPath; // path connecting the items in _missionItems
    QVariantList            _currentWaypointPath; // path connecting the items in _currentMissionItems
    int                     _startWaypointIndex; // index to the mission item stored in _missionItems defining the first element of _currentMissionItems
    int                     _endWaypointIndex; // index to the mission item stored in _missionItems defining the last element of _currentMissionItems
138
};
139