From f6b6211e1e8191dcc484f98717fc1b653acb4f7e Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Sat, 17 Oct 2020 14:36:47 +0200 Subject: [PATCH] QGCButtonArray added, Area centering added to WimaView.qml --- qgroundcontrol.qrc | 1 + src/MissionManager/MissionController.cc | 2 + src/QmlControls/QGCButtonColumn.qml | 45 +++++++++++++ .../QGroundControl.Controls.qmldir | 1 + src/QmlControls/QmlObjectListModel.h | 3 +- src/WimaView/WimaView.qml | 67 ++++++++++++++++++- 6 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 src/QmlControls/QGCButtonColumn.qml diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 2711db9d7..82b70a881 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -237,6 +237,7 @@ src/WimaView/WimaJoinedAreaDataVisual.qml src/Wima/Snake/WimaAreaNoVisual.qml src/WimaView/WimaMeasurementAreaDataVisual.qml + src/QmlControls/QGCButtonColumn.qml src/Settings/APMMavlinkStreamRate.SettingsGroup.json diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 1907b83ca..863d8953c 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -2440,6 +2440,8 @@ QStringList MissionController::complexMissionItemNames(void) const { complexItems.append(_surveyMissionItemName); complexItems.append(patternCorridorScanName); + // Circular Survey not added here, as it can only be used together with + // WimaView. if (_controllerVehicle->fixedWing()) { complexItems.append(patternFWLandingName); } diff --git a/src/QmlControls/QGCButtonColumn.qml b/src/QmlControls/QGCButtonColumn.qml new file mode 100644 index 000000000..1599dc8cb --- /dev/null +++ b/src/QmlControls/QGCButtonColumn.qml @@ -0,0 +1,45 @@ +import QtQuick 2.3 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.2 +import QtPositioning 5.3 + +import QGroundControl 1.0 +import QGroundControl.ScreenTools 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.Palette 1.0 + +ColumnLayout { + id: root + spacing: ScreenTools.defaultFontPixelWidth * 0.5 + + property var model // list of lists (nested list contains all entries of ENTRY_NAME) + property string headLine + property bool hideOnClicked: true + + enum EntryName { + Text = 0, + Visible = 1, + Enabled = 2, + OnClicked = 3 + } + + QGCLabel { text: headLine } + + Repeater{ + model: root.model + QGCButton { + text: modelData[QGCButtonColumn.EntryName.Text] + visible: modelData[QGCButtonColumn.EntryName.Visible] + enabled: modelData[QGCButtonColumn.EntryName.Enabled] + Layout.fillWidth: true + + onClicked: { + if (hideOnClicked){ + dropPanel.hide() + } + root.model[index][QGCButtonColumn.EntryName.OnClicked]() + } + } + } + +} // ColumnLayout diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir index 0ea43058f..83953b980 100644 --- a/src/QmlControls/QGroundControl.Controls.qmldir +++ b/src/QmlControls/QGroundControl.Controls.qmldir @@ -101,5 +101,6 @@ DragCoordinate 1.0 DragCoordinate.qml CoordinateIndicator 1.0 CoordinateIndicator.qml CoordinateIndicatorDrag 1.0 CoordinateIndicatorDrag.qml ProgressIndicator 1.0 ProgressIndicator.qml +QGCButtonColumn 1.0 QGCButtonColumn.qml diff --git a/src/QmlControls/QmlObjectListModel.h b/src/QmlControls/QmlObjectListModel.h index 8f45fa09e..2eca445bb 100644 --- a/src/QmlControls/QmlObjectListModel.h +++ b/src/QmlControls/QmlObjectListModel.h @@ -26,7 +26,8 @@ public: Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) Q_INVOKABLE QObject *get(int index) { return _objectList[index]; } - Q_INVOKABLE const QObject *get(int index) const { return _objectList[index]; } + // No Q_INVOKABLE here, as QML seems to have a problem with const QObject*. + const QObject *get(int index) const { return _objectList[index]; } // Property accessors diff --git a/src/WimaView/WimaView.qml b/src/WimaView/WimaView.qml index a9bb554c7..6928bf5d0 100644 --- a/src/WimaView/WimaView.qml +++ b/src/WimaView/WimaView.qml @@ -117,6 +117,24 @@ QGCView { map: editorMap usePlannedHomePosition: masterController planMasterController: _planMasterController + + function fitMapViewportToAreas() { + if (!_wimaPlaner.visualItems) { + // Being called prior to controller.start + return + } + + var coordList = [ ] + for (var i = 0; i < _wimaPlaner.visualItems.count; i++){ + var area = _wimaPlaner.visualItems.get(i) + for (var j = 0; j < area.path.length; ++j){ + var vertex = area.path[j] + coordList.push(vertex) + } + } + console.log(coordList) + fitMapViewportToAllCoordinates(coordList) + } } on_AirspaceEnabledChanged: { @@ -1158,9 +1176,52 @@ QGCView { Component { id: centerMapDropPanel - CenterMapDropPanel { - map: editorMap - fitFunctions: mapFitFunctions + QGCButtonColumn { + headLine: qsTr("Center map on:") + model:[ + [ + qsTr("Mission"), /*button text*/ + true, /*visible*/ + true, /*enabled*/ + function(){mapFitFunctions.fitMapViewportToMissionItems()} /*onClicked*/ + ], + [ + qsTr("All Items"), /*button text*/ + true, /*visible*/ + true, /*enabled*/ + function(){mapFitFunctions.fitMapViewportToAllItems()} /*onClicked*/ + ], + [ + qsTr("Areas"), /*button text*/ + true, /*visible*/ + true, /*enabled*/ + function(){mapFitFunctions.fitMapViewportToAreas()} /*onClicked*/ + ], + [ + qsTr("Home"), /*button text*/ + true, /*visible*/ + true, /*enabled*/ + function(){editorMap.center = mapFitFunctions.fitHomePosition()} /*onClicked*/ + ], + [ + qsTr("Vehicle"), /*button text*/ + true, /*visible*/ + _activeVehicle && _activeVehicle.coordinate.isValid, /*enabled*/ + function(){editorMap.center = _activeVehicle.coordinate} /*onClicked*/ + ], + [ + qsTr("Current Location"), /*button text*/ + true, /*visible*/ + editorMap.gcsPosition.isValid, /*enabled*/ + function(){editorMap.center = editorMap.gcsPosition} /*onClicked*/ + ], + [ + qsTr("Specified Location"), /*button text*/ + true, /*visible*/ + true, /*enabled*/ + function(){editorMap.centerToSpecifiedLocation()} /*onClicked*/ + ] + ] } } -- 2.22.0