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

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

#include "WimaArea.h"
#include "WimaGOperationArea.h"
#include "WimaServiceArea.h"
10
#include "WimaVCorridor.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 32 33 34 35
    WimaController(QObject *parent = nullptr);


    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(int                      currentPolygonIndex     READ currentPolygonIndex        WRITE setCurrentPolygonIndex        NOTIFY currentPolygonIndexChanged)
36
    Q_PROPERTY(QString                  currentFile             READ currentFile                                                    NOTIFY currentFileChanged)
Valentin Platzgummer's avatar
Valentin Platzgummer committed
37
    Q_PROPERTY(QStringList              loadNameFilters         READ loadNameFilters                                                CONSTANT)
38
    Q_PROPERTY(QStringList              saveNameFilters         READ saveNameFilters                                                CONSTANT)
39
    Q_PROPERTY(QString                  fileExtension           READ fileExtension                                                  CONSTANT)
40
    Q_PROPERTY(QGeoCoordinate           joinedAreaCenter        READ joinedAreaCenter                                               CONSTANT)
41 42 43 44
    Q_PROPERTY(WimaArea*                joinedArea              READ joinedArea                                                     NOTIFY joinedAreaChanged)
    Q_PROPERTY(bool                     flyView                 READ flyView                                                        CONSTANT)
    Q_PROPERTY(WimaDataContainer*       dataContainer           READ dataContainer              WRITE setDataContainer              NOTIFY dataContainerChanged)
    
45 46 47


    // Property accessors
48 49
    PlanMasterController*       masterController       (void) const    { return _masterController; }
    MissionController*          missionController      (void) const    { return _missionController; }
50
    QmlObjectListModel*         visualItems            (void) const    { return _container->visualItems(); }
51
    int                         currentPolygonIndex    (void) const    { return _currentPolygonIndex; }
52
    QString                     currentFile            (void) const    { return _currentFile; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
53
    QStringList                 loadNameFilters        (void) const;
54
    QStringList                 saveNameFilters        (void) const;
55
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
56 57 58 59
    QGeoCoordinate              joinedAreaCenter       (void) const    { return _container->joinedArea()->center(); }
    WimaArea*                   joinedArea             (void) const    { return _container->joinedArea(); }
    WimaDataContainer*          dataContainer          (void) const    { return _container; }
    bool                        flyView                (void) const    { return _flyView; }
60 61 62 63 64 65



    // Property setters
    void setMasterController        (PlanMasterController* masterController);
    void setMissionController       (MissionController* missionController);
66
    /// Sets the integer index pointing to the current polygon. Current polygon is set interactive.
67
    void setCurrentPolygonIndex     (int index);
68
    void setDataContainer           (WimaDataContainer* container);
69

70
    Q_INVOKABLE void startWimaController(bool flyView);
71
    Q_INVOKABLE bool addGOperationArea();
72 73
    /// Removes an area from _visualItems
    /// @param index Index of the area to be removed
74
    Q_INVOKABLE void removeArea(int index);
75 76 77
    Q_INVOKABLE bool addServiceArea();
    Q_INVOKABLE bool addVehicleCorridor();
    Q_INVOKABLE void removeAll();
78 79 80 81 82

    Q_INVOKABLE void startMission();
    Q_INVOKABLE void abortMission();
    Q_INVOKABLE void pauseMission();
    Q_INVOKABLE void resumeMission();
83 84
    /// Recalculates vehicle corridor, flight path, etc.
    Q_INVOKABLE bool updateMission();
85

86 87
    Q_INVOKABLE void saveToCurrent();
    Q_INVOKABLE void saveToFile(const QString& filename);
88 89
    Q_INVOKABLE bool loadFromCurrent();
    Q_INVOKABLE bool loadFromFile(const QString& filename);
90

91 92
    Q_INVOKABLE void resetAllInteractive(void);
    Q_INVOKABLE void setInteractive(void);
93 94


95 96
    // static Members
    static const char* wimaFileExtension;
97 98
    static const char* areaItemsName;
    static const char* missionItemsName;
99 100

    // Member Methodes
101 102 103
    QJsonDocument saveToJson(FileType fileType);


104 105


106 107

signals:
108 109 110 111
    void masterControllerChanged        (void);
    void missionControllerChanged       (void);
    void visualItemsChanged             (void);
    void currentPolygonIndexChanged     (int index);
112
    void currentFileChanged             ();
113
    void joinedAreaChanged              ();
114
    void dataContainerChanged           ();
115 116 117 118 119 120

private slots:
    void recalcVehicleCorridor();
    void recalcVehicleMeasurementAreas();
    void recalcAll();
    void recalcPolygonInteractivity(int index);
121
    void updateJoinedArea();
122 123


124
private:
125
    bool                        _flyView;
126 127 128
    PlanMasterController*       _masterController;
    MissionController*          _missionController;
    int                         _currentPolygonIndex;
129
    QString                     _currentFile;
130 131
    WimaDataContainer*          _container;

132 133

};