Skip to content
WimaController.h 6.61 KiB
Newer Older
#pragma once

#include <QObject>
#include "QGCMapPolygon.h"
#include "QmlObjectListModel.h"

#include "WimaArea.h"
#include "WimaGOperationArea.h"
#include "WimaServiceArea.h"
#include "WimaVCorridor.h"
#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 WimaController : public QObject
{
    Q_OBJECT

    enum FileType {WimaFile, PlanFile};

public:
    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(const QmlObjectListModel*visualItems             READ visualItems                                                    NOTIFY visualItemsChanged)
    Q_PROPERTY(int                      currentPolygonIndex     READ currentPolygonIndex        WRITE setCurrentPolygonIndex        NOTIFY currentPolygonIndexChanged)
    Q_PROPERTY(QString                  currentFile             READ currentFile                                                    NOTIFY currentFileChanged)
Valentin Platzgummer's avatar
Valentin Platzgummer committed
    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(WimaArea                 joinedArea              READ joinedArea                                                     NOTIFY joinedAreaChanged)
    Q_PROPERTY(bool                     flyView                 READ flyView                                                        CONSTANT)
    Q_PROPERTY(WimaDataContainer*       dataContainer           READ 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; }
    const QmlObjectListModel*   visualItems            (void) const;
    int                         currentPolygonIndex    (void) const    { return _currentPolygonIndex; }
    QString                     currentFile            (void) const    { return _currentFile; }
Valentin Platzgummer's avatar
Valentin Platzgummer committed
    QStringList                 loadNameFilters        (void) const;
    QStringList                 saveNameFilters        (void) const;
    QString                     fileExtension          (void) const    { return wimaFileExtension; }
    QGeoCoordinate              joinedAreaCenter       (void) const;
    WimaArea                    joinedArea             (void) const;
    WimaDataContainer*          dataContainer          (void) const    { return _container; }
    bool                        flyView                (void) const    { return _flyView; }
    bool                        readyForSaveSend       (void) const    { return _readyForSaveSend; }



    // 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);
    Q_INVOKABLE void startWimaController(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();
    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 joinedAreaChanged              ();
    void dataContainerChanged           ();
    void readyForSaveSendChanged        (bool ready);
    void recalcPolygonInteractivity (int index);
    bool updateJoinedArea           ();
    void updateContainer            ();
    void downloadFromContainer      ();
    void setOpArea                  (const WimaGOperationArea& area);
    void setSerArea                 (const WimaServiceArea& area);
    void setCorridor                (const WimaVCorridor& area);
    void setJoinedArea              (const WimaArea& area);
    bool                        _flyView;
    bool                        _readyForSaveSend;
    PlanMasterController*       _masterController;
    MissionController*          _missionController;
    int                         _currentPolygonIndex;
    QString                     _currentFile;
    WimaDataContainer*          _container;
    QmlObjectListModel          _visualItems;
    WimaArea                    _joinedArea;
    WimaGOperationArea          _opArea;
    WimaServiceArea             _serArea;
    WimaVCorridor               _corridor;