WimaPlaner.h 5.98 KB
Newer Older
1
#pragma once
2

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

7
#include "WimaArea.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
8
#include "WimaMeasurementArea.h"
9
#include "WimaServiceArea.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10
#include "WimaCorridor.h"
11 12 13 14 15 16 17 18 19 20 21 22
#include "WimaDataContainer.h"

#include "PlanMasterController.h"
#include "MissionController.h"
#include "SurveyComplexItem.h"
#include "SimpleMissionItem.h"
#include "MissionSettingsItem.h"
#include "JsonHelper.h"
#include "QGCApplication.h"


class WimaPlaner : public QObject
23
{
24 25 26 27
    Q_OBJECT

    enum FileType {WimaFile, PlanFile};

28
public:
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 58 59 60
    WimaPlaner(QObject *parent = nullptr);
    template<class T>
    WimaPlaner(T t, QObject *parent = nullptr) = delete;
    template<class T>
    WimaPlaner(T t) = delete;

    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)
    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)
    Q_PROPERTY(WimaDataContainer*       dataContainer                                   WRITE setDataContainer          NOTIFY dataContainerChanged)
    Q_PROPERTY(bool                     readyForSaveSend    READ readyForSaveSend                                       NOTIFY readyForSaveSendChanged)


    // Property accessors
    PlanMasterController*       masterController       (void) const    { return _masterController; }
    MissionController*          missionController      (void) const    { return _missionController; }
    QmlObjectListModel*         visualItems            (void) ;
    int                         currentPolygonIndex    (void) const    { return _currentAreaIndex; }
    QString                     currentFile            (void) const    { return _currentFile; }
    QStringList                 loadNameFilters        (void) const;
    QStringList                 saveNameFilters        (void) const;
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
    QGeoCoordinate              joinedAreaCenter       (void) const;
    bool                        readyForSaveSend       (void) const    { return _readyForSaveSend; }


61

62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
    // Property setters
    void setMasterController        (PlanMasterController* masterController);
    void setMissionController       (MissionController* missionController);
    /// Sets the integer index pointing to the current polygon. Current polygon is set interactive.
    void setCurrentPolygonIndex     (int index);
    void setDataContainer           (WimaDataContainer* container);

    // Member Methodes
    Q_INVOKABLE void startWimaPlaner(bool flyView);
    Q_INVOKABLE bool addGOperationArea();
    /// Removes an area from _visualItems
    /// @param index Index of the area to be removed
    Q_INVOKABLE void removeArea(int index);
    Q_INVOKABLE bool addServiceArea();
    Q_INVOKABLE bool addVehicleCorridor();
    /// Remove all areas from WimaPlaner and all mission items from MissionController
    Q_INVOKABLE void removeAll();

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

    Q_INVOKABLE void saveToCurrent();
    Q_INVOKABLE void saveToFile(const QString& filename);
    Q_INVOKABLE bool loadFromCurrent();
    Q_INVOKABLE bool loadFromFile(const QString& filename);

    Q_INVOKABLE void resetAllInteractive(void);
    Q_INVOKABLE void setInteractive(void);


    // static Members
    static const char* wimaFileExtension;
    static const char* areaItemsName;
    static const char* missionItemsName;

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

signals:
    void masterControllerChanged        (void);
    void missionControllerChanged       (void);
    void visualItemsChanged             (void);
    void currentPolygonIndexChanged     (int index);
    void currentFileChanged             ();
    void dataContainerChanged           ();
    void readyForSaveSendChanged        (bool ready);

private slots:
    void recalcPolygonInteractivity (int index);
    bool recalcJoinedArea           ();
    void pushToContainer            ();

private:
    bool                    _readyForSaveSend; // basically true if updateMission() was sucessful
    PlanMasterController   *_masterController;
    MissionController      *_missionController;
    int                     _currentAreaIndex;
    QString                 _currentFile; // file for saveing
    WimaDataContainer      *_container; // container for data exchange with WimaController
    QmlObjectListModel      _visualItems; // contains all visible areas
    WimaArea                _joinedArea; // joined area fromed by opArea, serArea, _corridor
Valentin Platzgummer's avatar
Valentin Platzgummer committed
128
    WimaMeasurementArea      _opArea; // measurement area
129
    WimaServiceArea         _serArea; // area for supplying
Valentin Platzgummer's avatar
Valentin Platzgummer committed
130
    WimaCorridor           _corridor; // corridor connecting opArea and serArea
131
};