From 789f35e99a68fbc20f81351a2363f74338b00f8c Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 11 Mar 2026 13:36:17 -0700 Subject: [PATCH 1/4] Rename home position label from 'Launch' to 'Home' --- src/FlightMap/Widgets/CenterMapDropButton.qml | 2 +- src/FlightMap/Widgets/CenterMapDropPanel.qml | 2 +- src/MissionManager/MissionSettingsItem.cc | 2 +- src/PlanView/TakeoffItemMapVisual.qml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/FlightMap/Widgets/CenterMapDropButton.qml b/src/FlightMap/Widgets/CenterMapDropButton.qml index d8fd38f8f8f2..eb3ad652a0c0 100644 --- a/src/FlightMap/Widgets/CenterMapDropButton.qml +++ b/src/FlightMap/Widgets/CenterMapDropButton.qml @@ -175,7 +175,7 @@ DropButton { } QGCButton { - text: qsTr("Launch") + text: qsTr("Home") Layout.fillWidth: true enabled: !followVehicleCheckBox.checked diff --git a/src/FlightMap/Widgets/CenterMapDropPanel.qml b/src/FlightMap/Widgets/CenterMapDropPanel.qml index fe5528f3975f..372ce85c4ee2 100644 --- a/src/FlightMap/Widgets/CenterMapDropPanel.qml +++ b/src/FlightMap/Widgets/CenterMapDropPanel.qml @@ -40,7 +40,7 @@ ColumnLayout { } QGCButton { - text: qsTr("Launch") + text: qsTr("Home") Layout.fillWidth: true onClicked: { diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc index 1586c6c5bfac..02ba471867db 100644 --- a/src/MissionManager/MissionSettingsItem.cc +++ b/src/MissionManager/MissionSettingsItem.cc @@ -234,7 +234,7 @@ void MissionSettingsItem::_setHomeAltFromTerrain(double terrainAltitude) QString MissionSettingsItem::abbreviation(void) const { - return _flyView ? tr("L") : tr("Launch"); + return _flyView ? tr("H") : tr("Home"); } void MissionSettingsItem::_updateFlyViewHomePosition(const QGeoCoordinate& homePosition) diff --git a/src/PlanView/TakeoffItemMapVisual.qml b/src/PlanView/TakeoffItemMapVisual.qml index f175d3121004..20985a3758a7 100644 --- a/src/PlanView/TakeoffItemMapVisual.qml +++ b/src/PlanView/TakeoffItemMapVisual.qml @@ -118,7 +118,7 @@ Item { sourceItem: MissionItemIndexLabel { checked: _missionItem.isCurrentItem - label: qsTr("Launch") + label: qsTr("Home") highlightSelected: true onClicked: _root.clicked(_missionItem.sequenceNumber) visible: _root.interactive From dd27403ffc113a2d3ec0e9e2e860c8691cb4819b Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 11 Mar 2026 13:36:41 -0700 Subject: [PATCH 2/4] Rename AltitudeMode to AltitudeFrame throughout codebase Systematically rename the AltMode enum and all related types, properties, methods, signals, and QML components to use AltitudeFrame terminology, which better reflects that these represent MAVLink altitude reference frames rather than abstract modes. Key changes: - Enum: AltMode -> AltitudeFrame, values like AltModeMixed -> AltitudeFrameMixed - C++ properties/signals: altitudeMode -> altitudeFrame throughout - Methods: altitudeModeExtraUnits -> altitudeFrameExtraUnits, etc. - QML files: AltModeCombo -> AltFrameCombo, AltModeDialog -> AltFrameDialog - Pass currentAltFrame to AltFrameDialog open calls - Fix _missionItem -> missionItem in TransectStyleComplexItemTerrainFollow - Fix _amslAltAboveTerrainFact loading from wrong JSON key - Remove unused SettingsFixture::setAltitudeFrame no-op - JSON keys preserved for backward compatibility --- docs/en/qgc-user-guide/plan_view/plan_view.md | 2 +- .../FactControls/AltitudeFactTextField.qml | 12 +- src/MissionManager/CameraCalc.cc | 20 ++-- src/MissionManager/CameraCalc.h | 10 +- src/MissionManager/MissionController.cc | 68 +++++------ src/MissionManager/MissionController.h | 16 +-- src/MissionManager/SimpleMissionItem.cc | 104 ++++++++--------- src/MissionManager/SimpleMissionItem.h | 16 +-- src/MissionManager/SurveyComplexItem.cc | 2 +- src/MissionManager/TakeoffMissionItem.cc | 2 +- .../TransectStyleComplexItem.cc | 110 +++++++++--------- src/PlanView/CameraCalcGrid.qml | 4 +- src/PlanView/FWLandingPatternEditor.qml | 6 +- src/PlanView/MissionDefaultsEditor.qml | 36 +++--- src/PlanView/SimpleItemEditor.qml | 22 ++-- src/PlanView/StructureScanEditor.qml | 4 +- src/PlanView/SurveyItemEditor.qml | 4 +- .../TransectStyleComplexItemTerrainFollow.qml | 22 ++-- src/PlanView/VTOLLandingPatternEditor.qml | 6 +- src/QmlControls/AltFrameCombo.qml | 60 ++++++++++ .../{AltModeDialog.qml => AltFrameDialog.qml} | 59 ++++------ src/QmlControls/AltModeCombo.qml | 68 ----------- src/QmlControls/CMakeLists.txt | 4 +- src/QmlControls/QGroundControlQmlGlobal.cc | 54 +++++---- src/QmlControls/QGroundControlQmlGlobal.h | 22 ++-- test/MissionManager/CameraCalcTest.cc | 6 +- test/MissionManager/MissionControllerTest.cc | 26 ++--- test/MissionManager/MissionControllerTest.h | 2 +- test/MissionManager/SimpleMissionItemTest.cc | 32 ++--- .../Fixtures/RAIIFixtures.cc | 5 - .../UnitTestFramework/Fixtures/RAIIFixtures.h | 3 - 31 files changed, 388 insertions(+), 419 deletions(-) create mode 100644 src/QmlControls/AltFrameCombo.qml rename src/QmlControls/{AltModeDialog.qml => AltFrameDialog.qml} (52%) delete mode 100644 src/QmlControls/AltModeCombo.qml diff --git a/docs/en/qgc-user-guide/plan_view/plan_view.md b/docs/en/qgc-user-guide/plan_view/plan_view.md index 5c32aae14b74..06db598c7dcb 100644 --- a/docs/en/qgc-user-guide/plan_view/plan_view.md +++ b/docs/en/qgc-user-guide/plan_view/plan_view.md @@ -121,7 +121,7 @@ The Plan Info section contains general plan-level settings: The Defaults section sets plan-wide values that apply to new mission items: -- **Altitude Mode** — Select the altitude reference frame for waypoints. +- **Altitude Frame** — Select the altitude reference frame for waypoints. - **Waypoints Altitude** — The default altitude for the first mission item added (subsequent items take their initial altitude from the previous item). Changing this value when items already exist will prompt to update all items to the new altitude. - **Flight Speed** — Set a flight speed that differs from the default mission speed. - **Vehicle Speeds** — Cruise speed (fixed-wing) and/or hover speed (multi-rotor/VTOL), used for estimating mission time. diff --git a/src/FactSystem/FactControls/AltitudeFactTextField.qml b/src/FactSystem/FactControls/AltitudeFactTextField.qml index b6796650919f..8015855aceae 100644 --- a/src/FactSystem/FactControls/AltitudeFactTextField.qml +++ b/src/FactSystem/FactControls/AltitudeFactTextField.qml @@ -7,17 +7,17 @@ import QGroundControl.Controls FactTextField { unitsLabel: fact ? fact.units : "" - extraUnitsLabel: fact ? _altitudeModeExtraUnits : "" + extraUnitsLabel: fact ? qsTr("%1").arg(_altitudeFrameExtraUnits) : "" showUnits: true showHelp: true - property int altitudeMode: QGroundControl.AltitudeModeNone + property int altitudeFrame: QGroundControl.AltitudeFrameNone - property string _altitudeModeExtraUnits + property string _altitudeFrameExtraUnits - onAltitudeModeChanged: updateAltitudeModeExtraUnits() + onAltitudeFrameChanged: updateAltitudeFrameExtraUnits() - function updateAltitudeModeExtraUnits() { - _altitudeModeExtraUnits = QGroundControl.altitudeModeExtraUnits(altitudeMode); + function updateAltitudeFrameExtraUnits() { + _altitudeFrameExtraUnits = QGroundControl.altitudeFrameExtraUnits(altitudeFrame); } } diff --git a/src/MissionManager/CameraCalc.cc b/src/MissionManager/CameraCalc.cc index 17fe3c72bf57..78522a0b238f 100644 --- a/src/MissionManager/CameraCalc.cc +++ b/src/MissionManager/CameraCalc.cc @@ -8,7 +8,7 @@ CameraCalc::CameraCalc(PlanMasterController* masterController, const QString& settingsGroup, QObject* parent) : CameraSpec (settingsGroup, parent) - , _distanceMode (masterController->missionController()->globalAltitudeModeDefault()) + , _distanceMode (masterController->missionController()->globalAltitudeFrameDefault()) , _knownCameraList (masterController->controllerVehicle()->staticCameraList()) , _metaDataMap (FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/CameraCalc.FactMetaData.json"), this)) , _cameraNameFact (settingsGroup, _metaDataMap[cameraNameName]) @@ -110,9 +110,9 @@ void CameraCalc::_cameraNameChanged(void) } _recalcTriggerDistance(); - if (!isManualCamera() && distanceMode() == QGroundControlQmlGlobal::AltitudeModeAbsolute) { + if (!isManualCamera() && distanceMode() == QGroundControlQmlGlobal::AltitudeFrameAbsolute) { // Manual grids support absolute alts whereas nothing else does. Make sure we are not left in absolute - setDistanceMode(QGroundControlQmlGlobal::AltitudeModeRelative); + setDistanceMode(QGroundControlQmlGlobal::AltitudeFrameRelative); } } @@ -203,11 +203,11 @@ bool CameraCalc::load(const QJsonObject& originalJson, bool deprecatedFollowTerr if (version == 1) { // Version 1->2 differences: // - _jsonDistanceToSurfaceRelativeKeyDeprecated changed to distanceMode - // - deprecatedFollowTerrain value was loaded from upper level callers and represents AltitudeModeCalcAboveTerrain. AtitudeModeTerrainFrame was not supported yet. + // - deprecatedFollowTerrain value was loaded from upper level callers and represents AltitudeFrameCalcAboveTerrain. AltitudeFrameTerrain was not supported yet. if (deprecatedFollowTerrain) { - json[distanceModeName] = QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain; + json[distanceModeName] = QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain; } else { - json[distanceModeName] = json[_jsonDistanceToSurfaceRelativeKeyDeprecated].toBool() ? QGroundControlQmlGlobal::AltitudeModeRelative : QGroundControlQmlGlobal::AltitudeModeAbsolute; + json[distanceModeName] = json[_jsonDistanceToSurfaceRelativeKeyDeprecated].toBool() ? QGroundControlQmlGlobal::AltitudeFrameRelative : QGroundControlQmlGlobal::AltitudeFrameAbsolute; } json.remove(_jsonDistanceToSurfaceRelativeKeyDeprecated); version = 2; @@ -235,7 +235,7 @@ bool CameraCalc::load(const QJsonObject& originalJson, bool deprecatedFollowTerr QString canonicalCameraName = _validCanonicalCameraName(json[cameraNameName].toString()); _cameraNameFact.setRawValue(canonicalCameraName); - setDistanceMode(static_cast(json[distanceModeName].toInt())); + setDistanceMode(static_cast(json[distanceModeName].toInt())); _adjustedFootprintSideFact.setRawValue (json[adjustedFootprintSideName].toDouble()); _adjustedFootprintFrontalFact.setRawValue (json[adjustedFootprintFrontalName].toDouble()); @@ -293,10 +293,10 @@ QString CameraCalc::xlatManualCameraName(void) return tr("Manual (no camera specs)"); } -void CameraCalc::setDistanceMode(QGroundControlQmlGlobal::AltMode altMode) +void CameraCalc::setDistanceMode(QGroundControlQmlGlobal::AltitudeFrame altFrame) { - if (altMode != _distanceMode) { - _distanceMode = altMode; + if (altFrame != _distanceMode) { + _distanceMode = altFrame; emit distanceModeChanged(_distanceMode); } } diff --git a/src/MissionManager/CameraCalc.h b/src/MissionManager/CameraCalc.h index 2308e3177f13..054297ceef4c 100644 --- a/src/MissionManager/CameraCalc.h +++ b/src/MissionManager/CameraCalc.h @@ -38,7 +38,7 @@ class CameraCalc : public CameraSpec // grid altitude mode - distanceMode // trigger distance - adjustedFootprintFrontal // transect spacing - adjustedFootprintSide - Q_PROPERTY(QGroundControlQmlGlobal::AltMode distanceMode READ distanceMode WRITE setDistanceMode NOTIFY distanceModeChanged) + Q_PROPERTY(QGroundControlQmlGlobal::AltitudeFrame distanceMode READ distanceMode WRITE setDistanceMode NOTIFY distanceModeChanged) // The following values are calculated from the camera properties Q_PROPERTY(double imageFootprintSide READ imageFootprintSide NOTIFY imageFootprintSideChanged) ///< Size of image size side in meters @@ -69,9 +69,9 @@ class CameraCalc : public CameraSpec bool isCustomCamera (void) const { return _cameraNameFact.rawValue().toString() == canonicalCustomCameraName(); } double imageFootprintSide (void) const { return _imageFootprintSide; } double imageFootprintFrontal (void) const { return _imageFootprintFrontal; } - QGroundControlQmlGlobal::AltMode distanceMode(void) const { return _distanceMode; } + QGroundControlQmlGlobal::AltitudeFrame distanceMode(void) const { return _distanceMode; } - void setDistanceMode (QGroundControlQmlGlobal::AltMode altMode); + void setDistanceMode (QGroundControlQmlGlobal::AltitudeFrame altFrame); void setCameraBrand (const QString& cameraBrand); void setCameraModel (const QString& cameraModel); @@ -93,7 +93,7 @@ class CameraCalc : public CameraSpec signals: void imageFootprintSideChanged (double imageFootprintSide); void imageFootprintFrontalChanged (double imageFootprintFrontal); - void distanceModeChanged (int altMode); + void distanceModeChanged (int altFrame); void isManualCameraChanged (void); void isCustomCameraChanged (void); void cameraBrandChanged (void); @@ -116,7 +116,7 @@ private slots: QString _cameraModel; QStringList _cameraBrandList; QStringList _cameraModelList; - QGroundControlQmlGlobal::AltMode _distanceMode = QGroundControlQmlGlobal::AltitudeModeRelative; + QGroundControlQmlGlobal::AltitudeFrame _distanceMode = QGroundControlQmlGlobal::AltitudeFrameRelative; double _imageFootprintSide = 0; double _imageFootprintFrontal = 0; QVariantList _knownCameraList; diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index ea0bb2a467b6..1f372bf3b21c 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -194,8 +194,8 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque _visualItems = newControllerMissionItems; _settingsItem = settingsItem; - // We set Altitude mode to mixed, otherwise if we need a non relative altitude frame we won't be able to change it - setGlobalAltitudeMode(weHaveItemsFromVehicle ? QGroundControlQmlGlobal::AltitudeModeMixed : QGroundControlQmlGlobal::AltitudeModeRelative); + // We set Altitude frame to mixed, otherwise if we need a non relative altitude frame we won't be able to change it + setGlobalAltitudeFrame(weHaveItemsFromVehicle ? QGroundControlQmlGlobal::AltitudeFrameMixed : QGroundControlQmlGlobal::AltitudeFrameRelative); MissionController::_scanForAdditionalSettings(_visualItems, _masterController); @@ -315,13 +315,13 @@ VisualMissionItem* MissionController::_insertSimpleMissionItemWorker(QGeoCoordin if (newItem->specifiesAltitude()) { if (!MissionCommandTree::instance()->isLandCommand(command)) { double prevAltitude; - QGroundControlQmlGlobal::AltMode prevAltMode; + QGroundControlQmlGlobal::AltitudeFrame prevAltFrame; - if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltMode)) { + if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltFrame)) { newItem->altitude()->setRawValue(prevAltitude); - if (globalAltitudeMode() == QGroundControlQmlGlobal::AltitudeModeMixed) { - // We are in mixed altitude modes, so copy from previous. Otherwise alt mode will be set from global setting. - newItem->setAltitudeMode(static_cast(prevAltMode)); + if (globalAltitudeFrame() == QGroundControlQmlGlobal::AltitudeFrameMixed) { + // We are in mixed altitude frames, so copy from previous. Otherwise altitude frame will be set from global setting. + newItem->setAltitudeFrame(static_cast(prevAltFrame)); } } } @@ -359,11 +359,11 @@ VisualMissionItem* MissionController::insertTakeoffItem(QGeoCoordinate /*coordin if (_takeoffMissionItem->specifiesAltitude()) { double prevAltitude; - QGroundControlQmlGlobal::AltMode prevAltMode; + QGroundControlQmlGlobal::AltitudeFrame prevAltFrame; - if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltMode)) { + if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltFrame)) { _takeoffMissionItem->altitude()->setRawValue(prevAltitude); - _takeoffMissionItem->setAltitudeMode(static_cast(prevAltMode)); + _takeoffMissionItem->setAltitudeFrame(static_cast(prevAltFrame)); } } if (visualItemIndex == -1) { @@ -437,11 +437,11 @@ VisualMissionItem* MissionController::insertComplexMissionItem(QString itemName, newItem->setCoordinate(mapCenterCoordinate); double prevAltitude; - QGroundControlQmlGlobal::AltMode prevAltMode; - if (globalAltitudeMode() == QGroundControlQmlGlobal::AltitudeModeMixed) { - // We are in mixed altitude modes, so copy from previous. Otherwise alt mode will be set from global setting in constructor. - if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltMode)) { - qobject_cast(newItem)->cameraCalc()->setDistanceMode(prevAltMode); + QGroundControlQmlGlobal::AltitudeFrame prevAltFrame; + if (globalAltitudeFrame() == QGroundControlQmlGlobal::AltitudeFrameMixed) { + // We are in mixed altitude frames, so copy from previous. Otherwise alt mode will be set from global setting in constructor. + if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltFrame)) { + qobject_cast(newItem)->cameraCalc()->setDistanceMode(prevAltFrame); } } } else if (itemName == FixedWingLandingComplexItem::name) { @@ -636,7 +636,7 @@ bool MissionController::_loadJsonMissionFileV1(const QJsonObject& json, QmlObjec return false; } - setGlobalAltitudeMode(QGroundControlQmlGlobal::AltitudeModeMixed); + setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrameMixed); // Read complex items QList surveyItems; @@ -741,7 +741,7 @@ bool MissionController::_loadJsonMissionFileV2(const QJsonObject& json, QmlObjec return false; } - setGlobalAltitudeMode(QGroundControlQmlGlobal::AltitudeModeMixed); + setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrameMixed); qCDebug(MissionControllerLog) << "MissionController::_loadJsonMissionFileV2 itemCount:" << json[_jsonItemsKey].toArray().count(); @@ -774,7 +774,7 @@ bool MissionController::_loadJsonMissionFileV2(const QJsonObject& json, QmlObjec appSettings->offlineEditingHoverSpeed()->setRawValue(json[_jsonHoverSpeedKey].toDouble()); } if (json.contains(_jsonGlobalPlanAltitudeModeKey)) { - setGlobalAltitudeMode(json[_jsonGlobalPlanAltitudeModeKey].toVariant().value()); + setGlobalAltitudeFrame(json[_jsonGlobalPlanAltitudeModeKey].toVariant().value()); } QGeoCoordinate homeCoordinate; @@ -1041,7 +1041,7 @@ bool MissionController::loadTextFile(QFile& file, QString& errorString) QByteArray bytes = file.readAll(); QTextStream stream(bytes); - setGlobalAltitudeMode(QGroundControlQmlGlobal::AltitudeModeMixed); + setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrameMixed); QmlObjectListModel* loadedVisualItems = new QmlObjectListModel(this); if (!_loadTextMissionFile(stream, loadedVisualItems, errorStr)) { @@ -1084,7 +1084,7 @@ void MissionController::save(QJsonObject& json) json[_jsonVehicleTypeKey] = _controllerVehicle->vehicleType(); json[_jsonCruiseSpeedKey] = _controllerVehicle->defaultCruiseSpeed(); json[_jsonHoverSpeedKey] = _controllerVehicle->defaultHoverSpeed(); - json[_jsonGlobalPlanAltitudeModeKey] = _globalAltMode; + json[_jsonGlobalPlanAltitudeModeKey] = _globalAltFrame; // Save the visual items @@ -2193,11 +2193,11 @@ void MissionController::_inProgressChanged(bool inProgress) emit syncInProgressChanged(inProgress); } -bool MissionController::_findPreviousAltitude(int newIndex, double* prevAltitude, QGroundControlQmlGlobal::AltMode* prevAltitudeMode) +bool MissionController::_findPreviousAltitude(int newIndex, double* prevAltitude, QGroundControlQmlGlobal::AltitudeFrame* prevAltitudeMode) { bool found = false; double foundAltitude = 0; - QGroundControlQmlGlobal::AltMode foundAltMode = QGroundControlQmlGlobal::AltitudeModeNone; + QGroundControlQmlGlobal::AltitudeFrame foundAltFrame = QGroundControlQmlGlobal::AltitudeFrameNone; if (newIndex > _visualItems->count()) { return false; @@ -2212,7 +2212,7 @@ bool MissionController::_findPreviousAltitude(int newIndex, double* prevAltitude SimpleMissionItem* simpleItem = qobject_cast(visualItem); if (simpleItem->specifiesAltitude()) { foundAltitude = simpleItem->altitude()->rawValue().toDouble(); - foundAltMode = simpleItem->altitudeMode(); + foundAltFrame = simpleItem->altitudeFrame(); found = true; break; } @@ -2222,7 +2222,7 @@ bool MissionController::_findPreviousAltitude(int newIndex, double* prevAltitude if (found) { *prevAltitude = foundAltitude; - *prevAltitudeMode = foundAltMode; + *prevAltitudeMode = foundAltFrame; } return found; @@ -2971,24 +2971,24 @@ MissionController::SendToVehiclePreCheckState MissionController::sendToVehiclePr return SendToVehiclePreCheckStateOk; } -QGroundControlQmlGlobal::AltMode MissionController::globalAltitudeMode(void) +QGroundControlQmlGlobal::AltitudeFrame MissionController::globalAltitudeFrame(void) { - return _globalAltMode; + return _globalAltFrame; } -QGroundControlQmlGlobal::AltMode MissionController::globalAltitudeModeDefault(void) +QGroundControlQmlGlobal::AltitudeFrame MissionController::globalAltitudeFrameDefault(void) { - if (_globalAltMode == QGroundControlQmlGlobal::AltitudeModeMixed) { - return QGroundControlQmlGlobal::AltitudeModeRelative; + if (_globalAltFrame == QGroundControlQmlGlobal::AltitudeFrameMixed) { + return QGroundControlQmlGlobal::AltitudeFrameRelative; } else { - return _globalAltMode; + return _globalAltFrame; } } -void MissionController::setGlobalAltitudeMode(QGroundControlQmlGlobal::AltMode altMode) +void MissionController::setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altFrame) { - if (_globalAltMode != altMode) { - _globalAltMode = altMode; - emit globalAltitudeModeChanged(); + if (_globalAltFrame != altFrame) { + _globalAltFrame = altFrame; + emit globalAltitudeFrameChanged(); } } diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index a4811e51fa3f..e14f8e6ef26b 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -120,8 +120,8 @@ class MissionController : public PlanElementController Q_PROPERTY(double minAMSLAltitude MEMBER _minAMSLAltitude NOTIFY minAMSLAltitudeChanged) ///< Minimum altitude associated with this mission. Used to calculate percentages for terrain status. Q_PROPERTY(double maxAMSLAltitude MEMBER _maxAMSLAltitude NOTIFY maxAMSLAltitudeChanged) ///< Maximum altitude associated with this mission. Used to calculate percentages for terrain status. - Q_PROPERTY(QGroundControlQmlGlobal::AltMode globalAltitudeMode READ globalAltitudeMode WRITE setGlobalAltitudeMode NOTIFY globalAltitudeModeChanged) - Q_PROPERTY(QGroundControlQmlGlobal::AltMode globalAltitudeModeDefault READ globalAltitudeModeDefault NOTIFY globalAltitudeModeChanged) ///< Default to use for newly created items + Q_PROPERTY(QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrame READ globalAltitudeFrame WRITE setGlobalAltitudeFrame NOTIFY globalAltitudeFrameChanged) + Q_PROPERTY(QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrameDefault READ globalAltitudeFrameDefault NOTIFY globalAltitudeFrameChanged) ///< Default to use for newly created items Q_INVOKABLE void removeVisualItem(int viIndex); @@ -317,9 +317,9 @@ class MissionController : public PlanElementController bool isFirstLandingComplexItem (const LandingComplexItem* item) const; bool isEmpty (void) const; - QGroundControlQmlGlobal::AltMode globalAltitudeMode(void); - QGroundControlQmlGlobal::AltMode globalAltitudeModeDefault(void); - void setGlobalAltitudeMode(QGroundControlQmlGlobal::AltMode altMode); + QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrame(void); + QGroundControlQmlGlobal::AltitudeFrame globalAltitudeFrameDefault(void); + void setGlobalAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altFrame); // Top-level group row indices in _visualItemsTree (must match _setupTreeModel order) static constexpr int kPlanFileGroupRow = 0; @@ -371,7 +371,7 @@ class MissionController : public PlanElementController void recalcTerrainProfile (void); void _recalcMissionFlightStatusSignal (void); void _recalcFlightPathSegmentsSignal (void); - void globalAltitudeModeChanged (void); + void globalAltitudeFrameChanged (void); private slots: void _newMissionItemsAvailableFromVehicle (bool removeAllRequested); @@ -410,7 +410,7 @@ private slots: void _deinitVisualItem (VisualMissionItem* item); void _setupActiveVehicle (Vehicle* activeVehicle, bool forceLoadFromVehicle); void _calcPrevWaypointValues (VisualMissionItem* currentItem, VisualMissionItem* prevItem, double* azimuth, double* distance, double* altDifference); - bool _findPreviousAltitude (int newIndex, double* prevAltitude, QGroundControlQmlGlobal::AltMode* prevAltMode); + bool _findPreviousAltitude (int newIndex, double* prevAltitude, QGroundControlQmlGlobal::AltitudeFrame* prevAltFrame); MissionSettingsItem* _addMissionSettings (QmlObjectListModel* visualItems); bool _loadJsonMissionFile (const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFileV1 (const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString); @@ -496,7 +496,7 @@ private slots: double _maxAMSLAltitude = 0; bool _missionContainsVTOLTakeoff = false; - QGroundControlQmlGlobal::AltMode _globalAltMode = QGroundControlQmlGlobal::AltitudeModeRelative; + QGroundControlQmlGlobal::AltitudeFrame _globalAltFrame = QGroundControlQmlGlobal::AltitudeFrameRelative; static constexpr const char* _settingsGroup = "MissionController"; static constexpr const char* _jsonFileTypeValue = "Mission"; diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index 8f886c6d52bf..5014d8d8fe59 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -66,21 +66,21 @@ SimpleMissionItem::SimpleMissionItem(PlanMasterController* masterController, boo { _editorQml = QStringLiteral("qrc:/qml/QGroundControl/PlanView/SimpleItemEditor.qml"); - struct MavFrame2AltMode_s { + struct MavFrame2AltFrame_s { MAV_FRAME mavFrame; - QGroundControlQmlGlobal::AltMode altMode; + QGroundControlQmlGlobal::AltitudeFrame altFrame; }; - const struct MavFrame2AltMode_s rgMavFrame2AltMode[] = { - { MAV_FRAME_GLOBAL_TERRAIN_ALT, QGroundControlQmlGlobal::AltitudeModeTerrainFrame }, - { MAV_FRAME_GLOBAL, QGroundControlQmlGlobal::AltitudeModeAbsolute }, - { MAV_FRAME_GLOBAL_RELATIVE_ALT, QGroundControlQmlGlobal::AltitudeModeRelative }, + const struct MavFrame2AltFrame_s rgMavFrame2AltFrame[] = { + { MAV_FRAME_GLOBAL_TERRAIN_ALT, QGroundControlQmlGlobal::AltitudeFrameTerrain }, + { MAV_FRAME_GLOBAL, QGroundControlQmlGlobal::AltitudeFrameAbsolute }, + { MAV_FRAME_GLOBAL_RELATIVE_ALT, QGroundControlQmlGlobal::AltitudeFrameRelative }, }; - _altitudeMode = QGroundControlQmlGlobal::AltitudeModeRelative; - for (size_t i=0; iappSettings()->defaultMissionItemAltitude()->rawValue().toDouble(); _altitudeFact.setRawValue(defaultAlt); _missionItem._param7Fact.setRawValue(defaultAlt); - // Note that setAltitudeMode will also set MAV_FRAME correctly through signalling + // Note that setAltitudeFrame will also set MAV_FRAME correctly through signalling // Takeoff items always use relative alt since that is the highest quality data to base altitude from - setAltitudeMode(isTakeoffItem() ? QGroundControlQmlGlobal::AltitudeModeRelative : _missionController->globalAltitudeModeDefault()); + setAltitudeFrame(isTakeoffItem() ? QGroundControlQmlGlobal::AltitudeFrameRelative : _missionController->globalAltitudeFrameDefault()); } else { _altitudeFact.setRawValue(0); _missionItem._param7Fact.setRawValue(0); @@ -1058,11 +1058,11 @@ void SimpleMissionItem::setMissionFlightStatus(MissionController::MissionFlightS } } -void SimpleMissionItem::setAltitudeMode(QGroundControlQmlGlobal::AltMode altitudeMode) +void SimpleMissionItem::setAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altitudeFrame) { - if (altitudeMode != _altitudeMode) { - _altitudeMode = altitudeMode; - emit altitudeModeChanged(); + if (altitudeFrame != _altitudeFrame) { + _altitudeFrame = altitudeFrame; + emit altitudeFrameChanged(); } } @@ -1112,23 +1112,23 @@ double SimpleMissionItem::editableAlt() const double SimpleMissionItem::amslEntryAlt(void) const { - switch (_altitudeMode) { - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + switch (_altitudeFrame) { + case QGroundControlQmlGlobal::AltitudeFrameTerrain: return _missionItem.param7() + _terrainAltitude; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: - case QGroundControlQmlGlobal::AltitudeModeAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: return _missionItem.param7(); - case QGroundControlQmlGlobal::AltitudeModeRelative: + case QGroundControlQmlGlobal::AltitudeFrameRelative: return _missionItem.param7() + _masterController->missionController()->plannedHomePosition().altitude(); - case QGroundControlQmlGlobal::AltitudeModeNone: - qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeMode:AltitudeModeNone"; + case QGroundControlQmlGlobal::AltitudeFrameNone: + qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeFrame:AltitudeFrameNone"; return qQNaN(); - case QGroundControlQmlGlobal::AltitudeModeMixed: - qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeMode:AltitudeModeMixed"; + case QGroundControlQmlGlobal::AltitudeFrameMixed: + qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeFrame:AltitudeFrameMixed"; return qQNaN(); } - qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeMode:" << _altitudeMode; + qWarning() << "Internal Error SimpleMissionItem::amslEntryAlt: Invalid altitudeFrame:" << _altitudeFrame; return qQNaN(); } diff --git a/src/MissionManager/SimpleMissionItem.h b/src/MissionManager/SimpleMissionItem.h index fa859674d668..3e275d622b14 100644 --- a/src/MissionManager/SimpleMissionItem.h +++ b/src/MissionManager/SimpleMissionItem.h @@ -24,9 +24,9 @@ class SimpleMissionItem : public VisualMissionItem Q_PROPERTY(bool friendlyEditAllowed READ friendlyEditAllowed NOTIFY friendlyEditAllowedChanged) Q_PROPERTY(bool rawEdit READ rawEdit WRITE setRawEdit NOTIFY rawEditChanged) ///< true: raw item editing with all params Q_PROPERTY(bool specifiesAltitude READ specifiesAltitude NOTIFY commandChanged) - Q_PROPERTY(Fact* altitude READ altitude CONSTANT) ///< Altitude as specified by altitudeMode. Not necessarily true mission item altitude - Q_PROPERTY(QGroundControlQmlGlobal::AltMode altitudeMode READ altitudeMode WRITE setAltitudeMode NOTIFY altitudeModeChanged) - Q_PROPERTY(Fact* amslAltAboveTerrain READ amslAltAboveTerrain CONSTANT) ///< Actual AMSL altitude for item if altitudeMode == AltitudeAboveTerrain + Q_PROPERTY(Fact* altitude READ altitude CONSTANT) ///< Altitude as specified by altitudeFrame. Not necessarily true mission item altitude + Q_PROPERTY(QGroundControlQmlGlobal::AltitudeFrame altitudeFrame READ altitudeFrame WRITE setAltitudeFrame NOTIFY altitudeFrameChanged) + Q_PROPERTY(Fact* amslAltAboveTerrain READ amslAltAboveTerrain CONSTANT) ///< Actual AMSL altitude for item if altitudeFrame is AltitudeFrameCalcAboveTerrain or AltitudeFrameTerrain Q_PROPERTY(int command READ command WRITE setCommand NOTIFY commandChanged) Q_PROPERTY(bool isLoiterItem READ isLoiterItem NOTIFY isLoiterItemChanged) Q_PROPERTY(bool showLoiterRadius READ showLoiterRadius NOTIFY showLoiterRadiusChanged) @@ -64,7 +64,7 @@ class SimpleMissionItem : public VisualMissionItem bool friendlyEditAllowed (void) const; bool rawEdit (void) const; bool specifiesAltitude (void) const; - QGroundControlQmlGlobal::AltMode altitudeMode(void) const { return _altitudeMode; } + QGroundControlQmlGlobal::AltitudeFrame altitudeFrame(void) const { return _altitudeFrame; } Fact* altitude (void) { return &_altitudeFact; } Fact* amslAltAboveTerrain (void) { return &_amslAltAboveTerrainFact; } bool isLoiterItem (void) const; @@ -82,7 +82,7 @@ class SimpleMissionItem : public VisualMissionItem QmlObjectListModel* comboboxFactsAdvanced (void) { return &_comboboxFactsAdvanced; } void setRawEdit(bool rawEdit); - void setAltitudeMode(QGroundControlQmlGlobal::AltMode altitudeMode); + void setAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrame altitudeFrame); void setCommandByIndex(int index); @@ -142,7 +142,7 @@ class SimpleMissionItem : public VisualMissionItem void rawEditChanged (bool rawEdit); void cameraSectionChanged (QObject* cameraSection); void speedSectionChanged (QObject* cameraSection); - void altitudeModeChanged (void); + void altitudeFrameChanged (void); void isLoiterItemChanged (void); void showLoiterRadiusChanged (void); void loiterRadiusChanged (double loiterRadius); @@ -154,7 +154,7 @@ private slots: void _sendCoordinateChanged (void); void _sendFriendlyEditAllowedChanged (void); void _altitudeChanged (void); - void _altitudeModeChanged (void); + void _altitudeFrameChanged (void); void _terrainAltChanged (void); void _updateLastSequenceNumber (void); void _rebuildFacts (void); @@ -184,7 +184,7 @@ private slots: Fact _supportedCommandFact; - QGroundControlQmlGlobal::AltMode _altitudeMode = QGroundControlQmlGlobal::AltitudeModeRelative; + QGroundControlQmlGlobal::AltitudeFrame _altitudeFrame = QGroundControlQmlGlobal::AltitudeFrameRelative; Fact _altitudeFact; Fact _amslAltAboveTerrainFact; diff --git a/src/MissionManager/SurveyComplexItem.cc b/src/MissionManager/SurveyComplexItem.cc index 3868c378befe..2ccd192ed7fb 100644 --- a/src/MissionManager/SurveyComplexItem.cc +++ b/src/MissionManager/SurveyComplexItem.cc @@ -239,7 +239,7 @@ bool SurveyComplexItem::_loadV3(const QJsonObject& complexObject, int sequenceNu _cameraTriggerInTurnAroundFact.setRawValue (complexObject[_jsonV3CameraTriggerInTurnaroundKey].toBool(true)); _cameraCalc.valueSetIsDistance()->setRawValue (complexObject[_jsonV3FixedValueIsAltitudeKey].toBool(true)); - _cameraCalc.setDistanceMode(complexObject[_jsonV3GridAltitudeRelativeKey].toBool(true) ? QGroundControlQmlGlobal::AltitudeModeRelative : QGroundControlQmlGlobal::AltitudeModeAbsolute); + _cameraCalc.setDistanceMode(complexObject[_jsonV3GridAltitudeRelativeKey].toBool(true) ? QGroundControlQmlGlobal::AltitudeFrameRelative : QGroundControlQmlGlobal::AltitudeFrameAbsolute); bool manualGrid = complexObject[_jsonV3ManualGridKey].toBool(true); diff --git a/src/MissionManager/TakeoffMissionItem.cc b/src/MissionManager/TakeoffMissionItem.cc index 19248ddad33a..1536a6fa6b52 100644 --- a/src/MissionManager/TakeoffMissionItem.cc +++ b/src/MissionManager/TakeoffMissionItem.cc @@ -167,7 +167,7 @@ void TakeoffMissionItem::_setLaunchCoordinate(const QGeoCoordinate& launchCoordi if (_controllerVehicle->fixedWing()) { double altitude = this->altitude()->rawValue().toDouble(); - if (altitudeMode() == QGroundControlQmlGlobal::AltitudeModeRelative) { + if (altitudeFrame() == QGroundControlQmlGlobal::AltitudeFrameRelative) { // Offset for fixed wing climb out of 30 degrees to specified altitude if (altitude != 0.0) { distance = altitude / tan(qDegreesToRadians(30.0)); diff --git a/src/MissionManager/TransectStyleComplexItem.cc b/src/MissionManager/TransectStyleComplexItem.cc index 23615ed80ce4..3cf5efec3c15 100644 --- a/src/MissionManager/TransectStyleComplexItem.cc +++ b/src/MissionManager/TransectStyleComplexItem.cc @@ -150,7 +150,7 @@ void TransectStyleComplexItem::_save(QJsonObject& complexObject) innerObject[refly90DegreesName] = _refly90DegreesFact.rawValue().toBool(); innerObject[_jsonCameraShotsKey] = _cameraShots; - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { innerObject[terrainAdjustToleranceName] = _terrainAdjustToleranceFact.rawValue().toDouble(); innerObject[terrainAdjustMaxClimbRateName] = _terrainAdjustMaxClimbRateFact.rawValue().toDouble(); innerObject[terrainAdjustMaxDescentRateName] = _terrainAdjustMaxDescentRateFact.rawValue().toDouble(); @@ -284,7 +284,7 @@ bool TransectStyleComplexItem::_load(const QJsonObject& complexObject, bool forP _cameraShots = innerObject[_jsonCameraShotsKey].toInt(); } - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { QList followTerrainKeyInfoList = { { terrainAdjustToleranceName, QJsonValue::Double, true }, { terrainAdjustMaxClimbRateName, QJsonValue::Double, true }, @@ -317,7 +317,7 @@ bool TransectStyleComplexItem::_load(const QJsonObject& complexObject, bool forP } if (!forPresets) { - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeTerrainFrame) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameTerrain) { // Terrain frame requires terrain data in order to know AMSL coordinate heights for each mission item _queryMissionItemCoordHeights(); } else { @@ -410,18 +410,18 @@ void TransectStyleComplexItem::_rebuildTransects(void) _minAMSLAltitude = _maxAMSLAltitude = qQNaN(); switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: _rebuildTransects - invalid _cameraCalc.distanceMode()" << _cameraCalc.distanceMode(); return; - case QGroundControlQmlGlobal::AltitudeModeRelative: - case QGroundControlQmlGlobal::AltitudeModeAbsolute: - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + case QGroundControlQmlGlobal::AltitudeFrameRelative: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: // Terrain height not needed to calculate path, as TerrainFrame specifies a fixed altitude over terrain, doesn't need to know the actual terrain height // so vehicle is responsible for having or not this altitude calculation, so we can build the flight path right away. _buildFlightPathCoordInfoFromTransects(); break; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: // Query the terrain data. Once available flight path will be calculated, as on this mode QGC actually calculates the individual altitude for each waypoint // having into account terrain data. _queryTransectsPathHeightInfo(); @@ -499,12 +499,12 @@ void TransectStyleComplexItem::_updateFlightPathSegmentsDontCallDirectly(void) _flightPathSegments.clearAndDeleteContents(); switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: _updateFlightPathSegmentsDontCallDirectly - invalid _cameraCalc.distanceMode()" << _cameraCalc.distanceMode(); return; - case QGroundControlQmlGlobal::AltitudeModeRelative: - case QGroundControlQmlGlobal::AltitudeModeAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameRelative: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: { // Since we aren't following terrain all the transects are at the same height. We can use _visualTransectPoints to build the // flight path segments. @@ -519,9 +519,9 @@ void TransectStyleComplexItem::_updateFlightPathSegmentsDontCallDirectly(void) } } break; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain && _loadedMissionItems.count()) { + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain && _loadedMissionItems.count()) { // Build segments from loaded mission item data QGeoCoordinate prevCoord = QGeoCoordinate(); double prevAlt = 0; @@ -540,7 +540,7 @@ void TransectStyleComplexItem::_updateFlightPathSegmentsDontCallDirectly(void) // - Working from loaded mission items which have had terrain heights queried for // In both cases _rgFlightPathCoordInfo will be set up for use if (_rgFlightPathCoordInfo.count()) { - FlightPathSegment::SegmentType segmentType = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain ? FlightPathSegment::SegmentTypeGeneric : FlightPathSegment::SegmentTypeTerrainFrame; + FlightPathSegment::SegmentType segmentType = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain ? FlightPathSegment::SegmentTypeGeneric : FlightPathSegment::SegmentTypeTerrainFrame; for (int i=0; i<_rgFlightPathCoordInfo.count() - 1; i++) { const QGeoCoordinate& fromCoord = _rgFlightPathCoordInfo[i].coord; const QGeoCoordinate& toCoord = _rgFlightPathCoordInfo[i+1].coord; @@ -667,7 +667,7 @@ void TransectStyleComplexItem::_missionItemCoordTerrainData(bool success, QList< TransectStyleComplexItem::ReadyForSaveState TransectStyleComplexItem::readyForSaveState(void) const { bool terrainReady = false; - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { if (_loadedMissionItems.count()) { // We have loaded mission items. Everything is ready to go. terrainReady = true; @@ -688,15 +688,15 @@ TransectStyleComplexItem::ReadyForSaveState TransectStyleComplexItem::readyForSa void TransectStyleComplexItem::_adjustForAvailableTerrainData(void) { switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: _adjustForAvailableTerrainData - invalid _cameraCalc.distanceMode()" << _cameraCalc.distanceMode(); return; - case QGroundControlQmlGlobal::AltitudeModeRelative: - case QGroundControlQmlGlobal::AltitudeModeAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameRelative: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: // No additional work needed return; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: _buildFlightPathCoordInfoFromPathHeightInfoForCalcAboveTerrain(); _adjustForMaxRates(); _adjustForTolerance(); @@ -708,7 +708,7 @@ void TransectStyleComplexItem::_adjustForAvailableTerrainData(void) } emit lastSequenceNumberChanged(lastSequenceNumber()); break; - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: if (_loadedMissionItems.count()) { _buildFlightPathCoordInfoFromMissionItems(); } else { @@ -1105,7 +1105,7 @@ int TransectStyleComplexItem::lastSequenceNumber(void) const void TransectStyleComplexItem::_distanceModeChanged(int distanceMode) { - if (static_cast(distanceMode) == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (static_cast(distanceMode) == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { _refly90DegreesFact.setRawValue(false); _hoverAndCaptureFact.setRawValue(false); } @@ -1131,7 +1131,7 @@ void TransectStyleComplexItem::appendMissionItems(QList& items, QO void TransectStyleComplexItem::_appendWaypoint(QList& items, QObject* missionItemParent, int& seqNum, MAV_FRAME mavFrame, float holdTime, const QGeoCoordinate& coordinate) { - double altitude = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain ? coordinate.altitude() : _cameraCalc.distanceToSurface()->rawValue().toDouble(); + double altitude = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain ? coordinate.altitude() : _cameraCalc.distanceToSurface()->rawValue().toDouble(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_NAV_WAYPOINT, @@ -1167,7 +1167,7 @@ void TransectStyleComplexItem::_appendSinglePhotoCapture(QList& it void TransectStyleComplexItem::_appendConditionGate(QList& items, QObject* missionItemParent, int& seqNum, MAV_FRAME mavFrame, const QGeoCoordinate& coordinate) { - double altitude = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain ? coordinate.altitude() : _cameraCalc.distanceToSurface()->rawValue().toDouble(); + double altitude = _cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain ? coordinate.altitude() : _cameraCalc.distanceToSurface()->rawValue().toDouble(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_CONDITION_GATE, @@ -1232,18 +1232,18 @@ void TransectStyleComplexItem::_buildAndAppendMissionItems(QList& qCDebug(TransectStyleComplexItemLog) << "_buildAndAppendMissionItems"; switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeRelative: + case QGroundControlQmlGlobal::AltitudeFrameRelative: mavFrame = MAV_FRAME_GLOBAL_RELATIVE_ALT; break; - case QGroundControlQmlGlobal::AltitudeModeAbsolute: - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: mavFrame = MAV_FRAME_GLOBAL; break; - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: mavFrame = MAV_FRAME_GLOBAL_TERRAIN_ALT; break; - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: _buildAndAppendMissionItems incorrect _cameraCalc.distanceMode" << _cameraCalc.distanceMode(); mavFrame = MAV_FRAME_GLOBAL_RELATIVE_ALT; break; @@ -1352,25 +1352,25 @@ double TransectStyleComplexItem::amslEntryAlt(void) const double distanceToSurface = _cameraCalc.distanceToSurface()->rawValue().toDouble(); switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeRelative: + case QGroundControlQmlGlobal::AltitudeFrameRelative: alt = distanceToSurface + _missionController->plannedHomePosition().altitude(); break; - case QGroundControlQmlGlobal::AltitudeModeAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: alt = distanceToSurface; break; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: if (_loadedMissionItems.count()) { // The first item might not be a waypoint we have to find it. for (int i=0; i<_loadedMissionItems.count(); i++) { MissionItem* item = _loadedMissionItems[i]; const MissionCommandUIInfo* uiInfo = MissionCommandTree::instance()->getUIInfo(_controllerVehicle, QGCMAVLink::VehicleClassGeneric, item->command()); if (uiInfo && uiInfo->specifiesCoordinate() && !uiInfo->isStandaloneCoordinate()) { - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { - // AltitudeModeCalcAboveTerrain has AMSL alt in param 7 + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { + // AltitudeFrameCalcAboveTerrain has AMSL alt in param 7 alt = item->param7(); } else { - // AltitudeModeTerrainFrame has terrain frame relative alt in param 7. So we need terrain heights to calc AMSL. + // AltitudeFrameTerrain has terrain frame relative alt in param 7. So we need terrain heights to calc AMSL. if (_rgPathHeightInfo.count()) { alt = item->param7() + _rgPathHeightInfo.first().heights.first(); } @@ -1384,8 +1384,8 @@ double TransectStyleComplexItem::amslEntryAlt(void) const } } break; - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: amslEntryAlt incorrect _cameraCalc.distanceMode" << _cameraCalc.distanceMode(); break; } @@ -1398,23 +1398,23 @@ double TransectStyleComplexItem::amslExitAlt(void) const double alt = qQNaN(); switch (_cameraCalc.distanceMode()) { - case QGroundControlQmlGlobal::AltitudeModeRelative: - case QGroundControlQmlGlobal::AltitudeModeAbsolute: + case QGroundControlQmlGlobal::AltitudeFrameRelative: + case QGroundControlQmlGlobal::AltitudeFrameAbsolute: alt = amslEntryAlt(); break; - case QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain: - case QGroundControlQmlGlobal::AltitudeModeTerrainFrame: + case QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain: + case QGroundControlQmlGlobal::AltitudeFrameTerrain: if (_loadedMissionItems.count()) { // The last item might not be a waypoint we have to find it. for (int i=_loadedMissionItems.count()-1; i>0; i--) { MissionItem* item = _loadedMissionItems[i]; const MissionCommandUIInfo* uiInfo = MissionCommandTree::instance()->getUIInfo(_controllerVehicle, QGCMAVLink::VehicleClassGeneric, item->command()); if (uiInfo && uiInfo->specifiesCoordinate() && !uiInfo->isStandaloneCoordinate()) { - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { - // AltitudeModeCalcAboveTerrain has AMSL alt in param 7 + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { + // AltitudeFrameCalcAboveTerrain has AMSL alt in param 7 alt = item->param7(); } else { - // AltitudeModeTerrainFrame has terrain frame relative alt in param 7. So we need terrain heights to calc AMSL. + // AltitudeFrameTerrain has terrain frame relative alt in param 7. So we need terrain heights to calc AMSL. if (_rgPathHeightInfo.count()) { alt = item->param7() + _rgPathHeightInfo.last().heights.last(); } @@ -1428,8 +1428,8 @@ double TransectStyleComplexItem::amslExitAlt(void) const } } break; - case QGroundControlQmlGlobal::AltitudeModeMixed: - case QGroundControlQmlGlobal::AltitudeModeNone: + case QGroundControlQmlGlobal::AltitudeFrameMixed: + case QGroundControlQmlGlobal::AltitudeFrameNone: qCWarning(TransectStyleComplexItemLog) << "Internal Error: amslExitAlt incorrect _cameraCalc.distanceMode" << _cameraCalc.distanceMode(); break; } @@ -1447,10 +1447,10 @@ double TransectStyleComplexItem::minAMSLAltitude(void) const { // FIXME: What about terrain frame - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { return _minAMSLAltitude; } else { - return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeRelative ? _missionController->plannedHomePosition().altitude() : 0); + return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameRelative ? _missionController->plannedHomePosition().altitude() : 0); } } @@ -1458,9 +1458,9 @@ double TransectStyleComplexItem::maxAMSLAltitude(void) const { // FIXME: What about terrain frame - if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain) { + if (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain) { return _maxAMSLAltitude; } else { - return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeModeRelative ? _missionController->plannedHomePosition().altitude() : 0); + return _cameraCalc.distanceToSurface()->rawValue().toDouble() + (_cameraCalc.distanceMode() == QGroundControlQmlGlobal::AltitudeFrameRelative ? _missionController->plannedHomePosition().altitude() : 0); } } diff --git a/src/PlanView/CameraCalcGrid.qml b/src/PlanView/CameraCalcGrid.qml index 50c0c6fe5fe6..7e081d517c2c 100644 --- a/src/PlanView/CameraCalcGrid.qml +++ b/src/PlanView/CameraCalcGrid.qml @@ -87,7 +87,7 @@ Column { AltitudeFactTextField { fact: cameraCalc.distanceToSurface - altitudeMode: cameraCalc.distanceMode + altitudeFrame: cameraCalc.distanceMode enabled: fixedDistanceRadio.checked Layout.fillWidth: true } @@ -120,7 +120,7 @@ Column { QGCLabel { text: distanceToSurfaceLabel } AltitudeFactTextField { fact: cameraCalc.distanceToSurface - altitudeMode: cameraCalc.distanceMode + altitudeFrame: cameraCalc.distanceMode Layout.fillWidth: true } diff --git a/src/PlanView/FWLandingPatternEditor.qml b/src/PlanView/FWLandingPatternEditor.qml index 15974fb44b0f..5c2b7bcfdde3 100644 --- a/src/PlanView/FWLandingPatternEditor.qml +++ b/src/PlanView/FWLandingPatternEditor.qml @@ -26,7 +26,7 @@ Rectangle { property real _spacer: ScreenTools.defaultFontPixelWidth / 2 property string _setToVehicleHeadingStr: qsTr("Set to vehicle heading") property string _setToVehicleLocationStr: qsTr("Set to vehicle location") - property int _altitudeMode: missionItem.altitudesAreRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute + property int _altitudeFrame: missionItem.altitudesAreRelative ? QGroundControl.AltitudeFrameRelative : QGroundControl.AltitudeFrameAbsolute Column { @@ -67,7 +67,7 @@ Rectangle { AltitudeFactTextField { Layout.fillWidth: true fact: missionItem.finalApproachAltitude - altitudeMode: _altitudeMode + altitudeFrame: _altitudeFrame } FactCheckBox { @@ -141,7 +141,7 @@ Rectangle { AltitudeFactTextField { Layout.fillWidth: true fact: missionItem.landingAltitude - altitudeMode: _altitudeMode + altitudeFrame: _altitudeFrame } QGCRadioButton { diff --git a/src/PlanView/MissionDefaultsEditor.qml b/src/PlanView/MissionDefaultsEditor.qml index 5166c6b2c50f..e8dd6d2a2556 100644 --- a/src/PlanView/MissionDefaultsEditor.qml +++ b/src/PlanView/MissionDefaultsEditor.qml @@ -31,17 +31,17 @@ Rectangle { target: _root._controllerVehicle function onFirmwareTypeChanged() { if (!_root._controllerVehicle.supports.terrainFrame - && _root.missionController.globalAltitudeMode === QGroundControl.AltitudeModeTerrainFrame) { - _root.missionController.globalAltitudeMode = QGroundControl.AltitudeModeCalcAboveTerrain + && _root.missionController.globalAltitudeFrame === QGroundControl.AltitudeFrameTerrain) { + _root.missionController.globalAltitudeFrame = QGroundControl.AltitudeFrameCalcAboveTerrain } } } - Component { id: altModeDialogComponent; AltModeDialog { } } + Component { id: altFrameDialogComponent; AltFrameDialog { } } QGCPopupDialogFactory { - id: altModeDialogFactory - dialogComponent: altModeDialogComponent + id: altFrameDialogFactory + dialogComponent: altFrameDialogComponent } ColumnLayout { @@ -54,30 +54,30 @@ Rectangle { LabelledButton { Layout.fillWidth: true - label: qsTr("Altitude Mode") - buttonText: QGroundControl.altitudeModeShortDescription(_root.missionController.globalAltitudeMode) + label: qsTr("Alt Frame") + buttonText: QGroundControl.altitudeFrameExtraUnits(_root.missionController.globalAltitudeFrame) onClicked: { let removeModes = [] - let updateFunction = function(altMode) { _root.missionController.globalAltitudeMode = altMode } + let updateFunction = function(altFrame) { _root.missionController.globalAltitudeFrame = altFrame } if (!_root._controllerVehicle.supports.terrainFrame) { - removeModes.push(QGroundControl.AltitudeModeTerrainFrame) + removeModes.push(QGroundControl.AltitudeFrameTerrain) } if (!_root._noMissionItemsAdded) { - if (_root.missionController.globalAltitudeMode !== QGroundControl.AltitudeModeRelative) { - removeModes.push(QGroundControl.AltitudeModeRelative) + if (_root.missionController.globalAltitudeFrame !== QGroundControl.AltitudeFrameRelative) { + removeModes.push(QGroundControl.AltitudeFrameRelative) } - if (_root.missionController.globalAltitudeMode !== QGroundControl.AltitudeModeAbsolute) { - removeModes.push(QGroundControl.AltitudeModeAbsolute) + if (_root.missionController.globalAltitudeFrame !== QGroundControl.AltitudeFrameAbsolute) { + removeModes.push(QGroundControl.AltitudeFrameAbsolute) } - if (_root.missionController.globalAltitudeMode !== QGroundControl.AltitudeModeCalcAboveTerrain) { - removeModes.push(QGroundControl.AltitudeModeCalcAboveTerrain) + if (_root.missionController.globalAltitudeFrame !== QGroundControl.AltitudeFrameCalcAboveTerrain) { + removeModes.push(QGroundControl.AltitudeFrameCalcAboveTerrain) } - if (_root.missionController.globalAltitudeMode !== QGroundControl.AltitudeModeTerrainFrame) { - removeModes.push(QGroundControl.AltitudeModeTerrainFrame) + if (_root.missionController.globalAltitudeFrame !== QGroundControl.AltitudeFrameTerrain) { + removeModes.push(QGroundControl.AltitudeFrameTerrain) } } - altModeDialogFactory.open({ rgRemoveModes: removeModes, updateAltModeFn: updateFunction }) + altFrameDialogFactory.open({ currentAltFrame: _root.missionController.globalAltitudeFrame, rgRemoveModes: removeModes, updateAltFrameFn: updateFunction }) } } diff --git a/src/PlanView/SimpleItemEditor.qml b/src/PlanView/SimpleItemEditor.qml index a6c2160d6051..c984d1b7223b 100644 --- a/src/PlanView/SimpleItemEditor.qml +++ b/src/PlanView/SimpleItemEditor.qml @@ -18,8 +18,8 @@ Rectangle { property real _margin: ScreenTools.defaultFontPixelHeight / 2 property real _altRectMargin: ScreenTools.defaultFontPixelWidth / 2 property var _controllerVehicle: missionItem.masterController.controllerVehicle - property int _globalAltMode: missionItem.masterController.missionController.globalAltitudeMode - property bool _globalAltModeIsMixed: _globalAltMode == QGroundControl.AltitudeModeMixed + property int _globalAltFrame: missionItem.masterController.missionController.globalAltitudeFrame + property bool _globalAltFrameIsMixed: _globalAltFrame == QGroundControl.AltitudeFrameMixed property real _radius: ScreenTools.defaultFontPixelWidth / 2 property real _fieldSpacing: ScreenTools.defaultFontPixelHeight / 2 @@ -144,17 +144,17 @@ Rectangle { RowLayout { Layout.fillWidth: true - visible: _globalAltModeIsMixed + visible: _globalAltFrameIsMixed QGCLabel { Layout.fillWidth: true - text: qsTr("Altitude Mode") + text: qsTr("Alt Frame") } - AltModeCombo { - altitudeMode: missionItem.altitudeMode + AltFrameCombo { + altitudeFrame: missionItem.altitudeFrame vehicle: _controllerVehicle - onAltitudeModeChanged: missionItem.altitudeMode = altitudeMode + onAltitudeFrameChanged: missionItem.altitudeFrame = altitudeFrame } } @@ -165,18 +165,14 @@ Rectangle { fact: missionItem.altitude function _extraLabelText() { - if (!_globalAltModeIsMixed && missionItem.altitudeMode !== QGroundControl.AltitudeModeRelative) { - return qsTr(" (%1)").arg(QGroundControl.altitudeModeShortDescription(missionItem.altitudeMode)) - } else { - return "" - } + return qsTr(" (%1)").arg(QGroundControl.altitudeFrameExtraUnits(missionItem.altitudeFrame)) } } QGCLabel { font.pointSize: ScreenTools.smallFontPointSize text: qsTr("Actual AMSL alt sent: %1 %2").arg(missionItem.amslAltAboveTerrain.valueString).arg(missionItem.amslAltAboveTerrain.units) - visible: missionItem.altitudeMode === QGroundControl.AltitudeModeCalcAboveTerrain + visible: missionItem.altitudeFrame === QGroundControl.AltitudeFrameCalcAboveTerrain } } diff --git a/src/PlanView/StructureScanEditor.qml b/src/PlanView/StructureScanEditor.qml index 94f624954800..4c183233400d 100644 --- a/src/PlanView/StructureScanEditor.qml +++ b/src/PlanView/StructureScanEditor.qml @@ -140,14 +140,14 @@ Rectangle { QGCLabel { text: qsTr("Scan Bottom Alt") } AltitudeFactTextField { fact: missionItem.scanBottomAlt - altitudeMode: QGroundControl.AltitudeModeRelative + altitudeFrame: QGroundControl.AltitudeFrameRelative Layout.fillWidth: true } QGCLabel { text: qsTr("Entrance/Exit Alt") } AltitudeFactTextField { fact: missionItem.entranceAlt - altitudeMode: QGroundControl.AltitudeModeRelative + altitudeFrame: QGroundControl.AltitudeFrameRelative Layout.fillWidth: true } diff --git a/src/PlanView/SurveyItemEditor.qml b/src/PlanView/SurveyItemEditor.qml index c99df42a8346..7db2dfbf6d34 100644 --- a/src/PlanView/SurveyItemEditor.qml +++ b/src/PlanView/SurveyItemEditor.qml @@ -70,13 +70,13 @@ TransectStyleComplexItemEditor { { text: qsTr("Hover and capture image"), fact: missionItem.hoverAndCapture, - enabled: missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeModeRelative || missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeModeAbsolute, + enabled: missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeFrameRelative || missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeFrameAbsolute, visible: missionItem.hoverAndCaptureAllowed }, { text: qsTr("Refly at 90 deg offset"), fact: missionItem.refly90Degrees, - enabled: missionItem.cameraCalc.distanceMode !== QGroundControl.AltitudeModeCalcAboveTerrain, + enabled: missionItem.cameraCalc.distanceMode !== QGroundControl.AltitudeFrameCalcAboveTerrain, visible: true }, { diff --git a/src/PlanView/TransectStyleComplexItemTerrainFollow.qml b/src/PlanView/TransectStyleComplexItemTerrainFollow.qml index de1872f6a353..1d289091628e 100644 --- a/src/PlanView/TransectStyleComplexItemTerrainFollow.qml +++ b/src/PlanView/TransectStyleComplexItemTerrainFollow.qml @@ -18,29 +18,29 @@ ColumnLayout { onClicked: { var removeModes = [] - var updateFunction = function(altMode){ missionItem.cameraCalc.distanceMode = altMode } - removeModes.push(QGroundControl.AltitudeModeMixed) + var updateFunction = function(altFrame){ missionItem.cameraCalc.distanceMode = altFrame } + removeModes.push(QGroundControl.AltitudeFrameMixed) if (!missionItem.masterController.controllerVehicle.supports.terrainFrame) { - removeModes.push(QGroundControl.AltitudeModeTerrainFrame) + removeModes.push(QGroundControl.AltitudeFrameTerrain) } - if (!QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || !_missionItem.cameraCalc.isManualCamera) { - removeModes.push(QGroundControl.AltitudeModeAbsolute) + if (!QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || !missionItem.cameraCalc.isManualCamera) { + removeModes.push(QGroundControl.AltitudeFrameAbsolute) } - altModeDialogFactory.open({ rgRemoveModes: removeModes, updateAltModeFn: updateFunction }) + altFrameDialogFactory.open({ currentAltFrame: missionItem.cameraCalc.distanceMode, rgRemoveModes: removeModes, updateAltFrameFn: updateFunction }) } QGCPopupDialogFactory { - id: altModeDialogFactory + id: altFrameDialogFactory - dialogComponent: altModeDialogComponent + dialogComponent: altFrameDialogComponent } - Component { id: altModeDialogComponent; AltModeDialog { } } + Component { id: altFrameDialogComponent; AltFrameDialog { } } RowLayout { spacing: ScreenTools.defaultFontPixelWidth / 2 - QGCLabel { text: QGroundControl.altitudeModeShortDescription(missionItem.cameraCalc.distanceMode) } + QGCLabel { text: QGroundControl.altitudeFrameShortDescription(missionItem.cameraCalc.distanceMode) } QGCColoredImage { height: ScreenTools.defaultFontPixelHeight / 2 width: height @@ -55,7 +55,7 @@ ColumnLayout { columnSpacing: _margin rowSpacing: _margin columns: 2 - enabled: missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeModeCalcAboveTerrain + enabled: missionItem.cameraCalc.distanceMode === QGroundControl.AltitudeFrameCalcAboveTerrain QGCLabel { text: qsTr("Tolerance") } FactTextField { diff --git a/src/PlanView/VTOLLandingPatternEditor.qml b/src/PlanView/VTOLLandingPatternEditor.qml index 4a6402df208f..9f349efba09f 100644 --- a/src/PlanView/VTOLLandingPatternEditor.qml +++ b/src/PlanView/VTOLLandingPatternEditor.qml @@ -26,7 +26,7 @@ Rectangle { property real _spacer: ScreenTools.defaultFontPixelWidth / 2 property string _setToVehicleHeadingStr: qsTr("Set to vehicle heading") property string _setToVehicleLocationStr: qsTr("Set to vehicle location") - property int _altitudeMode: missionItem.altitudesAreRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute + property int _altitudeFrame: missionItem.altitudesAreRelative ? QGroundControl.AltitudeFrameRelative : QGroundControl.AltitudeFrameAbsolute Column { @@ -67,7 +67,7 @@ Rectangle { AltitudeFactTextField { Layout.fillWidth: true fact: missionItem.finalApproachAltitude - altitudeMode: _altitudeMode + altitudeFrame: _altitudeFrame } QGCLabel { @@ -129,7 +129,7 @@ Rectangle { AltitudeFactTextField { Layout.fillWidth: true fact: missionItem.landingAltitude - altitudeMode: _altitudeMode + altitudeFrame: _altitudeFrame } QGCLabel { text: qsTr("Landing Dist") } diff --git a/src/QmlControls/AltFrameCombo.qml b/src/QmlControls/AltFrameCombo.qml new file mode 100644 index 000000000000..f0e3620c9d9b --- /dev/null +++ b/src/QmlControls/AltFrameCombo.qml @@ -0,0 +1,60 @@ +import QtQuick + +import QGroundControl +import QGroundControl.Controls + +QGCComboBox { + required property int altitudeFrame + required property var vehicle + + textRole: "modeName" + + onActivated: (index) => { + let modeValue = altFrameModel.get(index).modeValue + altitudeFrame = modeValue + } + + ListModel { + id: altFrameModel + } + + Component.onCompleted: { + altFrameModel.append({ modeName: QGroundControl.altitudeFrameExtraUnits(QGroundControl.AltitudeFrameRelative), + modeValue: QGroundControl.AltitudeFrameRelative }) + altFrameModel.append({ modeName: QGroundControl.altitudeFrameExtraUnits(QGroundControl.AltitudeFrameAbsolute), + modeValue: QGroundControl.AltitudeFrameAbsolute }) + altFrameModel.append({ modeName: QGroundControl.altitudeFrameExtraUnits(QGroundControl.AltitudeFrameTerrain), + modeValue: QGroundControl.AltitudeFrameTerrain }) + altFrameModel.append({ modeName: QGroundControl.altitudeFrameExtraUnits(QGroundControl.AltitudeFrameCalcAboveTerrain), + modeValue: QGroundControl.AltitudeFrameCalcAboveTerrain }) + + let removeModes = [] + + if (!QGroundControl.corePlugin.options.showMissionAbsoluteAltitude && altitudeFrame != QGroundControl.AltitudeFrameAbsolute) { + removeModes.push(QGroundControl.AltitudeFrameAbsolute) + } + if (!vehicle.supports.terrainFrame) { + removeModes.push(QGroundControl.AltitudeFrameTerrain) + } + + // Remove modes specified by consumer + for (var i=0; i { - let modeValue = altModeModel.get(index).modeValue - altitudeMode = modeValue - } - - ListModel { - id: altModeModel - - ListElement { - modeName: qsTr("Relative") - modeValue: QGroundControl.AltitudeModeRelative - } - ListElement { - modeName: qsTr("Absolute") - modeValue: QGroundControl.AltitudeModeAbsolute - } - ListElement { - modeName: qsTr("Terrain") - modeValue: QGroundControl.AltitudeModeTerrainFrame - } - ListElement { - modeName: qsTr("TerrainC") - modeValue: QGroundControl.AltitudeModeCalcAboveTerrain - } - } - - Component.onCompleted: { - let removeModes = [] - - if (!QGroundControl.corePlugin.options.showMissionAbsoluteAltitude && altitudeMode != QGroundControl.AltitudeModeAbsolute) { - removeModes.push(QGroundControl.AltitudeModeAbsolute) - } - if (!vehicle.supports.terrainFrame) { - removeModes.push(QGroundControl.AltitudeModeTerrainFrame) - } - - // Remove modes specified by consumer - for (var i=0; iclearAllSignals(); } rgFacts.clear(); - _cameraCalc->setDistanceMode(_cameraCalc->distanceMode() == QGroundControlQmlGlobal::AltitudeModeRelative - ? QGroundControlQmlGlobal::AltitudeModeAbsolute - : QGroundControlQmlGlobal::AltitudeModeRelative); + _cameraCalc->setDistanceMode(_cameraCalc->distanceMode() == QGroundControlQmlGlobal::AltitudeFrameRelative + ? QGroundControlQmlGlobal::AltitudeFrameAbsolute + : QGroundControlQmlGlobal::AltitudeFrameRelative); QVERIFY(_cameraCalc->dirty()); _multiSpy->clearAllSignals(); _cameraCalc->setCameraBrand(CameraCalc::canonicalManualCameraName()); diff --git a/test/MissionManager/MissionControllerTest.cc b/test/MissionManager/MissionControllerTest.cc index bf5fc893eb17..9f30216871e6 100644 --- a/test/MissionManager/MissionControllerTest.cc +++ b/test/MissionManager/MissionControllerTest.cc @@ -371,24 +371,24 @@ void MissionControllerTest::_testLoadJsonSectionAvailable() } } -void MissionControllerTest::_testGlobalAltMode() +void MissionControllerTest::_testGlobalAltFrame() { _initForFirmwareType(MAV_AUTOPILOT_PX4); - struct _globalAltMode_s + struct _globalAltFrame_s { - QGroundControlQmlGlobal::AltMode altMode; + QGroundControlQmlGlobal::AltitudeFrame altFrame; MAV_FRAME expectedMavFrame; - } altModeTestCases[] = { - {QGroundControlQmlGlobal::AltitudeModeRelative, MAV_FRAME_GLOBAL_RELATIVE_ALT}, - {QGroundControlQmlGlobal::AltitudeModeAbsolute, MAV_FRAME_GLOBAL}, - {QGroundControlQmlGlobal::AltitudeModeCalcAboveTerrain, MAV_FRAME_GLOBAL}, - {QGroundControlQmlGlobal::AltitudeModeTerrainFrame, MAV_FRAME_GLOBAL_TERRAIN_ALT}, + } altFrameTestCases[] = { + {QGroundControlQmlGlobal::AltitudeFrameRelative, MAV_FRAME_GLOBAL_RELATIVE_ALT}, + {QGroundControlQmlGlobal::AltitudeFrameAbsolute, MAV_FRAME_GLOBAL}, + {QGroundControlQmlGlobal::AltitudeFrameCalcAboveTerrain, MAV_FRAME_GLOBAL}, + {QGroundControlQmlGlobal::AltitudeFrameTerrain, MAV_FRAME_GLOBAL_TERRAIN_ALT}, }; - for (const _globalAltMode_s& testCase : altModeTestCases) { + for (const _globalAltFrame_s& testCase : altFrameTestCases) { _missionController->removeAll(); - _missionController->setGlobalAltitudeMode(testCase.altMode); + _missionController->setGlobalAltitudeFrame(testCase.altFrame); // Use coordinate fixtures const QGeoCoordinate start = Coord::zurich(); _missionController->insertTakeoffItem(start, 1); @@ -397,13 +397,13 @@ void MissionControllerTest::_testGlobalAltMode() _missionController->insertSimpleMissionItem(start.atDistanceAndAzimuth(300, 0), 4); SimpleMissionItem* si = qobject_cast(_missionController->visualItems()->value(1)); - QCOMPARE(si->altitudeMode(), QGroundControlQmlGlobal::AltitudeModeRelative); + QCOMPARE(si->altitudeFrame(), QGroundControlQmlGlobal::AltitudeFrameRelative); QCOMPARE(si->missionItem().frame(), MAV_FRAME_GLOBAL_RELATIVE_ALT); for (int i = 2; i < _missionController->visualItems()->count(); i++) { - TEST_DEBUG(QStringLiteral("Validating altitude mode index %1").arg(i)); + TEST_DEBUG(QStringLiteral("Validating altitude frame index %1").arg(i)); SimpleMissionItem* siLoop = qobject_cast(_missionController->visualItems()->value(i)); - QCOMPARE(siLoop->altitudeMode(), testCase.altMode); + QCOMPARE(siLoop->altitudeFrame(), testCase.altFrame); QCOMPARE(siLoop->missionItem().frame(), testCase.expectedMavFrame); } } diff --git a/test/MissionManager/MissionControllerTest.h b/test/MissionManager/MissionControllerTest.h index 3f4432eaa89d..042de6a30582 100644 --- a/test/MissionManager/MissionControllerTest.h +++ b/test/MissionManager/MissionControllerTest.h @@ -20,7 +20,7 @@ private slots: void cleanup() override; void _testLoadJsonSectionAvailable(); - void _testGlobalAltMode(); + void _testGlobalAltFrame(); void _testGimbalRecalc(); void _testVehicleYawRecalc(); void _testMissionReposition(); diff --git a/test/MissionManager/SimpleMissionItemTest.cc b/test/MissionManager/SimpleMissionItemTest.cc index 276520e569f7..b666ba5c9d14 100644 --- a/test/MissionManager/SimpleMissionItemTest.cc +++ b/test/MissionManager/SimpleMissionItemTest.cc @@ -57,19 +57,19 @@ void SimpleMissionItemTest::_testEditorFactsWorker(QGCMAVLink::VehicleClass_t ve MAV_CMD command; MAV_FRAME frame; double altValue; - QGroundControlQmlGlobal::AltMode altMode; + QGroundControlQmlGlobal::AltitudeFrame altFrame; } TestCase_t; TestCase_t testCases[] = { {MAV_CMD_NAV_WAYPOINT, MAV_FRAME_GLOBAL_RELATIVE_ALT, 70.1234567, - QGroundControlQmlGlobal::AltitudeModeRelative}, - {MAV_CMD_NAV_LOITER_UNLIM, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeModeAbsolute}, + QGroundControlQmlGlobal::AltitudeFrameRelative}, + {MAV_CMD_NAV_LOITER_UNLIM, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeFrameAbsolute}, {MAV_CMD_NAV_LOITER_TURNS, MAV_FRAME_GLOBAL_RELATIVE_ALT, 70.1234567, - QGroundControlQmlGlobal::AltitudeModeRelative}, - {MAV_CMD_NAV_LOITER_TIME, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeModeAbsolute}, - {MAV_CMD_NAV_LAND, MAV_FRAME_GLOBAL_RELATIVE_ALT, 70.1234567, QGroundControlQmlGlobal::AltitudeModeRelative}, - {MAV_CMD_NAV_TAKEOFF, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeModeAbsolute}, - {MAV_CMD_DO_JUMP, MAV_FRAME_MISSION, qQNaN(), QGroundControlQmlGlobal::AltitudeModeRelative}, + QGroundControlQmlGlobal::AltitudeFrameRelative}, + {MAV_CMD_NAV_LOITER_TIME, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeFrameAbsolute}, + {MAV_CMD_NAV_LAND, MAV_FRAME_GLOBAL_RELATIVE_ALT, 70.1234567, QGroundControlQmlGlobal::AltitudeFrameRelative}, + {MAV_CMD_NAV_TAKEOFF, MAV_FRAME_GLOBAL, 70.1234567, QGroundControlQmlGlobal::AltitudeFrameAbsolute}, + {MAV_CMD_DO_JUMP, MAV_FRAME_MISSION, qQNaN(), QGroundControlQmlGlobal::AltitudeFrameRelative}, }; PlanMasterController planController(MAV_AUTOPILOT_PX4, QGCMAVLink::vehicleClassToMavType(vehicleClass)); QGCMAVLink::VehicleClass_t commandVehicleClass = @@ -167,7 +167,7 @@ void SimpleMissionItemTest::_testEditorFactsWorker(QGCMAVLink::VehicleClass_t ve QCOMPARE(fact->rawValue().toDouble(), (cExpectedAdvancedNaNFieldInfo[j].first * 10.0) + 0.1234567); } if (!qIsNaN(testCase.altValue)) { - QCOMPARE(simpleMissionItem.altitudeMode(), testCase.altMode); + QCOMPARE(simpleMissionItem.altitudeFrame(), testCase.altFrame); QCOMPARE(simpleMissionItem.altitude()->rawValue().toDouble(), testCase.altValue); } } @@ -240,12 +240,12 @@ void SimpleMissionItemTest::_testSignals() missionItem.setParam1(missionItem.param4() + 1); QVERIFY(_spyVisualItem->emitted("dirtyChanged")); _spyVisualItem->clearAllSignals(); - // Changing altitude mode should emit these signals (may also emit other related signals) - _simpleItem->setAltitudeMode(_simpleItem->altitudeMode() == QGroundControlQmlGlobal::AltitudeModeRelative - ? QGroundControlQmlGlobal::AltitudeModeAbsolute - : QGroundControlQmlGlobal::AltitudeModeRelative); + // Changing altitude frame should emit these signals (may also emit other related signals) + _simpleItem->setAltitudeFrame(_simpleItem->altitudeFrame() == QGroundControlQmlGlobal::AltitudeFrameRelative + ? QGroundControlQmlGlobal::AltitudeFrameAbsolute + : QGroundControlQmlGlobal::AltitudeFrameRelative); QVERIFY(_spySimpleItem->emittedByMask( - _spySimpleItem->mask("dirtyChanged", "friendlyEditAllowedChanged", "altitudeModeChanged"))); + _spySimpleItem->mask("dirtyChanged", "friendlyEditAllowedChanged", "altitudeFrameChanged"))); _spySimpleItem->clearAllSignals(); _spyVisualItem->clearAllSignals(); // Check commandChanged signalling. Call setCommand should trigger: @@ -318,11 +318,11 @@ void SimpleMissionItemTest::_testSpeedSection() void SimpleMissionItemTest::_testAltitudePropogation() { // Make sure that changes to altitude propogate to param 7 of the mission item - _simpleItem->setAltitudeMode(QGroundControlQmlGlobal::AltitudeModeRelative); + _simpleItem->setAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrameRelative); _simpleItem->altitude()->setRawValue(_simpleItem->altitude()->rawValue().toDouble() + 1); QCOMPARE(_simpleItem->altitude()->rawValue().toDouble(), _simpleItem->missionItem().param7()); QCOMPARE(_simpleItem->missionItem().frame(), MAV_FRAME_GLOBAL_RELATIVE_ALT); - _simpleItem->setAltitudeMode(QGroundControlQmlGlobal::AltitudeModeAbsolute); + _simpleItem->setAltitudeFrame(QGroundControlQmlGlobal::AltitudeFrameAbsolute); _simpleItem->altitude()->setRawValue(_simpleItem->altitude()->rawValue().toDouble() + 1); QCOMPARE(_simpleItem->altitude()->rawValue().toDouble(), _simpleItem->missionItem().param7()); QCOMPARE(_simpleItem->missionItem().frame(), MAV_FRAME_GLOBAL); diff --git a/test/UnitTestFramework/Fixtures/RAIIFixtures.cc b/test/UnitTestFramework/Fixtures/RAIIFixtures.cc index 7380adff5a15..54c5d9f3d4b4 100644 --- a/test/UnitTestFramework/Fixtures/RAIIFixtures.cc +++ b/test/UnitTestFramework/Fixtures/RAIIFixtures.cc @@ -150,11 +150,6 @@ void SettingsFixture::setOfflineVehicleType(MAV_TYPE vehicleType) appSettings->offlineEditingVehicleClass()->setRawValue(QGCMAVLink::vehicleClass(vehicleType)); } -void SettingsFixture::setAltitudeMode(int altitudeMode) -{ - Q_UNUSED(altitudeMode); -} - void SettingsFixture::setFactValue(Fact* fact, const QVariant& value) { if (!fact) { diff --git a/test/UnitTestFramework/Fixtures/RAIIFixtures.h b/test/UnitTestFramework/Fixtures/RAIIFixtures.h index 34d8a7269dcc..18c7f790f749 100644 --- a/test/UnitTestFramework/Fixtures/RAIIFixtures.h +++ b/test/UnitTestFramework/Fixtures/RAIIFixtures.h @@ -113,9 +113,6 @@ class SettingsFixture /// Set offline editing vehicle type void setOfflineVehicleType(MAV_TYPE vehicleType); - /// Set global altitude mode - void setAltitudeMode(int altitudeMode); - /// Set a Fact value (will be restored on destruction) void setFactValue(Fact* fact, const QVariant& value); From 07b7fccefa2888a1a66bd7c8c87c807f7b24972e Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 11 Mar 2026 13:36:49 -0700 Subject: [PATCH 3/4] Guard _visualItems.get(0) against empty model during initialization Add count checks before accessing _visualItems.get(0) in PlanView.qml to prevent warnings during the gap between QML construction and MissionController.start() populating the model. --- src/PlanView/PlanView.qml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml index 02c91f7bf53c..cd48235c1f65 100644 --- a/src/PlanView/PlanView.qml +++ b/src/PlanView/PlanView.qml @@ -164,7 +164,7 @@ Item { // Stop tracking map center when the home position is changed externally (e.g. drag, file load) Connections { - target: _visualItems.get(0) + target: _visualItems.count > 0 ? _visualItems.get(0) : null function onCoordinateChanged() { if (!_updatingHomeFromMapCenter && !_planMasterController.containsItems) { _homeTrackingMapCenter = false @@ -178,9 +178,11 @@ Item { function onContainsItemsChanged() { if (!_planMasterController.containsItems) { _homeTrackingMapCenter = true - _updatingHomeFromMapCenter = true - _visualItems.get(0).coordinate = editorMap.center - _updatingHomeFromMapCenter = false + if (_visualItems.count > 0) { + _updatingHomeFromMapCenter = true + _visualItems.get(0).coordinate = editorMap.center + _updatingHomeFromMapCenter = false + } } } } @@ -279,7 +281,7 @@ Item { } onCenterChanged: { QGroundControl.flightMapPosition = editorMap.center - if (_homeTrackingMapCenter && !_planMasterController.containsItems) { + if (_homeTrackingMapCenter && !_planMasterController.containsItems && _visualItems.count > 0) { _updatingHomeFromMapCenter = true _visualItems.get(0).coordinate = editorMap.center _updatingHomeFromMapCenter = false From 454e786114ff3116fc8e5482b7d55c5bef26ade8 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 11 Mar 2026 13:36:59 -0700 Subject: [PATCH 4/4] QGCTabBar: reset to first tab when becoming visible Ensures the tab selection resets when the tab bar becomes visible, preventing stale selection state when tabs are dynamically shown/hidden. Also calls _selectCurrentIndexButton() explicitly in case currentIndex is already 0 and onCurrentIndexChanged would not fire. --- src/QmlControls/QGCTabBar.qml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/QmlControls/QGCTabBar.qml b/src/QmlControls/QGCTabBar.qml index 2fc7d98f0bd4..e99d47844d8b 100644 --- a/src/QmlControls/QGCTabBar.qml +++ b/src/QmlControls/QGCTabBar.qml @@ -67,6 +67,15 @@ RowLayout { onCurrentIndexChanged: _selectCurrentIndexButton() onVisibleChildrenChanged: _selectCurrentIndexButton() + onVisibleChanged: { + if (visible) { + // When becoming visible, ensure the current index is valid and a button is selected + currentIndex = 0 + _selectCurrentIndexButton() + } + } + + ButtonGroup { id: buttonGroup