diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 39e79245d285ced24ed2340d4ec512b5c00062b2..cafcedf0a43af094fd2a4d54e10d4d60098ed2d4 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -408,7 +408,12 @@ HEADERS += \ src/comm/MavlinkMessagesTimer.h \ src/GPS/Drivers/src/base_station.h \ src/MissionManager/WimaController.h \ - src/MissionManager/WimaFlyArea.h + src/MissionManager/WimaFlyArea.h \ + src/MissionManager/WimaPolygon.h \ + src/MissionManager/WimaServicePolygon.h \ + src/MissionManager/WimaVehicleCorridor.h \ + src/MissionManager/WimaVehicleMeasurementPolygon.h \ + src/MissionManager/WimaGlobalMeasurementPolygon.h SOURCES += \ src/api/QGCCorePlugin.cc \ @@ -417,7 +422,12 @@ SOURCES += \ src/api/QmlComponentInfo.cc \ src/comm/MavlinkMessagesTimer.cc \ src/MissionManager/WimaController.cc \ - src/MissionManager/WimaFlyArea.cc + src/MissionManager/WimaFlyArea.cc \ + src/MissionManager/WimaPolygon.cc \ + src/MissionManager/WimaServicePolygon.cc \ + src/MissionManager/WimaVehicleCorridor.cc \ + src/MissionManager/WimaVehicleMeasurementPolygon.cc \ + src/MissionManager/WimaGlobalMeasurementPolygon.cc # # Unit Test specific configuration goes here (requires full debug build with all plugins) diff --git a/src/MissionManager/WimaController.cc b/src/MissionManager/WimaController.cc index 3ed4ac8648a7a063e1d7915d3fbf0636261fa8d1..b356e1cade418b5cdffc1abb19f1da6852a63e26 100644 --- a/src/MissionManager/WimaController.cc +++ b/src/MissionManager/WimaController.cc @@ -11,5 +11,22 @@ void WimaController::start() _flyArea->_init(); } +void WimaController::recalcMission() +{ + +} + +void WimaController::setMasterController(PlanMasterController *masterC) +{ + _masterController = masterC; + emit masterControllerChanged(_masterController); +} + +void WimaController::setMissionController(MissionController *missionC) +{ + _missionController = missionC; + emit missionControllerChanged(_missionController); +} + diff --git a/src/MissionManager/WimaController.h b/src/MissionManager/WimaController.h index 0b404d307bf98183114bd2f385a562857aa32d16..21e87040decc855ae3d1f320951c2cbc5bd919d4 100644 --- a/src/MissionManager/WimaController.h +++ b/src/MissionManager/WimaController.h @@ -5,6 +5,8 @@ #include "QGCMapPolygon.h" #include "QmlObjectListModel.h" #include "WimaFlyArea.h" +#include "PlanMasterController.h" +#include "MissionController.h" class WimaController : public QObject { @@ -12,25 +14,37 @@ class WimaController : public QObject public: explicit WimaController(QObject *parent = nullptr); - Q_PROPERTY(WimaFlyArea *flyArea READ flyArea CONSTANT) - //Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) + Q_PROPERTY(WimaFlyArea* flyArea READ flyArea CONSTANT) + Q_PROPERTY(PlanMasterController* masterController READ masterController WRITE setMasterController NOTIFY masterControllerChanged) + Q_PROPERTY(MissionController* missionController READ missionController WRITE setMissionController NOTIFY missionControllerChanged) + //Property Accessors - WimaFlyArea *flyArea (void) { return _flyArea; } - //QmlObjectListModel* visualItems (void) { return _visualItems; } + WimaFlyArea *flyArea (void) { return _flyArea; } + PlanMasterController* masterController (void) { return _masterController; } + MissionController* missionController (void) { return _missionController; } Q_INVOKABLE void start(void); + Q_INVOKABLE void recalcMission(); + + + void setMasterController(PlanMasterController* masterC); + void setMissionController(MissionController* missionC); signals: + void masterControllerChanged(PlanMasterController* masterController); + void missionControllerChanged(MissionController* missionController); public slots: private: //QmlObjectListModel* _visualItems; - WimaFlyArea * _flyArea; + WimaFlyArea * _flyArea; + PlanMasterController* _masterController; + MissionController* _missionController; }; #endif // WIMACONTROLLER_H diff --git a/src/MissionManager/WimaFlyArea.cc b/src/MissionManager/WimaFlyArea.cc index 4753c1a48e7ae7ed2770d482ebfcf3d228d2c3e3..f912ad69125a9192ceebd66aa8dc789c7140f1af 100644 --- a/src/MissionManager/WimaFlyArea.cc +++ b/src/MissionManager/WimaFlyArea.cc @@ -30,7 +30,7 @@ void WimaFlyArea::appendFlyAreaPolygon() _polygons->append(newPolygon); int index = _polygons->count()-1; - setCurrentPolygon(index); + selectCurrentPolygon(index); emit polygonsChanged(); } @@ -44,16 +44,11 @@ void WimaFlyArea::removeFlyAreaPolygon(int index) } } -void WimaFlyArea::setCurrentPolygon(int index) +void WimaFlyArea::selectCurrentPolygon(int index) { if(index >= 0 && index < _polygons->count()) { - - - for (int i = 0; i < _polygons->count(); i++) { - QGCMapPolygon* polygon = qobject_cast(_polygons->get(i)); - polygon->setInteractive(false); - } + disselectAllPolygons(); _currentPolygonIndex = index; _currentPolygonItem = qobject_cast(_polygons->get(index)); @@ -67,3 +62,20 @@ void WimaFlyArea::setCurrentPolygon(int index) } } +void WimaFlyArea::disselectAllPolygons() +{ + for (int i = 0; i < _polygons->count(); i++) { + QGCMapPolygon* polygon = qobject_cast(_polygons->get(i)); + polygon->setInteractive(false); + } +} + +/*void WimaFlyArea::setBottomLayerAltitude(double alt) +{ + if(_bottomLayerAltitude != alt){ + _bottomLayerAltitude = alt; + emit bottomLayerAltitudeChanged(_bottomLayerAltitude); + } + +}*/ + diff --git a/src/MissionManager/WimaFlyArea.h b/src/MissionManager/WimaFlyArea.h index f9f44e030d4ce4b9dcec8f585c4537f9f823180e..7da903ce26e48775ffbae4ea620ea8a7cdb22483 100644 --- a/src/MissionManager/WimaFlyArea.h +++ b/src/MissionManager/WimaFlyArea.h @@ -16,18 +16,30 @@ public: - Q_PROPERTY(QmlObjectListModel *polygons READ polygons NOTIFY polygonsChanged) - Q_PROPERTY(QGCMapPolygon *currentPolygonItem READ currentPolygonItem NOTIFY currentPolygonItemChanged) - Q_PROPERTY(int currentPolygonIndex READ currentPolygonIndex NOTIFY currentPolygonIndexChanged) + Q_PROPERTY(QmlObjectListModel* polygons READ polygons NOTIFY polygonsChanged) + Q_PROPERTY(QGCMapPolygon* currentPolygonItem READ currentPolygonItem NOTIFY currentPolygonItemChanged) + Q_PROPERTY(int currentPolygonIndex READ currentPolygonIndex NOTIFY currentPolygonIndexChanged) + //Q_PROPERTY(QList* bottomLayerAltitude READ bottomLayerAltitude WRITE setBottomLayerAltitude NOTIFY bottomLayerAltitudeChanged) + //Q_PROPERTY(QList* layerNumber READ layerNumber WRITE setLayerNumber NOTIFY layerNumberChanged) + //Q_PROPERTY(QList* layerDistance READ layerDistance WRITE setLayerDistance NOTIFY layerDistanceChanged) Q_INVOKABLE void appendFlyAreaPolygon(); Q_INVOKABLE void removeFlyAreaPolygon(int index); - Q_INVOKABLE void setCurrentPolygon(int index); + Q_INVOKABLE void selectCurrentPolygon(int index); + Q_INVOKABLE void disselectAllPolygons(); // Property Accessors QmlObjectListModel * polygons (void) { return _polygons;} QGCMapPolygon * currentPolygonItem (void) { return _currentPolygonItem;} int currentPolygonIndex (void) { return _currentPolygonIndex;} + //QList* bottomLayerAltitude (void) { return _bottomLayerAltitude;} + //QList* layerNumber (void) { return _layerNumber;} + //QList* layerDistance (void) { return _layerDistance;} + + // Property Writers + //void setBottomLayerAltitude(double alt); + //void setLayerNumber(int layerNumber); + //void setLayerDistance(double dist); // Methodes @@ -37,6 +49,9 @@ signals: void polygonsChanged(void); void currentPolygonItemChanged(QGCMapPolygon * polygon); void currentPolygonIndexChanged(int index); + void bottomLayerAltitudeChanged(double alt); + void layerNumberChanged(int alt); + void layerDistanceChanged(double dist); public slots: @@ -48,6 +63,10 @@ private: QmlObjectListModel* _polygons; QGCMapPolygon* _currentPolygonItem; int _currentPolygonIndex; + bool _visible; + //QList* _bottomLayerAltitude; + //QList* _layerNumber; + //QList* _layerDistance; }; diff --git a/src/MissionManager/WimaGlobalMeasurementPolygon.cc b/src/MissionManager/WimaGlobalMeasurementPolygon.cc new file mode 100644 index 0000000000000000000000000000000000000000..b1aa4b6989c81b1096409c53c5604e1e3133b793 --- /dev/null +++ b/src/MissionManager/WimaGlobalMeasurementPolygon.cc @@ -0,0 +1,69 @@ +#include "WimaGlobalMeasurementPolygon.h" + + + +WimaGlobalMeasurementPolygon::WimaGlobalMeasurementPolygon(QObject *parent): + WimaPolygon (parent) +{ + +} + +void WimaGlobalMeasurementPolygon::addVehicle(Vehicle *vehicle) +{ + if(vehicle != nullptr){ + _vehicleList->append(vehicle); + emit vehicleListChanged(_vehicleList); + } +} + +void WimaGlobalMeasurementPolygon::removeVehicle(int vehicleIndex) +{ + if(vehicleIndex >= 0 && vehicleIndex < _vehicleList->count()){ + _vehicleList->removeAt(vehicleIndex); + emit vehicleListChanged(_vehicleList); + } +} + +void WimaGlobalMeasurementPolygon::recalculateVehiclePolygons() +{ + int vehicleCount = _vehicleList->count(); + WimaVehicleMeasurementPolygon* newPolygon = new WimaVehicleMeasurementPolygon(this); + + _vehiclePolygons = this->splitPolygonArea(vehicleCount); +} + +void WimaGlobalMeasurementPolygon::removeAllVehicles() +{ + int counter = _vehicleList->count()-1; + + while(counter >= 0){ + _vehicleList->removeAt(0); + counter--; + } + + emit vehicleListChanged(_vehicleList); +} + +void WimaGlobalMeasurementPolygon::setBottomLayerAltitude(double altitude) +{ + if(altitude > 0 && altitude != _bottomLayerAltitude){ + _bottomLayerAltitude = altitude; + emit bottomLayerAltitudeChanged(altitude); + } +} + +void WimaGlobalMeasurementPolygon::setNumberOfLayers(int numberOfLayers) +{ + if(numberOfLayers > 0 && _numberOfLayers != numberOfLayers){ + _numberOfLayers = numberOfLayers; + emit numberOfLayersChanged(numberOfLayers); + } +} + +void WimaGlobalMeasurementPolygon::setLayerDistance(double distance) +{ + if(distance > 0 && distance != _layerDistance){ + _layerDistance = distance; + emit layerDistanceChanged(distance); + } +} diff --git a/src/MissionManager/WimaGlobalMeasurementPolygon.h b/src/MissionManager/WimaGlobalMeasurementPolygon.h new file mode 100644 index 0000000000000000000000000000000000000000..fa3bc628fc23b4fee49f4a94092ce63f9dd04f03 --- /dev/null +++ b/src/MissionManager/WimaGlobalMeasurementPolygon.h @@ -0,0 +1,65 @@ +#ifndef WIMAGLOBALMEASUREMENTPOLYGON_H +#define WIMAGLOBALMEASUREMENTPOLYGON_H + +#include +#include "WimaPolygon.h" +#include "QGCMapPolyline.h" +#include "WimaVehicleMeasurementPolygon.h" + +class WimaGlobalMeasurementPolygon : public WimaPolygon +{ + Q_OBJECT +public: + WimaGlobalMeasurementPolygon(QObject* parent); + + Q_PROPERTY(double bottomLayerAltitude READ bottomLayerAltitude WRITE setBottomLayerAltitude NOTIFY bottomLayerAltitudeChanged) + Q_PROPERTY(int numberOfLayers READ numberOfLayers WRITE setNumberOfLayers NOTIFY numberOfLayersChanged) + Q_PROPERTY(double layerDistance READ layerDistance WRITE setLayerDistance NOTIFY layerDistanceChanged) + Q_PROPERTY(QmlObjectListModel* vehicleList READ vehicleList NOTIFY vehicleListChanged) + Q_PROPERTY(QGCMapPolyline* entryPolyline READ entryPolyline NOTIFY entryPolylineChanged) + Q_PROPERTY(QmlObjectListModel* vehiclePolygons READ vehiclePolygons NOTIFY vehiclePolygonsChanged) + + Q_INVOKABLE void addVehicle(Vehicle *vehicle); + Q_INVOKABLE void removeVehicle(int vehicleIndex); + Q_INVOKABLE void recalculateVehiclePolygons(); + Q_INVOKABLE void removeAllVehicles(); + + + // Overrides from WimaPolygon + QString mapVisualQML (void) const { return "WimaGlobalMeasurementPolygonMapVisal.qml";} + QString editorQML (void) const { return "WimaGlobalMeasurementPolygonEditor.qml";} + + // Property accessors + double bottomLayerAltitude (void) const { return _bottomLayerAltitude;} + int numberOfLayers (void) const { return _numberOfLayers;} + double layerDistance (void) const { return _layerDistance;} + QmlObjectListModel* vehicleList (void) const { return _vehicleList;} + QGCMapPolyline* entryPolyline (void) const { return _entryPolyline;} + QmlObjectListModel* vehiclePolygons (void) const { return _vehiclePolygons;} + + // Property setters + + void setBottomLayerAltitude(double altitude); + void setNumberOfLayers(int numberOfLayers); + void setLayerDistance(double distance); + +signals: + void bottomLayerAltitudeChanged(double altitude); + void numberOfLayersChanged(int numberOfLayers); + void layerDistanceChanged(double distance); + void vehicleListChanged(QmlObjectListModel* vehicleList); + void entryPolylineChanged(QGCMapPolyline* polyline); + void vehiclePolygonsChanged(QmlObjectListModel* vehiclePolygons); + + +private: + double _bottomLayerAltitude; + int _numberOfLayers; + double _layerDistance; + QmlObjectListModel* _vehicleList; + QGCMapPolyline* _entryPolyline; + QmlObjectListModel* _vehiclePolygons; + +}; + +#endif // WIMAGLOBALMEASUREMENTPOLYGON_H diff --git a/src/MissionManager/WimaPolygon.cc b/src/MissionManager/WimaPolygon.cc new file mode 100644 index 0000000000000000000000000000000000000000..d8b71257de54d5ad5cd2df621f4a1f9a160c9d8d --- /dev/null +++ b/src/MissionManager/WimaPolygon.cc @@ -0,0 +1,43 @@ +#include "WimaPolygon.h" + +WimaPolygon::WimaPolygon(QObject *parent) : + QGCMapPolygon (parent) + ,_maxAltitude (30) + ,_vehicle (nullptr) + ,_polygonFractions (new QmlObjectListModel(this)) +{ +} + +void WimaPolygon::setMaxAltitude(double alt) +{ + if(alt > 0 && alt != _maxAltitude){ + _maxAltitude = alt; + emit maxAltitudeChanged(_maxAltitude); + } +} + + +void WimaPolygon::setVehicle(Vehicle *vehicle) +{ + if(_vehicle != vehicle){ + _vehicle = vehicle; + emit vehicleChanged(_vehicle); + } +} + +QmlObjectListModel* WimaPolygon::splitPolygonArea(int numberOfFractions) +{ + if(numberOfFractions > 0){ + _polygonFractions->append(this); + emit polygonFractionsChanged(_polygonFractions); + + return _polygonFractions; + } + return nullptr; +} + +QGCMapPolygon *WimaPolygon::extractQGCPolygon() +{ + QGCMapPolygon* newPolygon = new QGCMapPolygon(this->parent()); + +} diff --git a/src/MissionManager/WimaPolygon.h b/src/MissionManager/WimaPolygon.h new file mode 100644 index 0000000000000000000000000000000000000000..4e762e70b8a070a5b18ca01ee48864b69d6d2d7d --- /dev/null +++ b/src/MissionManager/WimaPolygon.h @@ -0,0 +1,58 @@ +#ifndef WIMAPOLYGON_H +#define WIMAPOLYGON_H + +#include "QGCMapPolygon.h" +#include "Vehicle.h" + + + +class WimaPolygon : public QGCMapPolygon //abstract base class for all WimaPolygons +{ + Q_OBJECT +public: + WimaPolygon(QObject* parent = nullptr); + + + + Q_PROPERTY(double maxAltitude READ maxAltitude WRITE setMaxAltitude NOTIFY maxAltitudeChanged) + Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT) + Q_PROPERTY(QString editorQML READ editorQML CONSTANT) + Q_PROPERTY(Vehicle* vehicle READ vehicle WRITE setVehicle NOTIFY vehicleChanged) + Q_PROPERTY(QmlObjectListModel* polygonFractions READ polygonFractions NOTIFY polygonFractionsChanged) + + //Property accessors + double maxAltitude (void) const { return _maxAltitude;} + Vehicle* vehicle (void) const { return _vehicle;} + + virtual QString mapVisualQML (void) const = 0; + virtual QString editorQML (void) const = 0; + + //Property setters + void setMaxAltitude (double alt); + void setName (QString name); + void setVehicle (Vehicle* vehicle); + + /// Splits the polygon in numberOfFractions fractions with equal area. + /// @param polygonFractions The polygon List to add the fractions to. + /// @param numberOfFractions The number of fractions to split the polygon to. + Q_INVOKABLE QmlObjectListModel* splitPolygonArea(int numberOfFractions); + + + +signals: + void maxAltitudeChanged (double alt); + void vehicleChanged (Vehicle* vehicle); + void polygonFractionsChanged (QmlObjectListModel* pfrac); + +protected: + QGCMapPolygon* extractQGCPolygon(void); + +private: + + + double _maxAltitude; + Vehicle* _vehicle; + QmlObjectListModel* _polygonFractions; +}; + +#endif // WIMAPOLYGON_H diff --git a/src/MissionManager/WimaServicePolygon.cc b/src/MissionManager/WimaServicePolygon.cc new file mode 100644 index 0000000000000000000000000000000000000000..8d87c4df11e8c37ed1dd933448ff068b37c95b2c --- /dev/null +++ b/src/MissionManager/WimaServicePolygon.cc @@ -0,0 +1,31 @@ +#include "WimaServicePolygon.h" + +WimaServicePolygon::WimaServicePolygon(QObject *parent): + WimaPolygon (parent) +{ + +} + +void WimaServicePolygon::setTakeOffPosition(QGeoCoordinate coordinate) +{ + if(_takeOffPosition != coordinate){ + _takeOffPosition = coordinate; + emit takeOffPositionChanged(coordinate); + } +} + +void WimaServicePolygon::setLandPosition(QGeoCoordinate coordinate) +{ + if(_landPosition != coordinate){ + _landPosition = coordinate; + emit landPositionChanged(coordinate); + } +} + +void WimaServicePolygon::setVehicle(Vehicle *vehicle) +{ + if(_vehicle != vehicle){ + _vehicle = vehicle; + emit vehicleChanged(vehicle); + } +} diff --git a/src/MissionManager/WimaServicePolygon.h b/src/MissionManager/WimaServicePolygon.h new file mode 100644 index 0000000000000000000000000000000000000000..ef193e55b6512642a915995639736ca31bdb1ab8 --- /dev/null +++ b/src/MissionManager/WimaServicePolygon.h @@ -0,0 +1,41 @@ +#ifndef WIMASERVICEPOLYGON_H +#define WIMASERVICEPOLYGON_H + +#include "QObject" +#include "WimaPolygon.h" + +class WimaServicePolygon : public WimaPolygon +{ + Q_OBJECT +public: + WimaServicePolygon(QObject* parent); + Q_PROPERTY(QGeoCoordiante takeOffPosition READ takeOffPosition WRITE setTakeOffPosition NOTIFY takeOffPositionChanged) + Q_PROPERTY(QGeoCoordinate landPosition READ landPosition WRITE setLandPosition NOTIFY landPositionChanged) + Q_PROPERTY(Vehicle* vehicle READ vehicle WRITE setVehicle NOTIFY vehicleChanged) + + // Overrides from WimaPolygon + QString mapVisualQML (void) const { return "WimaServicePolygonMapVisal.qml";} + QString editorQML (void) const { return "WimaServicePolygonEditor.qml";} + + // Property acessors + QGeoCoordinate takeOffPosition (void) const { return _takeOffPosition;} + QGeoCoordinate landPosition (void) const { return _landPosition;} + Vehicle* vehicle (void) const { return _vehicle;} + + // Property setters + void setTakeOffPosition (QGeoCoordinate coordinate); + void setLandPosition (QGeoCoordinate coordinate); + void setVehicle (Vehicle* vehicle); + +signals: + void takeOffPositionChanged (QGeoCoordinate takeOffPos); + void landPositionChanged (QGeoCoordinate landPos); + void vehicleChanged (Vehicle* vehicle); + +private: + QGeoCoordinate _takeOffPosition; + QGeoCoordinate _landPosition; + Vehicle* _vehicle; +}; + +#endif // WIMASERVICEPOLYGON_H diff --git a/src/MissionManager/WimaVehicleCorridor.cc b/src/MissionManager/WimaVehicleCorridor.cc new file mode 100644 index 0000000000000000000000000000000000000000..1d6e52f25205f2cfe8c545845058f585a5bc7dbd --- /dev/null +++ b/src/MissionManager/WimaVehicleCorridor.cc @@ -0,0 +1,7 @@ +#include "WimaVehicleCorridor.h" + +WimaVehicleCorridor::WimaVehicleCorridor(QObject *parent): + WimaPolygon(parent) +{ + +} diff --git a/src/MissionManager/WimaVehicleCorridor.h b/src/MissionManager/WimaVehicleCorridor.h new file mode 100644 index 0000000000000000000000000000000000000000..6ade209bb16682491c58b46fee6fb6edc64dc39b --- /dev/null +++ b/src/MissionManager/WimaVehicleCorridor.h @@ -0,0 +1,18 @@ +#ifndef WIMAVEHICLECORRIDOR_H +#define WIMAVEHICLECORRIDOR_H + +#include +#include "WimaPolygon.h" + +class WimaVehicleCorridor : public WimaPolygon +{ + Q_OBJECT +public: + WimaVehicleCorridor(QObject* parent); + + // Overrides from WimaPolygon + QString mapVisualQML (void) const { return "WimaVehicleCorridorMapVisal.qml";} + QString editorQML (void) const { return "WimaVehicleCorridorEditor.qml";} +}; + +#endif // WIMAVEHICLECORRIDOR_H diff --git a/src/MissionManager/WimaVehicleMeasurementPolygon.cc b/src/MissionManager/WimaVehicleMeasurementPolygon.cc new file mode 100644 index 0000000000000000000000000000000000000000..3032b346eaff64109c33ab14b23860fa13fc5bee --- /dev/null +++ b/src/MissionManager/WimaVehicleMeasurementPolygon.cc @@ -0,0 +1,8 @@ +#include "WimaVehicleMeasurementPolygon.h" + + +WimaVehicleMeasurementPolygon::WimaVehicleMeasurementPolygon(QObject *parent): + WimaPolygon (parent) +{ + +} diff --git a/src/MissionManager/WimaVehicleMeasurementPolygon.h b/src/MissionManager/WimaVehicleMeasurementPolygon.h new file mode 100644 index 0000000000000000000000000000000000000000..896e036e79e67595991c45c47228048b94ba2b04 --- /dev/null +++ b/src/MissionManager/WimaVehicleMeasurementPolygon.h @@ -0,0 +1,17 @@ +#ifndef WIMAVEHICLEMEASUREMENTPOLYGON_H +#define WIMAVEHICLEMEASUREMENTPOLYGON_H + +#include +#include "WimaPolygon.h" + +class WimaVehicleMeasurementPolygon : public WimaPolygon +{ + Q_OBJECT +public: + WimaVehicleMeasurementPolygon(QObject* parent); + // Overrides from WimaPolygon + QString mapVisualQML (void) const { return "WimaVehicleMeasurementPolygonMapVisal.qml";} + QString editorQML (void) const { return "WimaVehicleMeasurementPolygonEditor.qml";} +}; + +#endif // WIMAVEHICLEMEASUREMENTPOLYGON_H diff --git a/src/WimaView/FlyAreaEditor.qml b/src/WimaView/FlyAreaEditor.qml index ce309d869ca4c7331ef6f341a75802ea059d4d3c..11168fa78772a6c082eacb16a4a8cad66661fb5d 100644 --- a/src/WimaView/FlyAreaEditor.qml +++ b/src/WimaView/FlyAreaEditor.qml @@ -23,7 +23,6 @@ Rectangle { // The following properties must be available up the hierarchy chain //property real availableWidth ///< Width for control - //property var missionItem ///< Mission Item for editor property real _margin: ScreenTools.defaultFontPixelWidth / 2 property real _fieldWidth: ScreenTools.defaultFontPixelWidth * 10.5 diff --git a/src/WimaView/FlyAreaItemEditor.qml b/src/WimaView/FlyAreaItemEditor.qml index 82eca363423009ca0a7f431d07d441634b4b243f..796dcf87418f8c7e1930201137ccfd3809400ed3 100644 --- a/src/WimaView/FlyAreaItemEditor.qml +++ b/src/WimaView/FlyAreaItemEditor.qml @@ -12,10 +12,10 @@ import QGroundControl.FactControls 1.0 import QGroundControl.Palette 1.0 -/// Mission item edit control +/// Fly Area Item edit control Rectangle { id: _root - height: editorLoader.visible ? (editorLoader.y + editorLoader.height + (_margin * 2)) : (commandPicker.y + commandPicker.height + _margin / 2) + height: editorLoader.visible ? (editorLoader.y + editorLoader.height + (_margin * 2)) : (descriptionLabel.y + descriptionLabel.height + _margin / 2) color: _currentItem ? qgcPal.missionItemEditor : qgcPal.windowShade radius: _radius @@ -25,13 +25,14 @@ Rectangle { property var polygon ///< MissionItem associated with this editor property bool readOnly ///< true: read only view, false: full editing view property var rootQgcView + property int _index signal clicked signal remove property var _masterController: masterController property var _missionController: _masterController.missionController - property bool _currentItem: flyArea.currentPolygonIndex === index + property bool _currentItem: polygon.interactive property color _outerTextColor: _currentItem ? qgcPal.primaryButtonText : qgcPal.text property bool _noMissionItemsAdded: ListView.view.model.count === 1 property real _sectionSpacer: ScreenTools.defaultFontPixelWidth / 2 // spacing between section headings @@ -39,7 +40,7 @@ Rectangle { readonly property real _editFieldWidth: Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12) readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 - readonly property real _hamburgerSize: commandPicker.height * 0.75 + readonly property real _hamburgerSize: descriptionLabel.height * 0.75 readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly QGCPalette { @@ -63,7 +64,7 @@ Rectangle { QGCLabel { id: label - anchors.verticalCenter: commandPicker.verticalCenter + anchors.verticalCenter: descriptionLabel.verticalCenter anchors.leftMargin: _margin anchors.left: parent.left text: index @@ -74,7 +75,7 @@ Rectangle { id: hamburger anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.right: parent.right - anchors.verticalCenter: commandPicker.verticalCenter + anchors.verticalCenter: descriptionLabel.verticalCenter width: _hamburgerSize height: _hamburgerSize sourceSize.height: _hamburgerSize @@ -99,46 +100,38 @@ Rectangle { onTriggered: flyArea.appendFlyAreaPolygon() } - - MenuItem { text: qsTr("Delete") onTriggered: remove() } - - + MenuItem { + text: qsTr("Copy Fly Area") + //onTriggered: //To Do + } } } - QGCButton { - id: commandPicker + QGCLabel { + id: descriptionLabel anchors.topMargin: _margin / 2 anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.left: label.right anchors.top: parent.top - visible: !commandLabel.visible text: "Fly Area" - + verticalAlignment: Text.AlignVCenter + color: _outerTextColor } - QGCLabel { - id: commandLabel - anchors.fill: commandPicker - visible: _currentItem - verticalAlignment: Text.AlignVCenter - text: "Fly Area" - color: _outerTextColor - } Loader { id: editorLoader anchors.leftMargin: _margin anchors.topMargin: _margin anchors.left: parent.left - anchors.top: commandPicker.bottom + anchors.top: descriptionLabel.bottom source: "FlyAreaEditor.qml" visible: _currentItem diff --git a/src/WimaView/WimaView.qml b/src/WimaView/WimaView.qml index 687876469a9670616f6bf44bc5e5a3640a7e71a2..9e9e76db046fafda75121a544f46eee15a78da89 100644 --- a/src/WimaView/WimaView.qml +++ b/src/WimaView/WimaView.qml @@ -74,6 +74,8 @@ QGCView { Component.onCompleted: { toolbar.planMasterController = Qt.binding(function () { return _planMasterController }) toolbar.currentMissionItem = Qt.binding(function () { return _missionController.currentPlanViewItem }) + _wimaController.masterController = Qt.binding(function () { return _planMasterController}) + _wimaController.missionController = Qt.binding(function () { return _planMasterController.missionController}) } function updateAirspace(reset) { @@ -806,20 +808,21 @@ QGCView { //-- List Elements delegate: FlyAreaItemEditor { map: editorMap - masterController: _planMasterController + masterController: _planMasterController flyArea: _flyArea + _index: index polygon: object width: parent.width readOnly: false rootQgcView: _qgcView - onClicked: _flyArea.setCurrentPolygon(index) + onClicked: _flyArea.selectCurrentPolygon(index) onRemove: { var removeIndex = index _flyArea.removeFlyAreaPolygon(removeIndex) if (removeIndex >= _flyArea.polygons.count) { removeIndex-- } - _flyArea.setCurrentPolygon(removeIndex) + _flyArea.selectCurrentPolygon(removeIndex) } } } @@ -1137,42 +1140,33 @@ QGCView { width: parent.width*0.7 x: (parent.width-width)/2 height: 150 - radius: 10 + radius: 1 border.color: "black" - border.width: 2 + border.width: 1 color: "green" z:100 - Text { - id: debugTextTitle - anchors.top: parent.top - x: (parent.width - width)/2 - text: qsTr("Debug Messages:") - } - Rectangle { - id: debugMessageText - anchors.margins: 50 - color: "darkgreen" - radius: 10 - Column { - anchors.fill: parent - Repeater{ - model: _flyArea.polygons - delegate: Rectangle{ - height: 25 - color: "lightsteelblue" - radius: 5 - Text { - text: object.interactive - } - } - } - } - } + QGCListView { + anchors.fill: parent + model: _flyArea.polygons + delegate: Rectangle{ + height: 15 + color: "lightsteelblue" + radius: 1 + Text { + text: object.interactive + } + } + } + } + + + + } // QGCVIew