diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 7a73d84ae47cc0701f9a8ea79b3996fedd4ff42e..5d30828dd1d94cffd4388c29b635d825cd20ba51 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -265,16 +265,16 @@
src/MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml
src/MeasurementComplexItem/qml/MeasurementItemEditor.qml
src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml
- src/MeasurementComplexItem/qml/CoordinateIndicator.qml
- src/MeasurementComplexItem/qml/CoordinateIndicatorDrag.qml
- src/MeasurementComplexItem/qml/DragCoordinate.qml
+ src/MeasurementComplexItem/qml/CoordinateIndicator.qml
+ src/MeasurementComplexItem/qml/CoordinateIndicatorDrag.qml
+ src/MeasurementComplexItem/qml/DragCoordinate.qml
src/MeasurementComplexItem/qml/LinearGeneratorEditor.qml
src/MeasurementComplexItem/qml/ProgressIndicator.qml
src/MeasurementComplexItem/qml/GeoAreaVisualLoader.qml
src/MeasurementComplexItem/qml/MeasurementAreaEditor.qml
- src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml
+ src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml
src/MeasurementComplexItem/qml/SafeAreaEditor.qml
- src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
+ src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
src/VehicleSetup/SetupParameterEditor.qml
src/VehicleSetup/SetupView.qml
src/PlanView/SimpleItemEditor.qml
diff --git a/src/MeasurementComplexItem/AreaData.h b/src/MeasurementComplexItem/AreaData.h
index dd056823deb6492f382eb8d500b4f227b810493e..fc481b040db8602df56877e04bbe11ef0659e02f 100644
--- a/src/MeasurementComplexItem/AreaData.h
+++ b/src/MeasurementComplexItem/AreaData.h
@@ -17,6 +17,8 @@ public:
AreaData(const AreaData &other, QObject *parent = nullptr);
AreaData &operator=(const AreaData &other);
+ Q_PROPERTY(QmlObjectListModel *areaList READ areaList NOTIFY areaListChanged)
+
// Member Methodes
//!
//! \brief insert Inserts the area if areaList does not contain it.
diff --git a/src/MeasurementComplexItem/geometry/MeasurementArea.cc b/src/MeasurementComplexItem/geometry/MeasurementArea.cc
index 95eb58463fc3576a280a0670250193ff5eceb859..ea79209d6d51246ef87777003597c9481dcf7b1f 100644
--- a/src/MeasurementComplexItem/geometry/MeasurementArea.cc
+++ b/src/MeasurementComplexItem/geometry/MeasurementArea.cc
@@ -68,7 +68,7 @@ const char *MeasurementArea::tileHeightName = "TileHeight";
const char *MeasurementArea::tileWidthName = "TileWidth";
const char *MeasurementArea::minTileAreaName = "MinTileAreaPercent";
const char *MeasurementArea::showTilesName = "ShowTiles";
-const char *MeasurementArea::MeasurementAreaName = "Measurement Area";
+const char *MeasurementArea::measurementAreaName = "Measurement Area";
MeasurementArea::MeasurementArea(QObject *parent)
: GeoArea(parent),
@@ -162,7 +162,7 @@ void MeasurementArea::saveToJson(QJsonObject &json) {
json[tileWidthName] = _tileWidth.rawValue().toDouble();
json[minTileAreaName] = _minTileAreaPercent.rawValue().toDouble();
json[showTilesName] = _showTiles.rawValue().toBool();
- json[areaTypeName] = MeasurementAreaName;
+ json[areaTypeName] = measurementAreaName;
} else {
qCDebug(MeasurementAreaLog) << "saveToJson(): not ready for saveing.";
}
@@ -359,7 +359,7 @@ void MeasurementArea::enableUpdate() {
}
void MeasurementArea::init() {
- this->setObjectName(MeasurementAreaName);
+ this->setObjectName(measurementAreaName);
connect(&this->_tileHeight, &Fact::rawValueChanged, this,
&MeasurementArea::deferUpdate);
connect(&this->_tileWidth, &Fact::rawValueChanged, this,
diff --git a/src/MeasurementComplexItem/geometry/MeasurementArea.h b/src/MeasurementComplexItem/geometry/MeasurementArea.h
index 1dc40a0be81341cba3595fd397217f761d23e7ca..3e215cc0cdd25b775f571ca140871ba486016d9c 100644
--- a/src/MeasurementComplexItem/geometry/MeasurementArea.h
+++ b/src/MeasurementComplexItem/geometry/MeasurementArea.h
@@ -71,7 +71,7 @@ public:
static const char *tileWidthName;
static const char *minTileAreaName;
static const char *showTilesName;
- static const char *MeasurementAreaName;
+ static const char *measurementAreaName;
signals:
void tilesChanged();
diff --git a/src/MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml b/src/MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml
index 489234a8208a51093bc52ffd3dec4cad5db6961b..7455e0e0f8c1bf6bd789dac12c9b723584903bfb 100644
--- a/src/MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml
+++ b/src/MeasurementComplexItem/qml/CircularGeneratorMapVisual.qml
@@ -8,7 +8,6 @@ Item {
// Expects the following properties:
property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
property var generator
property bool checked: false
@@ -59,7 +58,6 @@ Item {
property var ref: _root.generator.reference
map: _root.map
- qgcView: _root.qgcView
z: QGroundControl.zOrderMapItems
checked: _root.checked
coordinate: ref
diff --git a/src/MeasurementComplexItem/qml/DragCoordinate.qml b/src/MeasurementComplexItem/qml/DragCoordinate.qml
index 265923188051ad810439c4e12af68176791aafc9..ceb31aa233275493257f7ff476cfe8f57e41a40e 100644
--- a/src/MeasurementComplexItem/qml/DragCoordinate.qml
+++ b/src/MeasurementComplexItem/qml/DragCoordinate.qml
@@ -23,7 +23,6 @@ Item {
id: _root
property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
property var coordinate
property int sequenceNumber
property bool checked
diff --git a/src/MeasurementComplexItem/qml/GeoAreaVisualLoader.qml b/src/MeasurementComplexItem/qml/GeoAreaVisualLoader.qml
index 783bf594eb79c4a23c1c9ee160d8e9c559b826d9..a74515a7d883fd220be12cf8ba9eed0f7ab6d195 100644
--- a/src/MeasurementComplexItem/qml/GeoAreaVisualLoader.qml
+++ b/src/MeasurementComplexItem/qml/GeoAreaVisualLoader.qml
@@ -21,22 +21,24 @@ import QGroundControl 1.0
Item {
id: _root
- property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
- property var geoArea ///< GeoArea derived class
+ property var map: undefined ///< Map control to place item in
+ property var geoArea: undefined ///< GeoArea derived class
signal clicked(int sequenceNumber)
- property var _visualItem
+ property var _visualItem: undefined
Component.onCompleted: {
- if (geoArea.mapVisualQML) {
- var component = Qt.createComponent(geoArea.mapVisualQML)
+ console.assert(map !== undefined, "please set the map property")
+ console.assert(geoArea !== undefined, "please set the geoArea property")
+
+ if (_root.geoArea.mapVisualQML && !_visualItem) {
+ var component = Qt.createComponent(_root.geoArea.mapVisualQML)
if (component.status === Component.Error) {
- console.log("Error loading Qml: ", geoArea.mapVisualQML, component.errorString())
+ console.log("Error loading Qml: ", _root.geoArea.mapVisualQML, component.errorString())
}
- _visualItem = component.createObject(map, { "map": _root.map, "qgcView": _root.qgcView, "geoArea": _root.geoArea})
- _visualItem.clicked.connect(_root.clicked)
+ _root._visualItem = component.createObject(_root.map, { map: _root.map, geoArea: _root.geoArea})
+ _root._visualItem.clicked.connect(_root.clicked)
}
}
diff --git a/src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml b/src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml
index 89a8adea848bf42efeaa74821c5a19378762a9e4..ce395a4e0f227c87cc687b39a21aed05d17c2061 100644
--- a/src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml
+++ b/src/MeasurementComplexItem/qml/MeasurementAreaMapVisual.qml
@@ -21,23 +21,27 @@ import QGroundControl.FlightMap 1.0
Item {
id: _root
- property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
- property var areaItem ///< GeoArea derived class
+ property var map: undefined ///< Map control to place item in
+ property var geoArea: undefined ///< GeoArea derived class
- property var opacity: 0.5
+ opacity: 0.3
signal clicked(int sequenceNumber)
+ Component.onCompleted: {
+ console.assert(map !== undefined, "please set the map property")
+ console.assert(geoArea !== undefined, "please set the geoArea property")
+ }
// Area polygon
QGCMapPolygonVisuals {
id: mapPolygonVisuals
- mapControl: map
- mapPolygon: areaItem
- interactive: true
- borderWidth: 1
- borderColor: "black"
+
+ mapControl: _root.map
+ mapPolygon: _root.geoArea
+ interactive: geoArea.interactive
+ borderWidth: 3
+ borderColor: "green"
interiorColor: "green"
altColor: QGroundControl.globalPalette.surveyPolygonTerrainCollision
interiorOpacity: _root.opacity
@@ -82,13 +86,13 @@ Item {
Repeater {
id: progressRepeater
- property bool enable: areaItem.showTiles.value
- model: enable ? areaItem.tiles : []
+ property bool enable: geoArea.showTiles.value
+ model: enable ? geoArea.tiles : []
Item{
property var _tileComponent
- property int _progress: _root.areaItem.progress[index] ?
- _root.areaItem.progress[index] : 0
+ property int _progress: _root.geoArea.progress[index] ?
+ _root.geoArea.progress[index] : 0
Component.onCompleted: {
_tileComponent = tileComponent.createObject(map)
diff --git a/src/MeasurementComplexItem/qml/MeasurementItemEditor.qml b/src/MeasurementComplexItem/qml/MeasurementItemEditor.qml
index c612208d91624b9b9c8e88ff01e4cd20dbd6758c..775686893e1c3210a2190d47c05e26ee0ecd691c 100644
--- a/src/MeasurementComplexItem/qml/MeasurementItemEditor.qml
+++ b/src/MeasurementComplexItem/qml/MeasurementItemEditor.qml
@@ -159,6 +159,36 @@ Rectangle {
}
} // variant repeater
} // variant grid
+
+ ExclusiveGroup{id:areaGroup}
+
+ Repeater{
+ id: areaReapeater
+
+ model: _missionItem.areaData.areaList
+ delegate: QGCRadioButton {
+ text: object.objectName
+ Layout.columnSpan: 2
+
+ onCheckedChanged: {
+ updateInteractive()
+ }
+
+ Component.onCompleted: {
+ if (index === 0){
+ checked = true
+ }
+ }
+
+ function updateInteractive(){
+ if (checked){
+ object.interactive = true
+ } else {
+ object.interactive = false
+ }
+ }
+ }
+ } // area Repeater
} // general grid
// Generator Editor
@@ -187,7 +217,9 @@ Rectangle {
model: missionItem.generatorNameList
onActivated: {
- missionItem.switchToGenerator(index)
+ if (index != -1){
+ missionItem.switchToGenerator(index)
+ }
}
}
}
@@ -207,8 +239,9 @@ Rectangle {
BusyIndicator{
id: indicator
- anchors.horizontalCenter: parent.horizontalCenter
+
property bool calculating: missionItem.calculating
+
running: calculating
visible: calculating || timer.running
diff --git a/src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml b/src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml
index 3bf46cd363f1c2b2449a9adfea3868030a6cbbee..ea5045dd65ef4320cba73c2d33bbf420c60a5af3 100644
--- a/src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml
+++ b/src/MeasurementComplexItem/qml/MeasurementItemMapVisual.qml
@@ -22,11 +22,9 @@ import QGroundControl.FlightMap 1.0
Item {
id: _root
- property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
+ property var map: undefined ///< Map control to place item in
property var _missionItem: object
- property var _areaData: _missionItem.areaData
property bool _editing: _missionItem.editing
property var _generator: _missionItem.generator
@@ -52,7 +50,8 @@ Item {
_addTransectsComponent()
_addGeneratorVisuals()
var bbox = boundingBox()
- _areaData.initialize(bbox[0], bbox[1])
+ _missionItem.areaData.initialize(bbox[0], bbox[1])
+ console.assert(map != undefined, "please set the map property")
}
Component.onDestruction: {
@@ -72,10 +71,10 @@ Item {
id: visualTransectsComponent
MapPolyline {
- property var transects: _missionItem.route
+ property var route: _missionItem.route
line.color: "white"
line.width: 2
- path: transects.length > 0 ? transects : []
+ path: route.length > 0 ? route : []
}
}
@@ -120,12 +119,12 @@ Item {
}
+ // GeoAreas
Repeater {
- model: _areaData.areaList
+ model: _missionItem.areaData.areaList
delegate: GeoAreaVisualLoader {
map: _root.map
- qgcView: _root.qgcView
- geoArea: _areaData.areaList[index]
+ geoArea: object
}
}
@@ -140,7 +139,6 @@ Item {
_generatorVisuals =
component.createObject(_root, {
"map": _root.map,
- "qgcView": _root.qgcView ,
"generator": _root._generator,
"checked": Qt.binding(
function(){
diff --git a/src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml b/src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
index 2d482e3a0ea83b8a8f2d23ba82f6bd8fa3e9eabb..f9289ee511d8701bb4a99cf3e6ab5cab883b1ddd 100644
--- a/src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
+++ b/src/MeasurementComplexItem/qml/SafeAreaMapVisual.qml
@@ -21,42 +21,48 @@ import QGroundControl.FlightMap 1.0
Item {
id: _root
- property var map ///< Map control to place item in
- property var qgcView ///< QGCView to use for popping dialogs
- property var areaItem ///< GeoArea derived class.
+ property var map: undefined ///< Map control to place item in
+ property var geoArea: undefined ///< GeoArea derived class.
- property var _polygon: areaItem
- property var _depot: undefined
- property bool _showDepot: areaItem.interactive || areaItem.borderPolygon.interactive
+ property var _depotVisual: undefined
+ property var _depotDrag: undefined
+ property bool _showDepot: geoArea.interactive
+
+ opacity: 0.3
signal clicked(int sequenceNumber)
on_ShowDepotChanged: {
if (_showDepot){
- _addDepot()
+ _addDepotVisual()
+ _addDepotDrag()
} else {
- _destroyDepot()
+ _destroyDepotVisual()
+ _destroyDepotDrag()
}
}
Component.onCompleted: {
if (_showDepot){
- _addDepot()
+ _addDepotVisual()
+ _addDepotDrag()
}
+ console.assert(map !== undefined, "please set the map property")
+ console.assert(geoArea !== undefined, "please set the geoArea property")
}
Component.onDestruction: {
- _destroyDepot()
+ _destroyDepotVisual()
}
// Area polygon
QGCMapPolygonVisuals {
id: mapPolygonVisuals
mapControl: map
- mapPolygon: areaItem
- interactive: true
- borderWidth: 1
- borderColor: "black"
+ mapPolygon: geoArea
+ interactive: geoArea.interactive
+ borderWidth: 2
+ borderColor: "blue"
interiorColor: "blue"
altColor: QGroundControl.globalPalette.surveyPolygonTerrainCollision
interiorOpacity: _root.opacity
@@ -65,49 +71,72 @@ Item {
// Depot Point.
Component {
id: depotPointComponent
- DragCoordinate {
- property var depot: _root.areaItem.depot
-
- map: _root.map
- qgcView: _root.qgcView
- z: QGroundControl.zOrderMapItems
- checked: _root._showDepot
- coordinate: _root.areaItem.depot
- label: "Depot"
-
- function syncAndBind(){
- if (coordinate.latitude !== depot.latitude ||
- coordinate.longitude !== depot.longitude){
- if (_root.areaItem.containsCoordinate(coordinate)){
- _root.areaItem.depot = coordinate
- }
+
+ MapQuickItem {
+ coordinate: _root.geoArea.depot
+ anchorPoint.x: sourceItem.anchorPointX
+ anchorPoint.y: sourceItem.anchorPointY
+ visible: true
+
+ sourceItem:
+ MissionItemIndexLabel {
+ checked: geoArea.interactive
+ label: qsTr("Launch")
+ highlightSelected: true
+ onClicked: _root.clicked(0)
+ visible: true
}
- coordinate = Qt.binding(function(){return _root.areaItem.depot})
- }
+ }
+ }
- onDragReleased: {
- syncAndBind()
- }
+ Component {
+ id: depotDragComponent
+
+ MissionItemIndicatorDrag {
+ mapControl: _root.map
+ itemIndicator: _depot
+ itemCoordinate: geoArea.depot
+ visible: geoArea.interactive
- Component.onCompleted: {
- syncAndBind()
+ property var depot: geoArea.depot
+
+ onItemCoordinateChanged: {
+ if (itemCoordinate.latitude !== depot.latitude ||
+ itemCoordinate.longitude !== depot.longitude){
+ if (_root.areaItem.containsCoordinate(itemCoordinate)){
+ _root.areaItem.depot = itemCoordinate
+ }
+ }
+ itemCoordinate = Qt.binding(function(){return _root.geoArea.depot})
}
+ }
+ }
+
+ function _addDepotVisual() {
+ if (!_depotVisual){
+ _depotVisual = depotPointComponent.createObject(_root)
+ map.addMapItem(_depotVisual)
+ }
+ }
+ function _destroyDepotVisual() {
+ if (_depotVisual){
+ map.removeMapItem(_depotVisual)
+ _depotVisual.destroy()
+ _depotVisual = undefined
}
}
- function _addDepot() {
- if (!_depot){
- _depot = depotPointComponent.createObject(_root)
- map.addMapItem(_depot)
+ function _addDepotDrag() {
+ if (!_depotDrag){
+ _depotDrag = depotDragComponent.createObject(_root)
}
}
- function _destroyDepot() {
- if (_depot){
- map.removeMapItem(_depot)
- _depot.destroy()
- _depot = undefined
+ function _destroyDepotDrag() {
+ if (_depotDrag){
+ _depotDrag.destroy()
+ _depotDrag = undefined
}
}
}
diff --git a/src/PlanView/TakeoffItemMapVisual.qml b/src/PlanView/TakeoffItemMapVisual.qml
index 0cdb9666d56c394add32a2a774f601dc124a55e6..74ad6686ede42890eb771e09d68ef75b5659fe1c 100644
--- a/src/PlanView/TakeoffItemMapVisual.qml
+++ b/src/PlanView/TakeoffItemMapVisual.qml
@@ -117,8 +117,7 @@ Item {
}
}
- Component {
- id: launchIndicatorComponent
+ Component { id: launchIndicatorComponent
MapQuickItem {
coordinate: _missionItem.launchCoordinate
diff --git a/src/QmlControls/QGroundControl/Controls/qmldir b/src/QmlControls/QGroundControl/Controls/qmldir
index 53436f988c7557cc37435fb08802b2a76f93d3c2..1bb76cf9f78a3fcc96c5deec9381af7f0a9aa214 100644
--- a/src/QmlControls/QGroundControl/Controls/qmldir
+++ b/src/QmlControls/QGroundControl/Controls/qmldir
@@ -113,3 +113,6 @@ MAVLinkChart 1.0 MAVLinkChart.qml
MeasurementItemMapVisual 1.0 MeasurementItemMapVisual.qml
CircularGeneratorMapVisual 1.0 CircularGeneratorMapVisual.qml
GeoAreaVisualLoader 1.0 GeoAreaVisualLoader.qml
+DragCoordinate 1.0 DragCoordinate.qml
+CoordinateIndicator 1.0 CoordinateIndicator.qml
+CoordinateIndicatorDrag 1.0 CoordinateIndicatorDrag.qml