diff --git a/src/FlightMap/MapItems/MissionItemIndicator.qml b/src/FlightMap/MapItems/MissionItemIndicator.qml index 4618a4bd4428534c9c03f28baf13b2180cb9f96d..440f2a077c70323e2f057a64325f9a10dd9bd787 100644 --- a/src/FlightMap/MapItems/MissionItemIndicator.qml +++ b/src/FlightMap/MapItems/MissionItemIndicator.qml @@ -32,6 +32,7 @@ MapQuickItem { id: _label checked: _isCurrentItem label: missionItem ? missionItem.abbreviation : "" + index: missionItem ? missionItem.sequenceNumber : 0 gimbalYaw: missionItem.missionGimbalYaw vehicleYaw: missionItem.missionVehicleYaw showGimbalYaw: missionItem.showMissionGimbalYaw diff --git a/src/MissionEditor/FWLandingPatternMapVisual.qml b/src/MissionEditor/FWLandingPatternMapVisual.qml index 1434a9150466c53276527dfcca07be7d86e69f53..65ee93db75cff25439abec282f033b6ff910683a 100644 --- a/src/MissionEditor/FWLandingPatternMapVisual.qml +++ b/src/MissionEditor/FWLandingPatternMapVisual.qml @@ -204,6 +204,7 @@ Item { sourceItem: MissionItemIndexLabel { + index: _missionItem.sequenceNumber label: "Loiter" checked: _missionItem.isCurrentItem @@ -238,6 +239,7 @@ Item { sourceItem: MissionItemIndexLabel { + index: _missionItem.lastSequenceNumber label: "Land" checked: _missionItem.isCurrentItem diff --git a/src/MissionEditor/MissionItemEditor.qml b/src/MissionEditor/MissionItemEditor.qml index f586e7abd5aa6d5c731425cf24b9a393b472fc0d..17eed77ae0302640e6e598dfa7fdadd44c39b8d0 100644 --- a/src/MissionEditor/MissionItemEditor.qml +++ b/src/MissionEditor/MissionItemEditor.qml @@ -51,7 +51,7 @@ Rectangle { anchors.verticalCenter: commandPicker.verticalCenter anchors.leftMargin: _margin anchors.left: parent.left - text: missionItem.abbreviation + text: missionItem.abbreviation.charAt(0) color: _outerTextColor } diff --git a/src/MissionEditor/MissionItemStatus.qml b/src/MissionEditor/MissionItemStatus.qml index 98ffb61d85eb10be8bd35436344e85131b36deac..c42610368631f23601e3e3bda650047196a2e2d0 100644 --- a/src/MissionEditor/MissionItemStatus.qml +++ b/src/MissionEditor/MissionItemStatus.qml @@ -84,7 +84,8 @@ Rectangle { y: availableHeight - (availableHeight * object.altPercent) small: true checked: object.isCurrentItem - label: object.abbreviation + label: object.abbreviation.charAt(0) + index: object.sequenceNumber visible: object.relativeAltitude ? true : (object.homePosition || graphAbsolute) } } diff --git a/src/MissionEditor/MissionSettingsMapVisual.qml b/src/MissionEditor/MissionSettingsMapVisual.qml index 21fea1d8f973271227433c622faa3c3b71d2d6b3..52192def27ba4a989ba927a7eb84cdcd74f801a1 100644 --- a/src/MissionEditor/MissionSettingsMapVisual.qml +++ b/src/MissionEditor/MissionSettingsMapVisual.qml @@ -114,7 +114,7 @@ Item { model: _missionItem.childItems delegate: MissionItemIndexLabel { - label: object.abbreviation + label: object.abbreviation.length === 0 ? object.sequenceNumber : object.abbreviation.charAt(0) checked: object.isCurrentItem z: 2 specifiesCoordinate: false diff --git a/src/MissionEditor/SimpleItemMapVisual.qml b/src/MissionEditor/SimpleItemMapVisual.qml index e875006e0eb0e320d22c063233da93008481338e..d850c57b538c8955df2812552f57f652010fd1d1 100644 --- a/src/MissionEditor/SimpleItemMapVisual.qml +++ b/src/MissionEditor/SimpleItemMapVisual.qml @@ -116,7 +116,7 @@ Item { delegate: MissionItemIndexLabel { z: 2 - label: object.abbreviation + label: object.abbreviation.length === 0 ? object.sequenceNumber : object.abbreviation.charAt(0) checked: object.isCurrentItem specifiesCoordinate: false diff --git a/src/MissionEditor/SurveyMapVisual.qml b/src/MissionEditor/SurveyMapVisual.qml index 5abbef78d855dfa3c635a0d24f4afcaa3209e848..ed39613da100d2e952a30e3e73e1b6cdcfd9d088 100644 --- a/src/MissionEditor/SurveyMapVisual.qml +++ b/src/MissionEditor/SurveyMapVisual.qml @@ -150,6 +150,7 @@ Item { sourceItem: MissionItemIndexLabel { + index: _missionItem.sequenceNumber label: "Entry" checked: _missionItem.isCurrentItem @@ -171,6 +172,7 @@ Item { sourceItem: MissionItemIndexLabel { + index: _missionItem.lastSequenceNumber label: "Exit" checked: _missionItem.isCurrentItem diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index 480457ff9a2b87a59268b4848d14cf1b2b4663d5..e943d835ca52d751c24f8805397a41c1a59b2c1c 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -336,15 +336,15 @@ QString SimpleMissionItem::abbreviation() const switch(command()) { default: - return QString::number(sequenceNumber()); + return QString(); case MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF: - return QStringLiteral("T"); + return QStringLiteral("Takeoff"); case MavlinkQmlSingleton::MAV_CMD_NAV_LAND: - return QStringLiteral("L"); + return QStringLiteral("Land"); case MavlinkQmlSingleton::MAV_CMD_NAV_VTOL_TAKEOFF: - return QStringLiteral("VT"); + return QStringLiteral("VTOL Takeoff"); case MavlinkQmlSingleton::MAV_CMD_NAV_VTOL_LAND: - return QStringLiteral("VL"); + return QStringLiteral("VTOL Land"); } } diff --git a/src/MissionManager/VisualMissionItem.h b/src/MissionManager/VisualMissionItem.h index ecafd17cd11a57310342c25d96a6db2f8e1c6033..bb459d912d377020cd478e41a1aef117dc348261 100644 --- a/src/MissionManager/VisualMissionItem.h +++ b/src/MissionManager/VisualMissionItem.h @@ -56,6 +56,7 @@ public: Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) ///< Item is dirty and requires save/send Q_PROPERTY(bool isCurrentItem READ isCurrentItem WRITE setIsCurrentItem NOTIFY isCurrentItemChanged) Q_PROPERTY(int sequenceNumber READ sequenceNumber WRITE setSequenceNumber NOTIFY sequenceNumberChanged) + Q_PROPERTY(int lastSequenceNumber READ lastSequenceNumber NOTIFY lastSequenceNumberChanged) Q_PROPERTY(bool specifiesCoordinate READ specifiesCoordinate NOTIFY specifiesCoordinateChanged) ///< true: Item is associated with a coordinate position Q_PROPERTY(bool isStandaloneCoordinate READ isStandaloneCoordinate NOTIFY isStandaloneCoordinateChanged) ///< true: Waypoint line does not go through item Q_PROPERTY(bool specifiesAltitudeOnly READ specifiesAltitudeOnly NOTIFY specifiesAltitudeOnlyChanged) ///< true: Item has altitude only, no full coordinate diff --git a/src/QmlControls/MissionItemIndexLabel.qml b/src/QmlControls/MissionItemIndexLabel.qml index 990da44c0c077d251b52bef58e97b570383c02be..ad0051912c49876afc2694983f4a18d25cf2dd3d 100644 --- a/src/QmlControls/MissionItemIndexLabel.qml +++ b/src/QmlControls/MissionItemIndexLabel.qml @@ -7,27 +7,34 @@ import QGroundControl.Palette 1.0 Canvas { id: root + width: _width - height: width + height: _height signal clicked - property string label + property string label ///< Label to show to the side of the index indicator + property int index: 0 ///< Index to show in the indicator, 0 will show label instead property bool checked: false property bool small: false property var color: checked ? "green" : qgcPal.mapButtonHighlight - property real anchorPointX: _width / 2 - property real anchorPointY: _width / 2 + property real anchorPointX: _height / 2 + property real anchorPointY: _height / 2 property bool specifiesCoordinate: true property real gimbalYaw property real vehicleYaw property bool showGimbalYaw: false - property real _width: showGimbalYaw ? _gimbalYawRadius * 2 : _indicatorRadius * 2 - property bool _singleChar: _label.text.length <= 1 - property real _gimbalYawRadius: ScreenTools.defaultFontPixelHeight - property real _indicatorRadius: small ? (ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.25 / 2) : (ScreenTools.defaultFontPixelHeight * 0.66) - property real _gimbalRadians: degreesToRadians(vehicleYaw + gimbalYaw - 90) + property real _width: showGimbalYaw ? Math.max(_gimbalWidth, labelControl.visible ? labelControl.width : indicator.width) : (labelControl.visible ? labelControl.width : indicator.width) + property real _height: showGimbalYaw ? _gimbalYawWidth : (labelControl.visible ? labelControl.height : indicator.height) + property real _gimbalYawRadius: ScreenTools.defaultFontPixelHeight + property real _gimbalYawWidth: _gimbalYawRadius * 2 + property real _indicatorRadius: small ? (ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.25 / 2) : (ScreenTools.defaultFontPixelHeight * 0.66) + property real _gimbalRadians: degreesToRadians(vehicleYaw + gimbalYaw - 90) + property real _labelMargin: 2 + property real _labelRadius: _indicatorRadius + _labelMargin + property string _label: index === 0 ? "" : label + property string _index: index === 0 ? label : index onColorChanged: requestPaint() onShowGimbalYawChanged: requestPaint() @@ -54,63 +61,62 @@ Canvas { } } - function paintSingleCoordinate(context) { - context.beginPath() - context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, Math.PI / 8); - context.lineTo(_width / 2, _width * 1.5) - context.closePath() - context.fillStyle = color - context.fill() - } - - function paintSingleNoCoordinate(context) { - context.save() - context.beginPath() - context.translate(anchorPointX, anchorPointY) - context.arc(0, 0, _indicatorRadius, Math.PI * 2, 0); - context.closePath() - context.fillStyle = color - context.fill() - context.restore() - } - - 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.clearRect(0, 0, width, height) paintGimbalYaw(context) - /* - if (_singleChar) { - if (specifiesCoordinate) { - paintSingleCoordinate(context) - } else { - paintSingleNoCoordinate(context) - } - } else { - paintMultipleCoordinate(context) - } - */ - paintSingleNoCoordinate(context) } + Rectangle { + id: labelControl + anchors.leftMargin: -_labelMargin + anchors.topMargin: -_labelMargin + anchors.left: indicator.left + anchors.top: indicator.top + height: _labelRadius * 2 + width: labelControlLabel.contentWidth + (_labelMargin * 3) + indicator.width + color: "white" + opacity: 0.5 + radius: _labelRadius + visible: _label.length !== 0 + } + + QGCLabel { - id: _label - anchors.centerIn: parent - width: _indicatorRadius * 2 - height: width - horizontalAlignment: Text.AlignHCenter + id: labelControlLabel + anchors.leftMargin: indicator.width + _labelMargin + anchors.left: labelControl.left + anchors.rightMargin: _labelMargin + anchors.right: labelControl.right + anchors.top: labelControl.top + anchors.bottom: labelControl.bottom verticalAlignment: Text.AlignVCenter color: "white" font.pointSize: ScreenTools.defaultFontPointSize fontSizeMode: Text.HorizontalFit - text: label + text: _label + } + + Rectangle { + id: indicator + anchors.horizontalCenter: parent.left + anchors.verticalCenter: parent.top + anchors.horizontalCenterOffset: anchorPointX + anchors.verticalCenterOffset: anchorPointY + width: _indicatorRadius * 2 + height: width + color: root.color + radius: _indicatorRadius + + QGCLabel { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "white" + font.pointSize: ScreenTools.defaultFontPointSize + fontSizeMode: Text.HorizontalFit + text: _index + } } QGCMouseArea {