diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index f10ead0431fd3f02c58221759c4a963772ec6cf5..12c7b7fdc83272a14a8ccefb07d7d9cf6b248e61 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -234,7 +234,8 @@ FlightMap { // GeoFence breach return point MapQuickItem { - anchorPoint: Qt.point(sourceItem.width / 2, sourceItem.height / 2) + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY coordinate: geoFenceController.breachReturnPoint visible: geoFenceController.breachReturnEnabled sourceItem: MissionItemIndexLabel { label: "F" } @@ -247,7 +248,8 @@ FlightMap { delegate: MapQuickItem { id: itemIndicator - anchorPoint: Qt.point(sourceItem.width / 2, sourceItem.height / 2) + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY coordinate: object.coordinate z: QGroundControl.zOrderMapItems @@ -263,8 +265,8 @@ FlightMap { coordinate: _gotoHereCoordinate visible: _activeVehicle && _activeVehicle.guidedMode && _gotoHereCoordinate.isValid z: QGroundControl.zOrderMapItems - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY sourceItem: MissionItemIndexLabel { checked: true diff --git a/src/FlightMap/FlightMap.qml b/src/FlightMap/FlightMap.qml index ed8042802612c380ab54cb88492e6f6fee8b734d..076641a91b8d06422e034eb9fc71bfcb68f9d0f5 100644 --- a/src/FlightMap/FlightMap.qml +++ b/src/FlightMap/FlightMap.qml @@ -129,8 +129,8 @@ Map { /// Ground Station location MapQuickItem { - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY visible: mainWindow.gcsPosition.isValid coordinate: mainWindow.gcsPosition sourceItem: MissionItemIndexLabel { diff --git a/src/FlightMap/MapItems/MissionItemIndicator.qml b/src/FlightMap/MapItems/MissionItemIndicator.qml index ec325c1ec81ad5b3b1f81c7f42cb560c1cd7230f..58ad845430ee9c7460a3d7e61a9830e319d8c7b1 100644 --- a/src/FlightMap/MapItems/MissionItemIndicator.qml +++ b/src/FlightMap/MapItems/MissionItemIndicator.qml @@ -24,8 +24,8 @@ MapQuickItem { signal clicked - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY sourceItem: MissionItemIndexLabel { diff --git a/src/MissionEditor/FWLandingPatternMapVisual.qml b/src/MissionEditor/FWLandingPatternMapVisual.qml index b393d755f4175ff71f586f824fe4e01c16925685..ec4af323614af5746bebbf157a8bb6221023af7d 100644 --- a/src/MissionEditor/FWLandingPatternMapVisual.qml +++ b/src/MissionEditor/FWLandingPatternMapVisual.qml @@ -214,14 +214,17 @@ Item { id: loiterPointComponent MapQuickItem { - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY z: QGroundControl.zOrderMapItems coordinate: _missionItem.loiterCoordinate sourceItem: MissionItemIndexLabel { - label: "L" + label: "Loiter" + checked: _missionItem.isCurrentItem + + onClicked: setCurrentItem(_missionItem.sequenceNumber) } } } @@ -245,15 +248,17 @@ Item { id: landPointComponent MapQuickItem { - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY z: QGroundControl.zOrderMapItems coordinate: _missionItem.landingCoordinate sourceItem: MissionItemIndexLabel { - label: "L" + label: "Land" checked: _missionItem.isCurrentItem + + onClicked: setCurrentItem(_missionItem.sequenceNumber) } } } diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index 87d7e126870f6837b729af0cfb39bc7692ef1a72..49e863200ed7a3ee1fdc338eca45ced12f662eb2 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -403,8 +403,8 @@ QGCView { id: itemDragger x: mapCoordinateIndicator ? (mapCoordinateIndicator.x + mapCoordinateIndicator.anchorPoint.x - (itemDragger.width / 2)) : 100 y: mapCoordinateIndicator ? (mapCoordinateIndicator.y + mapCoordinateIndicator.anchorPoint.y - (itemDragger.height / 2)) : 100 - width: ScreenTools.defaultFontPixelHeight * 2 - height: ScreenTools.defaultFontPixelHeight * 2 + width: ScreenTools.defaultFontPixelHeight * 3 + height: ScreenTools.defaultFontPixelHeight * 3 color: "transparent" visible: false z: QGroundControl.zOrderMapItems + 1 // Above item icons @@ -504,9 +504,10 @@ QGCView { model: object.isSimpleItem ? object.childItems : 0 delegate: MissionItemIndexLabel { - label: object.abbreviation - checked: object.isCurrentItem - z: 2 + label: object.abbreviation + checked: object.isCurrentItem + z: 2 + specifiesCoordinate: false onClicked: setCurrentItem(object.sequenceNumber) } @@ -689,7 +690,8 @@ QGCView { // GeoFence breach return point MapQuickItem { - anchorPoint: Qt.point(sourceItem.width / 2, sourceItem.height / 2) + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY coordinate: geoFenceController.breachReturnPoint visible: geoFenceController.breachReturnEnabled sourceItem: MissionItemIndexLabel { label: "F" } @@ -730,7 +732,8 @@ QGCView { delegate: MapQuickItem { id: itemIndicator - anchorPoint: Qt.point(sourceItem.width / 2, sourceItem.height / 2) + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY coordinate: object.coordinate z: QGroundControl.zOrderMapItems diff --git a/src/MissionEditor/SurveyComplexItem.qml b/src/MissionEditor/SurveyComplexItem.qml index 64d261ec5c6a3c81950d1db2c034ddb2aeb5a68c..a438fb7077895fa7b5aaac001601529468539a16 100644 --- a/src/MissionEditor/SurveyComplexItem.qml +++ b/src/MissionEditor/SurveyComplexItem.qml @@ -72,14 +72,17 @@ Item { id: entryPointComponent MapQuickItem { - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY z: QGroundControl.zOrderMapItems coordinate: _missionItem.coordinate sourceItem: MissionItemIndexLabel { - label: "S" + label: "Entry" + checked: _missionItem.isCurrentItem + + onClicked: setCurrentItem(_missionItem.sequenceNumber) } } } @@ -89,14 +92,17 @@ Item { id: exitPointComponent MapQuickItem { - anchorPoint.x: sourceItem.width / 2 - anchorPoint.y: sourceItem.height / 2 + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY z: QGroundControl.zOrderMapItems coordinate: _missionItem.exitCoordinate sourceItem: MissionItemIndexLabel { - label: "S" + label: "Exit" + checked: _missionItem.isCurrentItem + + onClicked: setCurrentItem(_missionItem.sequenceNumber) } } } diff --git a/src/QmlControls/MissionItemIndexLabel.qml b/src/QmlControls/MissionItemIndexLabel.qml index 9561f61c0502328ca8e9d9399a8a21e7071de207..7e6bb8e74b40a89c090ddbc7ad135384cef977f9 100644 --- a/src/QmlControls/MissionItemIndexLabel.qml +++ b/src/QmlControls/MissionItemIndexLabel.qml @@ -5,38 +5,75 @@ import QtQuick.Controls.Styles 1.2 import QGroundControl.ScreenTools 1.0 import QGroundControl.Palette 1.0 -Rectangle { - id: root - - property alias label: _label.text - property bool checked: false - property bool small: false +Canvas { + id: root + width: _width + (_singleChar ? 0 : _label.width) + height: specifiesCoordinate ? (_width * 1.5) : _width signal clicked - width: _width - height: _width - radius: _width / 2 - border.width: small ? 1 : 2 - border.color: "white" - color: checked ? "green" : qgcPal.mapButtonHighlight + property alias label: _label.text + property bool checked: false + property bool small: false + property var color: checked ? "green" : qgcPal.mapButtonHighlight + property real anchorPointX: _width / 2 + property real anchorPointY: _width * 1.5 + property bool specifiesCoordinate: true + + property real _width: small ? ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.25 : ScreenTools.defaultFontPixelHeight * 1.25 + property bool _singleChar: _label.text.length <= 1 - property real _width: small ? ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.75 : ScreenTools.defaultFontPixelHeight * 1.75 + onColorChanged: requestPaint() QGCPalette { id: qgcPal } + function paintSingleCoordinate(context) { + context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, Math.PI / 8); + context.lineTo(_width / 2, _width * 1.5) + } + + function paintSingleNoCoordinate(context) { + context.arc(_width / 2, _width / 2, _width / 2, Math.PI * 2, 0); + } + + function paintMultipleCoordinate(context) { + context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, (Math.PI / 2) * 3); + context.lineTo(_label.width, 0) + context.arc(_label.width, _width / 2, _width / 2, (Math.PI / 2) * 3, Math.PI / 2); + context.lineTo((_width / 4) * 3, _width) + context.lineTo(_width / 2, _width * 1.5) + } + + onPaint: { + var context = getContext("2d") + context.reset() + context.beginPath() + if (_singleChar) { + if (specifiesCoordinate) { + paintSingleCoordinate(context) + } else { + paintSingleNoCoordinate(context) + } + } else { + paintMultipleCoordinate(context) + } + context.closePath() + context.fillStyle = color + context.fill() + } + QGCLabel { - id: _label - anchors.fill: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "white" - font.pointSize: small ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize + id: _label + x: Math.round((_width / 2) - (_singleChar ? (width / 2) : (ScreenTools.defaultFontPixelWidth / 2))) + y: Math.round((_width / 2) - (height / 2)) + color: "white" + font.pointSize: small ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize + + onWidthChanged: requestPaint() } MouseArea { anchors.fill: parent onClicked: parent.clicked() } - }