From 4b69460c81a2ace5288244523d15f10e109ff56d Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 18 Apr 2017 10:41:19 -0700 Subject: [PATCH 1/5] Allow translation of cm/px units --- src/FactSystem/FactMetaData.cc | 17 +++++++++++++++-- src/FactSystem/FactMetaData.h | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/FactSystem/FactMetaData.cc b/src/FactSystem/FactMetaData.cc index dc96514..2fc8841 100644 --- a/src/FactSystem/FactMetaData.cc +++ b/src/FactSystem/FactMetaData.cc @@ -28,8 +28,9 @@ const qreal FactMetaData::UnitConsts_s::secondsPerHour = 3600.0; const qreal FactMetaData::UnitConsts_s::knotsToKPH = 1.852; // exact, hence weird base for knotsToMetersPerSecond // Length -const qreal FactMetaData::UnitConsts_s::milesToMeters = 1609.344; -const qreal FactMetaData::UnitConsts_s::feetToMeters = 0.3048; +const qreal FactMetaData::UnitConsts_s::milesToMeters = 1609.344; +const qreal FactMetaData::UnitConsts_s::feetToMeters = 0.3048; +const qreal FactMetaData::UnitConsts_s::inchesToCentimeters = 2.54; // Built in translations for all Facts const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[] = { @@ -42,10 +43,12 @@ const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[] const FactMetaData::AppSettingsTranslation_s FactMetaData::_rgAppSettingsTranslations[] = { { "m", "m", false, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "meters", "meters", false, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, + { "cm/px", "cm/px", false, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m/s", "m/s", true, UnitsSettings::SpeedUnitsMetersPerSecond, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m^2", "m^2", false, UnitsSettings::AreaUnitsSquareMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m", "ft", false, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, { "meters", "ft", false, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, + { "cm/px", "in/px", false, UnitsSettings::DistanceUnitsFeet, FactMetaData::_centimetersToInches, FactMetaData::_inchesToCentimeters }, { "m^2", "km^2", false, UnitsSettings::AreaUnitsSquareKilometers, FactMetaData::_squareMetersToSquareKilometers, FactMetaData::_squareKilometersToSquareMeters }, { "m^2", "ha", false, UnitsSettings::AreaUnitsHectares, FactMetaData::_squareMetersToHectares, FactMetaData::_hectaresToSquareMeters }, { "m^2", "ft^2", false, UnitsSettings::AreaUnitsSquareFeet, FactMetaData::_squareMetersToSquareFeet, FactMetaData::_squareFeetToSquareMeters }, @@ -552,6 +555,16 @@ QVariant FactMetaData::_normToPercent(const QVariant& normalized) return QVariant(normalized.toDouble() * 100.0); } +QVariant FactMetaData::_centimetersToInches(const QVariant& centimeters) +{ + return QVariant(centimeters.toDouble() * 1.0/constants.inchesToCentimeters); +} + +QVariant FactMetaData::_inchesToCentimeters(const QVariant& inches) +{ + return QVariant(inches.toDouble() * constants.inchesToCentimeters); +} + void FactMetaData::setRawUnits(const QString& rawUnits) { _rawUnits = rawUnits; diff --git a/src/FactSystem/FactMetaData.h b/src/FactSystem/FactMetaData.h index 3bc51f2..60f4e6c 100644 --- a/src/FactSystem/FactMetaData.h +++ b/src/FactSystem/FactMetaData.h @@ -175,6 +175,8 @@ private: static QVariant _knotsToMetersPerSecond(const QVariant& knots); static QVariant _percentToNorm(const QVariant& percent); static QVariant _normToPercent(const QVariant& normalized); + static QVariant _centimetersToInches(const QVariant& centimeters); + static QVariant _inchesToCentimeters(const QVariant& inches); struct AppSettingsTranslation_s { const char* rawUnits; @@ -218,6 +220,7 @@ private: static const qreal knotsToKPH; static const qreal milesToMeters; static const qreal feetToMeters; + static const qreal inchesToCentimeters; } constants; struct BuiltInTranslation_s { From 17ae0fb5a12afc3b5961d777dd615327a3b4ff7f Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 18 Apr 2017 10:41:27 -0700 Subject: [PATCH 2/5] Hack in meta data fix --- src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml b/src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml index 88b39f7..4da3065 100644 --- a/src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml +++ b/src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml @@ -650,7 +650,7 @@ velocity Return to land Warning - Return to land at critically low level, land at current position if reaching dangerously low levels + RTL, land immediately if battery too low Land at current position From 890bb67b7fde7146928ac84ff6708d9b25c7ea5d Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 18 Apr 2017 10:41:42 -0700 Subject: [PATCH 3/5] New Continue Mission action --- src/FlightDisplay/FlightDisplayView.qml | 6 ++++ src/FlightDisplay/GuidedActionsController.qml | 43 +++++++++++++++++---------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index 008f265..c17b746 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -519,6 +519,12 @@ QGCView { } } + onShowContinueMissionChanged: { + if (showContinueMission) { + confirmAction(actionContinueMission) + } + } + onShowResumeMissionChanged: { if (showResumeMission) { confirmAction(actionResumeMission) diff --git a/src/FlightDisplay/GuidedActionsController.qml b/src/FlightDisplay/GuidedActionsController.qml index 96e8bf3..e19ff89 100644 --- a/src/FlightDisplay/GuidedActionsController.qml +++ b/src/FlightDisplay/GuidedActionsController.qml @@ -37,6 +37,7 @@ Item { readonly property string takeoffTitle: qsTr("Takeoff") readonly property string landTitle: qsTr("Land") readonly property string startMissionTitle: qsTr("Start Mission") + readonly property string continueMissionTitle: qsTr("Continue Mission") readonly property string resumeMissionTitle: qsTr("Resume Mission") readonly property string pauseTitle: qsTr("Pause") readonly property string changeAltTitle: qsTr("Change Altitude") @@ -50,6 +51,7 @@ Item { readonly property string emergencyStopMessage: qsTr("WARNING: This still stop all motors. If vehicle is currently in air it will crash.") readonly property string takeoffMessage: qsTr("Takeoff from ground and hold position.") readonly property string startMissionMessage: qsTr("Start the mission which is currently displayed above. If the vehicle is on the ground it will takeoff.") + readonly property string continueMissionMessage: qsTr("Continue the mission from the current waypoint.") property string resumeMissionMessage: qsTr("Resume the mission which is displayed above. This will re-generate the mission from waypoint %1, takeoff and continue the mission.").arg(_resumeMissionIndex) readonly property string resumeMissionReadyMessage: qsTr("Review the modified mission above. Confirm if you want to takeoff and begin mission.") readonly property string landMessage: qsTr("Land the vehicle at the current position.") @@ -73,29 +75,32 @@ Item { readonly property int actionOrbit: 10 readonly property int actionLandAbort: 11 readonly property int actionStartMission: 12 - readonly property int actionResumeMission: 13 - readonly property int actionResumeMissionReady: 14 - readonly property int actionPause: 15 + readonly property int actionContinueMission: 13 + readonly property int actionResumeMission: 14 + readonly property int actionResumeMissionReady: 15 + readonly property int actionPause: 16 - property bool showEmergenyStop: !_hideEmergenyStop && _activeVehicle && _vehicleArmed && _activeVehicle.flying + property bool showEmergenyStop: !_hideEmergenyStop && _activeVehicle && _vehicleArmed && _vehicleFlying property bool showArm: _activeVehicle && !_vehicleArmed - property bool showDisarm: _activeVehicle && _vehicleArmed && !_activeVehicle.flying - property bool showRTL: _activeVehicle && _vehicleArmed && _activeVehicle.guidedModeSupported && _activeVehicle.flying && !_vehicleInRTLMode - property bool showTakeoff: _activeVehicle && _activeVehicle.guidedModeSupported && !_activeVehicle.flying && !_activeVehicle.fixedWing + property bool showDisarm: _activeVehicle && _vehicleArmed && !_vehicleFlying + property bool showRTL: _activeVehicle && _vehicleArmed && _activeVehicle.guidedModeSupported && _vehicleFlying && !_vehicleInRTLMode + property bool showTakeoff: _activeVehicle && _activeVehicle.guidedModeSupported && !_vehicleFlying && !_activeVehicle.fixedWing property bool showLand: _activeVehicle && _activeVehicle.guidedModeSupported && _vehicleArmed && !_activeVehicle.fixedWing && !_vehicleInLandMode - property bool showStartMission: _activeVehicle && _missionAvailable && !_missionActive - property bool showResumeMission: _activeVehicle && !_activeVehicle.flying && _missionAvailable && _resumeMissionIndex > 0 - property bool showPause: _activeVehicle && _vehicleArmed && _activeVehicle.pauseVehicleSupported && _activeVehicle.flying && !_vehiclePaused - property bool showChangeAlt: (_activeVehicle && _activeVehicle.flying) && _activeVehicle.guidedModeSupported && _vehicleArmed && !_missionActive - property bool showOrbit: !_hideOrbit && _activeVehicle && _activeVehicle.flying && _activeVehicle.orbitModeSupported && _vehicleArmed && !_missionActive - property bool showLandAbort: _activeVehicle && _activeVehicle.flying && _activeVehicle.fixedWing - property bool showGotoLocation: _activeVehicle && _activeVehicle.guidedMode && _activeVehicle.flying + property bool showStartMission: _activeVehicle && _missionAvailable && !_missionActive && !_vehicleFlying + property bool showContinueMission: _activeVehicle && _missionAvailable && !_missionActive && _vehicleFlying + property bool showResumeMission: _activeVehicle && !_vehicleFlying && _missionAvailable && _resumeMissionIndex > 0 + property bool showPause: _activeVehicle && _vehicleArmed && _activeVehicle.pauseVehicleSupported && _vehicleFlying && !_vehiclePaused + property bool showChangeAlt: (_activeVehicle && _vehicleFlying) && _activeVehicle.guidedModeSupported && _vehicleArmed && !_missionActive + property bool showOrbit: !_hideOrbit && _activeVehicle && _vehicleFlying && _activeVehicle.orbitModeSupported && _vehicleArmed && !_missionActive + property bool showLandAbort: _activeVehicle && _vehicleFlying && _activeVehicle.fixedWing + property bool showGotoLocation: _activeVehicle && _activeVehicle.guidedMode && _vehicleFlying property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property string _flightMode: _activeVehicle ? _activeVehicle.flightMode : "" property bool _missionAvailable: missionController.containsItems property bool _missionActive: _activeVehicle ? _vehicleArmed && (_vehicleInLandMode || _vehicleInRTLMode || _vehicleInMissionMode) : false property bool _vehicleArmed: _activeVehicle ? _activeVehicle.armed : false + property bool _vehicleFlying: _activeVehicle ? _activeVehicle.flying : false property bool _vehiclePaused: false property bool _vehicleInMissionMode: false property bool _vehicleInRTLMode: false @@ -119,7 +124,7 @@ Item { _actionData = actionData switch (actionCode) { case actionArm: - if (_activeVehicle.flying) { + if (_vehicleFlying) { return } confirmDialog.title = armTitle @@ -127,7 +132,7 @@ Item { confirmDialog.hideTrigger = Qt.binding(function() { return !showArm }) break; case actionDisarm: - if (_activeVehicle.flying) { + if (_vehicleFlying) { return } confirmDialog.title = disarmTitle @@ -149,6 +154,11 @@ Item { confirmDialog.message = startMissionMessage confirmDialog.hideTrigger = Qt.binding(function() { return !showStartMission }) break; + case actionContinueMission: + confirmDialog.title = continueMissionTitle + confirmDialog.message = continueMissionMessage + confirmDialog.hideTrigger = Qt.binding(function() { return !showContinueMission }) + break; case actionResumeMission: confirmDialog.title = resumeMissionTitle confirmDialog.message = resumeMissionMessage @@ -224,6 +234,7 @@ Item { _activeVehicle.startMission() break case actionStartMission: + case actionContinueMission: _activeVehicle.startMission() break case actionArm: From 89c5e5ed16a0e5578024b578fd3959501b785c28 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 18 Apr 2017 10:41:57 -0700 Subject: [PATCH 4/5] QGC location now uses app name for letter --- src/FlightMap/FlightMap.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlightMap/FlightMap.qml b/src/FlightMap/FlightMap.qml index f6ec45f..d774b36 100644 --- a/src/FlightMap/FlightMap.qml +++ b/src/FlightMap/FlightMap.qml @@ -122,7 +122,7 @@ Map { visible: gcsPosition.isValid coordinate: gcsPosition sourceItem: MissionItemIndexLabel { - label: "Q" + label: QGroundControl.appName.charAt(0) } } } // Map From 33f47d603e1b49f02a003d04fb3ef270711166cf Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 18 Apr 2017 10:42:06 -0700 Subject: [PATCH 5/5] Remove all removes from vehicle as well --- src/PlanView/PlanView.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml index 0e2267a..84dddc1 100644 --- a/src/PlanView/PlanView.qml +++ b/src/PlanView/PlanView.qml @@ -822,10 +822,10 @@ QGCView { Component { id: removeAllPromptDialog QGCViewMessage { - message: qsTr("Are you sure you want to remove all items?") + message: qsTr("Are you sure you want to remove all items? This will also remove all items from the vehicle.") function accept() { itemDragger.clearItem() - _syncDropDownController.removeAll() + _syncDropDownController.removeAllFromVehicle() hideDialog() } }