#pragma once #include #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) 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; } 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); // Member Methodes 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); private slots: 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); private: bool _flyView; bool _readyForSaveSend; PlanMasterController* _masterController; MissionController* _missionController; int _currentPolygonIndex; QString _currentFile; WimaDataContainer* _container; QmlObjectListModel _visualItems; WimaArea _joinedArea; WimaGOperationArea _opArea; WimaServiceArea _serArea; WimaVCorridor _corridor; };