WimaController.h 5.22 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 "PlanMasterController.h"
#include "MissionController.h"
15
#include "SurveyComplexItem.h"
16 17
#include "SimpleMissionItem.h"
#include "MissionSettingsItem.h"
18 19 20
#include "JsonHelper.h"
#include "QGCApplication.h"

21 22 23

class WimaController : public QObject
{
24 25
    Q_OBJECT

26 27
    enum FileType {WimaFile, PlanFile};

28
public:
29 30 31
    WimaController(QObject *parent = nullptr);


32 33 34 35 36 37 38 39
    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)
    Q_PROPERTY(QGeoCoordinate           joinedAreaCenter    READ joinedAreaCenter                                       CONSTANT)
Valentin Platzgummer's avatar
Valentin Platzgummer committed
40 41
    Q_PROPERTY(QGCMapPolygon            joinedArea          READ joinedArea                                             NOTIFY joinedAreaChanged)
    Q_PROPERTY(WimaDataContainer*       dataContainer       READ dataContainer           WRITE setDataContainer          NOTIFY dataContainerChanged)
42
    Q_PROPERTY(bool                     readyForSaveSend    READ readyForSaveSend                                       NOTIFY readyForSaveSendChanged)
43 44 45


    // Property accessors
46 47
    PlanMasterController*       masterController       (void) const    { return _masterController; }
    MissionController*          missionController      (void) const    { return _missionController; }
48
    QmlObjectListModel*         visualItems            (void) ;
49
    QString                     currentFile            (void) const    { return _currentFile; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
50
    QStringList                 loadNameFilters        (void) const;
51
    QStringList                 saveNameFilters        (void) const;
52
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
53
    QGeoCoordinate              joinedAreaCenter       (void) const;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
54 55
    QGCMapPolygon               joinedArea             (void) const;
    WimaDataContainer*          dataContainer          (void) const;
56
    bool                        readyForSaveSend       (void) const    { return _readyForSaveSend; }
57 58 59 60 61 62



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

65
    // Member Methodes
66
    Q_INVOKABLE void startWimaController(bool flyView);
67 68 69 70
    Q_INVOKABLE void startMission();
    Q_INVOKABLE void abortMission();
    Q_INVOKABLE void pauseMission();
    Q_INVOKABLE void resumeMission();
71
    Q_INVOKABLE bool updateMission();
72

73 74
    Q_INVOKABLE void saveToCurrent  ();
    Q_INVOKABLE void saveToFile     (const QString& filename);
75
    Q_INVOKABLE bool loadFromCurrent();
76
    Q_INVOKABLE bool loadFromFile   (const QString& filename);
77 78


79 80
    // static Members
    static const char* wimaFileExtension;
81 82
    static const char* areaItemsName;
    static const char* missionItemsName;
83 84

    // Member Methodes
85
    QJsonDocument saveToJson(FileType fileType);
86
    void          setReadyForSaveSend(bool ready);
87

88

89
signals:
90 91 92
    void masterControllerChanged        (void);
    void missionControllerChanged       (void);
    void visualItemsChanged             (void);
93
    void currentFileChanged             ();
94
    void dataContainerChanged           ();
95
    void readyForSaveSendChanged        (bool ready);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
96
    void joinedAreaChanged              ();
97 98

private slots:
99
    void pullFromContainer          ();
100

101
private:
102 103 104 105 106 107 108 109 110 111 112
    bool                    _readyForSaveSend; // basically true if updateMission() was sucessful
    PlanMasterController   *_masterController;
    MissionController      *_missionController;
    QString                 _currentFile; // file for saveing
    WimaDataContainer      *_container; // container for data exchange with WimaController
    QmlObjectListModel      _visualItems; // contains all visible areas
    // The following areas are of type QGCMapPolygon (only path information is required, as they are used for visualisation)
    QGCMapPolygon           _joinedArea; // joined area fromed by opArea, serArea, _corridor
    QGCMapPolygon           _opArea; // measurement area
    QGCMapPolygon           _serArea; // area for supplying
    QGCMapPolygon           _corridor; // corridor connecting opArea and serArea
113
};