You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
6.5 KiB
130 lines
6.5 KiB
/**************************************************************************** |
|
* |
|
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
|
* |
|
* QGroundControl is licensed according to the terms in the file |
|
* COPYING.md in the root of the source code directory. |
|
* |
|
****************************************************************************/ |
|
|
|
#pragma once |
|
|
|
#include <QObject> |
|
|
|
#include "MissionController.h" |
|
#include "GeoFenceController.h" |
|
#include "RallyPointController.h" |
|
#include "Vehicle.h" |
|
#include "MultiVehicleManager.h" |
|
#include "QGCLoggingCategory.h" |
|
|
|
Q_DECLARE_LOGGING_CATEGORY(PlanMasterControllerLog) |
|
|
|
/// Master controller for mission, fence, rally |
|
class PlanMasterController : public QObject |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
PlanMasterController(QObject* parent = NULL); |
|
~PlanMasterController(); |
|
|
|
Q_PROPERTY(MissionController* missionController READ missionController CONSTANT) |
|
Q_PROPERTY(GeoFenceController* geoFenceController READ geoFenceController CONSTANT) |
|
Q_PROPERTY(RallyPointController* rallyPointController READ rallyPointController CONSTANT) |
|
|
|
Q_PROPERTY(Vehicle* controllerVehicle MEMBER _controllerVehicle CONSTANT) |
|
Q_PROPERTY(bool offline READ offline NOTIFY offlineEditingChanged) ///< true: controller is not connected to an active vehicle |
|
Q_PROPERTY(bool containsItems READ containsItems NOTIFY containsItemsChanged) ///< true: Elemement is non-empty |
|
Q_PROPERTY(bool syncInProgress READ syncInProgress NOTIFY syncInProgressChanged) ///< true: Information is currently being saved/sent, false: no active save/send in progress |
|
Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) ///< true: Unsaved/sent changes are present, false: no changes since last save/send |
|
Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) ///< File extension for missions |
|
Q_PROPERTY(QString kmlFileExtension READ kmlFileExtension CONSTANT) |
|
///< kml file extension for missions |
|
Q_PROPERTY(QStringList loadNameFilters READ loadNameFilters CONSTANT) ///< File filter list loading plan files |
|
Q_PROPERTY(QStringList saveNameFilters READ saveNameFilters CONSTANT) ///< File filter list saving plan files |
|
Q_PROPERTY(QStringList saveKmlFilters READ saveKmlFilters CONSTANT) ///< File filter list saving KML files |
|
|
|
/// Should be called immediately upon Component.onCompleted. |
|
/// @param editMode true: controller being used in Plan view, false: controller being used in Fly view |
|
Q_INVOKABLE void start(bool editMode); |
|
|
|
/// Starts the controller using a single static active vehicle. Will not track global active vehicle changes. |
|
Q_INVOKABLE void startStaticActiveVehicle(Vehicle* vehicle); |
|
|
|
/// Determines if the plan has all data needed to be saved or sent to the vehicle. Currently the only case where this |
|
/// would return false is when it is still waiting on terrain data to determine correct altitudes. |
|
Q_INVOKABLE bool readyForSaveSend(void) const { return _missionController.readyForSaveSend(); } |
|
|
|
/// Sends a plan to the specified file |
|
/// @param[in] vehicle Vehicle we are sending a plan to |
|
/// @param[in] filename Plan file to load |
|
static void sendPlanToVehicle(Vehicle* vehicle, const QString& filename); |
|
|
|
Q_INVOKABLE void loadFromVehicle(void); |
|
Q_INVOKABLE void sendToVehicle(void); |
|
Q_INVOKABLE void loadFromFile(const QString& filename); |
|
Q_INVOKABLE void saveToFile(const QString& filename); |
|
Q_INVOKABLE void saveToKml(const QString& filename); |
|
Q_INVOKABLE void removeAll(void); ///< Removes all from controller only, synce required to remove from vehicle |
|
Q_INVOKABLE void removeAllFromVehicle(void); ///< Removes all from vehicle and controller |
|
|
|
MissionController* missionController(void) { return &_missionController; } |
|
GeoFenceController* geoFenceController(void) { return &_geoFenceController; } |
|
RallyPointController* rallyPointController(void) { return &_rallyPointController; } |
|
|
|
bool offline (void) const { return _offline; } |
|
bool containsItems (void) const; |
|
bool syncInProgress (void) const { return _syncInProgress; } |
|
bool dirty (void) const; |
|
void setDirty (bool dirty); |
|
QString fileExtension (void) const; |
|
QString kmlFileExtension(void) const; |
|
QStringList loadNameFilters (void) const; |
|
QStringList saveNameFilters (void) const; |
|
QStringList saveKmlFilters (void) const; |
|
|
|
QJsonDocument saveToJson (); |
|
|
|
Vehicle* controllerVehicle(void) { return _controllerVehicle; } |
|
Vehicle* managerVehicle(void) { return _managerVehicle; } |
|
|
|
signals: |
|
void containsItemsChanged (bool containsItems); |
|
void syncInProgressChanged (bool syncInProgress); |
|
void dirtyChanged (bool dirty); |
|
void vehicleChanged (Vehicle* vehicle); |
|
void offlineEditingChanged (bool offlineEditing); |
|
|
|
private slots: |
|
void _activeVehicleChanged(Vehicle* activeVehicle); |
|
void _loadMissionComplete(void); |
|
void _loadGeoFenceComplete(void); |
|
void _loadRallyPointsComplete(void); |
|
void _sendMissionComplete(void); |
|
void _sendGeoFenceComplete(void); |
|
void _sendRallyPointsComplete(void); |
|
|
|
private: |
|
void _showPlanFromManagerVehicle(void); |
|
|
|
MultiVehicleManager* _multiVehicleMgr; |
|
Vehicle* _controllerVehicle; |
|
Vehicle* _managerVehicle; |
|
bool _editMode; |
|
bool _offline; |
|
MissionController _missionController; |
|
GeoFenceController _geoFenceController; |
|
RallyPointController _rallyPointController; |
|
bool _loadGeoFence; |
|
bool _loadRallyPoints; |
|
bool _sendGeoFence; |
|
bool _sendRallyPoints; |
|
bool _syncInProgress; |
|
|
|
static const int _planFileVersion; |
|
static const char* _planFileType; |
|
static const char* _jsonMissionObjectKey; |
|
static const char* _jsonGeoFenceObjectKey; |
|
static const char* _jsonRallyPointsObjectKey; |
|
};
|
|
|