diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index 9eaf51791767864560dd9d9774a451f863333a0f..85db4d30166ddbb9ec83bd00dc9c58b47937e603 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -59,18 +59,6 @@ FlightMap { Component.onCompleted: start(false /* editMode */) } - // Home position - MissionItemIndicator { - label: "H" - coordinate: (_activeVehicle && _activeVehicle.homePositionAvailable) ? _activeVehicle.homePosition : QtPositioning.coordinate(0, 0) - visible: { - if(!_mainIsMap) - return false; - return _activeVehicle ? _activeVehicle.homePositionAvailable : false - } - z: QGroundControl.zOrderMapItems - } - // Add trajectory points to the map MapItemView { model: _mainIsMap ? multiVehicleManager.activeVehicle ? multiVehicleManager.activeVehicle.trajectoryPoints : 0 : 0 diff --git a/src/FlightMap/MapItems/MissionItemIndicator.qml b/src/FlightMap/MapItems/MissionItemIndicator.qml index d67bdbeb992431a778c1c968bf646b4b3752e077..90b7046b5ee1684a7d298b32ffc95aade9db30c1 100644 --- a/src/FlightMap/MapItems/MissionItemIndicator.qml +++ b/src/FlightMap/MapItems/MissionItemIndicator.qml @@ -32,18 +32,37 @@ import QGroundControl.Vehicle 1.0 MapQuickItem { id: _item - property alias label: _label.label - property alias isCurrentItem: _label.isCurrentItem + property var missionItem signal clicked anchorPoint.x: sourceItem.width / 2 anchorPoint.y: sourceItem.height / 2 + Connections { + target: missionItem + + onCoordinateChanged: recalcLabel() + onRelativeAltitudeChanged: recalcLabel() + } + + Component.onCompleted: recalcLabel() + + function recalcLabel() { + var label = Math.round(object.coordinate.altitude) + if (!object.relativeAltitude) { + label = "=" + label + } + if (object.homePosition) { + label = "H" + label + } + _label.label = label + } + sourceItem: MissionItemIndexLabel { - id: _label - - onClicked: _item.clicked() + id: _label + isCurrentItem: missionItem.isCurrentItem + onClicked: _item.clicked() } } diff --git a/src/FlightMap/MapItems/MissionItemView.qml b/src/FlightMap/MapItems/MissionItemView.qml index 6ef0e94b23ee8d70d58d6250899a5e860ace1632..24c4b58951fc889d70090f7f8b31e42b68a1462b 100644 --- a/src/FlightMap/MapItems/MissionItemView.qml +++ b/src/FlightMap/MapItems/MissionItemView.qml @@ -39,11 +39,10 @@ MapItemView { delegate: MissionItemIndicator { id: itemIndicator - label: object.homePosition ? "H" : object.sequenceNumber - isCurrentItem: object.isCurrentItem coordinate: object.coordinate visible: object.specifiesCoordinate && (!object.homePosition || object.homePositionValid) z: QGroundControl.zOrderMapItems + missionItem: object onClicked: setCurrentItem(object.sequenceNumber) @@ -71,6 +70,9 @@ MapItemView { } } + /* + Turned off for now + // These are the non-coordinate child mission items attached to this item Row { anchors.top: parent.top @@ -88,5 +90,6 @@ MapItemView { } } } + */ } } diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index 06d959aed0e6e83ec2a6c3d03b4b1c2961b270fd..6eb0be70fa801c625c4a16ff0e12a85d541d8ba6 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -313,11 +313,10 @@ QGCView { MissionItemIndicator { id: itemIndicator - label: object.homePosition ? "H" : object.sequenceNumber - isCurrentItem: object.isCurrentItem coordinate: object.coordinate visible: object.specifiesCoordinate && (!object.homePosition || object.homePositionValid) z: QGroundControl.zOrderMapItems + missionItem: object onClicked: setCurrentItem(object.sequenceNumber) @@ -348,6 +347,9 @@ QGCView { onCommandChanged: updateItemIndicator() } + /* + Disabled for now: Not sure if they will come back + // These are the non-coordinate child mission items attached to this item Row { anchors.top: parent.top @@ -365,6 +367,7 @@ QGCView { } } } + */ } } @@ -414,282 +417,6 @@ QGCView { } // ListView } // Item - Mission Item editor - /* - Home Position Manager temporarily disbled till more work is done on it - - // Home Position Manager - Rectangle { - id: homePositionManager - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.right: parent.right - width: _rightPanelWidth - visible: homePositionManagerButton.checked - color: qgcPal.window - opacity: _rightPanelOpacity - z: QGroundControl.zOrderTopMost - - Column { - anchors.margins: _margin - anchors.fill: parent - visible: !liveHomePositionAvailable - - QGCLabel { - font.pixelSize: ScreenTools.mediumFontPixelSize - text: "Flying Field Manager" - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight - } - - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: "This is used to save locations associated with your flying field for use while creating missions with no vehicle connection." - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight - } - - QGCLabel { - text: "Select field to use:" - } - - QGCComboBox { - id: homePosCombo - width: parent.width - textRole: "text" - model: _homePositionManager.homePositions - - onCurrentIndexChanged: { - if (currentIndex != -1) { - var homePos = _homePositionManager.homePositions.get(currentIndex) - _homePositionName = homePos.name - offlineHomePosition = homePos.coordinate - editorMap.latitude = offlineHomePosition.latitude - editorMap.longitude = offlineHomePosition.longitude - } - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight - } - - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: "To add a new flying field, click on the Map to set the position. " + - "Then give it a new name and click Add/Update. " + - "To change the current field position, click on the Map to set the new position. " + - "Then click Add/Update without changing the name." - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: nameField.height - - QGCLabel { - anchors.baseline: nameField.baseline - text: "Name:" - } - - QGCTextField { - id: nameField - anchors.right: parent.right - width: _editFieldWidth - text: _homePositionName - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: offlineLatitudeField.height - - QGCLabel { - anchors.baseline: offlineLatitudeField.baseline - text: "Lat:" - } - - QGCTextField { - id: offlineLatitudeField - anchors.right: parent.right - width: _editFieldWidth - text: offlineHomePosition.latitude - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: offlineLongitudeField.height - - QGCLabel { - anchors.baseline: offlineLongitudeField.baseline - text: "Lon:" - } - - QGCTextField { - id: offlineLongitudeField - anchors.right: parent.right - width: _editFieldWidth - text: offlineHomePosition.longitude - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: offlineAltitudeField.height - - QGCLabel { - anchors.baseline: offlineAltitudeField.baseline - text: "Alt:" - } - - QGCTextField { - id: offlineAltitudeField - anchors.right: parent.right - width: _editFieldWidth - text: offlineHomePosition.altitude - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight - } - - Row { - spacing: ScreenTools.defaultFontPixelWidth - - QGCButton { - text: "Add/Update" - - onClicked: { - offlineHomePosition = QtPositioning.coordinate(latitudeField.text, longitudeField.text, altitudeField.text) - _homePositionManager.updateHomePosition(nameField.text, offlineHomePosition) - homePosCombo.currentIndex = homePosCombo.find(nameField.text) - } - } - - QGCButton { - text: "Delete" - - onClicked: { - homePosCombo.currentIndex = -1 - _homePositionManager.deleteHomePosition(nameField.text) - homePosCombo.currentIndex = 0 - var homePos = _homePositionManager.homePositions.get(0) - _homePositionName = homePos.name - offlineHomePosition = homePos.coordinate - } - } - } - } // Column - Offline view - - Column { - anchors.margins: _margin - anchors.fill: parent - visible: liveHomePositionAvailable - - QGCLabel { - font.pixelSize: ScreenTools.mediumFontPixelSize - text: "Vehicle Home Position" - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight - } - - Item { - width: parent.width - height: liveLatitudeField.height - - QGCLabel { - anchors.baseline: liveLatitudeField.baseline - text: "Lat:" - } - - QGCLabel { - id: liveLatitudeField - anchors.right: parent.right - width: _editFieldWidth - text: liveHomePosition.latitude - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: liveLongitudeField.height - - QGCLabel { - anchors.baseline: liveLongitudeField.baseline - text: "Lon:" - } - - QGCLabel { - id: liveLongitudeField - anchors.right: parent.right - width: _editFieldWidth - text: liveHomePosition.longitude - } - } - - Item { - width: 10 - height: ScreenTools.defaultFontPixelHeight / 3 - } - - Item { - width: parent.width - height: liveAltitudeField.height - - QGCLabel { - anchors.baseline: liveAltitudeField.baseline - text: "Alt:" - } - - QGCLabel { - id: liveAltitudeField - anchors.right: parent.right - width: _editFieldWidth - text: liveHomePosition.altitude - } - } - } // Column - Online view - } // Item - Home Position Manager - */ - //-- Dismiss Drop Down (if any) MouseArea { anchors.fill: parent diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 13cea6fa0055314a8d045533303b8bc11f93da50..fd913560317b2b4345bcd932f033fa38e8ac7165 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -431,6 +431,10 @@ void MissionController::_initAllMissionItems(void) // Add the home position item to the front homeItem = new MissionItem(this); homeItem->setHomePositionSpecialCase(true); + if (_activeVehicle) { + homeItem->setCoordinate(_activeVehicle->homePosition()); + homeItem->setHomePositionValid(_activeVehicle->homePositionAvailable()); + } homeItem->setCommand(MavlinkQmlSingleton::MAV_CMD_NAV_LAST); homeItem->setFrame(MAV_FRAME_GLOBAL_RELATIVE_ALT); homeItem->setSequenceNumber(0); @@ -531,7 +535,7 @@ void MissionController::_setupActiveVehicle(Vehicle* activeVehicle, bool forceLo MissionManager* missionManager = activeVehicle->missionManager(); connect(missionManager, &MissionManager::newMissionItemsAvailable, this, &MissionController::_newMissionItemsAvailableFromVehicle); - connect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged); + connect(missionManager, &MissionManager::inProgressChanged, this, &MissionController::_inProgressChanged); connect(_activeVehicle, &Vehicle::homePositionAvailableChanged, this, &MissionController::_activeVehicleHomePositionAvailableChanged); connect(_activeVehicle, &Vehicle::homePositionChanged, this, &MissionController::_activeVehicleHomePositionChanged); @@ -548,6 +552,7 @@ void MissionController::_activeVehicleHomePositionAvailableChanged(bool homePosi _liveHomePositionAvailable = homePositionAvailable; qobject_cast(_missionItems->get(0))->setHomePositionValid(homePositionAvailable); emit liveHomePositionAvailableChanged(_liveHomePositionAvailable); + _recalcWaypointLines(); } void MissionController::_activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition) @@ -555,6 +560,7 @@ void MissionController::_activeVehicleHomePositionChanged(const QGeoCoordinate& _liveHomePosition = homePosition; qobject_cast(_missionItems->get(0))->setCoordinate(_liveHomePosition); emit liveHomePositionChanged(_liveHomePosition); + _recalcWaypointLines(); } void MissionController::deleteCurrentMissionItem(void) diff --git a/src/MissionManager/MissionItem.h b/src/MissionManager/MissionItem.h index 078a9789384f37298070dbcc3f533cf47c821f98..923054229b7df49b47aa31a85d9465eb201e524c 100644 --- a/src/MissionManager/MissionItem.h +++ b/src/MissionManager/MissionItem.h @@ -82,6 +82,7 @@ public: Q_PROPERTY(bool homePositionValid READ homePositionValid WRITE setHomePositionValid NOTIFY homePositionValidChanged) ///< true: Home position should be shown Q_PROPERTY(bool isCurrentItem READ isCurrentItem WRITE setIsCurrentItem NOTIFY isCurrentItemChanged) Q_PROPERTY(bool rawEdit READ rawEdit WRITE setRawEdit NOTIFY rawEditChanged) ///< true: raw item editing with all params + Q_PROPERTY(bool relativeAltitude READ relativeAltitude NOTIFY frameChanged) Q_PROPERTY(int sequenceNumber READ sequenceNumber WRITE setSequenceNumber NOTIFY sequenceNumberChanged) Q_PROPERTY(bool standaloneCoordinate READ standaloneCoordinate NOTIFY commandChanged) Q_PROPERTY(bool specifiesCoordinate READ specifiesCoordinate NOTIFY commandChanged) diff --git a/src/QmlControls/MissionItemEditor.qml b/src/QmlControls/MissionItemEditor.qml index 82f54eb450fed8c2ab998f2fa95a7a2152e6141d..41b989e0fcf5c4fa40fce3be30d11899c401ddf9 100644 --- a/src/QmlControls/MissionItemEditor.qml +++ b/src/QmlControls/MissionItemEditor.qml @@ -49,11 +49,11 @@ Rectangle { onClicked: _root.clicked() } - MissionItemIndexLabel { + QGCLabel { id: label anchors.verticalCenter: commandPicker.verticalCenter - isCurrentItem: missionItem.isCurrentItem - label: missionItem.sequenceNumber == 0 ? "H" : missionItem.sequenceNumber + color: missionItem.isCurrentItem ? qgcPal.buttonHighlightText : qgcPal.buttonText + text: missionItem.sequenceNumber == 0 ? "H" : missionItem.sequenceNumber } Image { @@ -92,18 +92,12 @@ Rectangle { onClicked: qgcView.showDialog(commandDialog, "Select Mission Command", 40, StandardButton.Cancel) } - Rectangle { - anchors.fill: commandPicker - color: qgcPal.button - visible: missionItem.sequenceNumber == 0 || !missionItem.isCurrentItem - - QGCLabel { - anchors.leftMargin: ScreenTools.defaultFontPixelWidth - anchors.fill: parent - verticalAlignment: Text.AlignVCenter - text: missionItem.sequenceNumber == 0 ? "Home" : missionItem.commandName - color: qgcPal.buttonText - } + QGCLabel { + anchors.fill: commandPicker + visible: missionItem.sequenceNumber == 0 || !missionItem.isCurrentItem + verticalAlignment: Text.AlignVCenter + text: missionItem.sequenceNumber == 0 ? "Home" : missionItem.commandName + color: qgcPal.buttonText } Rectangle { diff --git a/src/QmlControls/MissionItemIndexLabel.qml b/src/QmlControls/MissionItemIndexLabel.qml index dcbb577ad45ed9aae282c4a406b655d60333bc1b..366467eeb4850f1787e506993eb6e2f335390ca6 100644 --- a/src/QmlControls/MissionItemIndexLabel.qml +++ b/src/QmlControls/MissionItemIndexLabel.qml @@ -11,27 +11,28 @@ Rectangle { signal clicked + readonly property real _margin: ScreenTools.defaultFontPixelWidth / 4 + QGCPalette { id: qgcPal } - width: ScreenTools.mediumFontPixelSize * 1.5 - height: width - radius: width / 2 - border.width: 2 + width: _label.width + (_margin * 2) + height: _label.height + (_margin * 2) + radius: _margin + border.width: 1 border.color: "white" color: isCurrentItem ? "green" : qgcPal.mapButtonHighlight MouseArea { - anchors.fill: parent - - onClicked: parent.clicked() + anchors.fill: parent + onClicked: parent.clicked() } QGCLabel { id: _label - anchors.fill: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter + anchors.margins: _margin + anchors.left: parent.left + anchors.top: parent.top color: "white" - font.pixelSize: ScreenTools.mediumFontPixelSize + font.pixelSize: ScreenTools.defaultFontPixelSize } }