Unverified Commit 8151a6cd authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #8692 from airmap/units-of-measure

Introduce weight unit and separate distance unit from altitude
parents 72c97a09 127a8b2f
...@@ -66,7 +66,7 @@ Item { ...@@ -66,7 +66,7 @@ Item {
if (activeVehicle && gcsPosition.latitude && Math.abs(gcsPosition.latitude) > 0.001 && gcsPosition.longitude && Math.abs(gcsPosition.longitude) > 0.001) { if (activeVehicle && gcsPosition.latitude && Math.abs(gcsPosition.latitude) > 0.001 && gcsPosition.longitude && Math.abs(gcsPosition.longitude) > 0.001) {
var gcs = QtPositioning.coordinate(gcsPosition.latitude, gcsPosition.longitude) var gcs = QtPositioning.coordinate(gcsPosition.latitude, gcsPosition.longitude)
var veh = activeVehicle.coordinate; var veh = activeVehicle.coordinate;
_distance = QGroundControl.metersToAppSettingsDistanceUnits(gcs.distanceTo(veh)); _distance = QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(gcs.distanceTo(veh));
//-- Ignore absurd values //-- Ignore absurd values
if(_distance > 99999) if(_distance > 99999)
_distance = 0; _distance = 0;
......
...@@ -434,6 +434,7 @@ contains (DEFINES, QGC_ENABLE_PAIRING) { ...@@ -434,6 +434,7 @@ contains (DEFINES, QGC_ENABLE_PAIRING) {
# #
HEADERS += \ HEADERS += \
src/QmlControls/QmlUnitsConversion.h \
src/api/QGCCorePlugin.h \ src/api/QGCCorePlugin.h \
src/api/QGCOptions.h \ src/api/QGCOptions.h \
src/api/QGCSettings.h \ src/api/QGCSettings.h \
......
...@@ -151,7 +151,7 @@ SetupPage { ...@@ -151,7 +151,7 @@ SetupPage {
} }
function _radiansToHeading(radians) { function _radiansToHeading(radians) {
var geometricAngle = QGroundControl.radiansToDegrees(radians) var geometricAngle = QGroundControl.unitsConversion.radiansToDegrees(radians)
var headingAngle = 90 - geometricAngle var headingAngle = 90 - geometricAngle
if (headingAngle < 0) { if (headingAngle < 0) {
headingAngle += 360 headingAngle += 360
...@@ -163,7 +163,7 @@ SetupPage { ...@@ -163,7 +163,7 @@ SetupPage {
function _headingToRadians(heading) { function _headingToRadians(heading) {
var geometricAngle = -(heading - 90) var geometricAngle = -(heading - 90)
return QGroundControl.degreesToRadians(geometricAngle) return QGroundControl.unitsConversion.degreesToRadians(geometricAngle)
} }
APMFollowComponentController { APMFollowComponentController {
...@@ -419,7 +419,7 @@ SetupPage { ...@@ -419,7 +419,7 @@ SetupPage {
QGCLabel { QGCLabel {
id: distanceLabel id: distanceLabel
anchors.centerIn: distanceLine anchors.centerIn: distanceLine
text: controller.distance.valueString + " " + QGroundControl.appSettingsDistanceUnitsString text: controller.distance.valueString + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
transform: Rotation { transform: Rotation {
origin.x: distanceLabel.width / 2 origin.x: distanceLabel.width / 2
...@@ -497,7 +497,7 @@ SetupPage { ...@@ -497,7 +497,7 @@ SetupPage {
QGCLabel { QGCLabel {
id: heightValueLabel id: heightValueLabel
anchors.centerIn: parent anchors.centerIn: parent
text: controller.height.valueString + " " + QGroundControl.appSettingsDistanceUnitsString text: controller.height.valueString + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
} }
} }
......
...@@ -198,7 +198,7 @@ SetupPage { ...@@ -198,7 +198,7 @@ SetupPage {
} }
QGCLabel { QGCLabel {
text: qsTr("Minimum Distance: (") + QGroundControl.appSettingsDistanceUnitsString + ")" text: qsTr("Minimum Distance: (") + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString + ")"
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
} }
...@@ -209,15 +209,15 @@ SetupPage { ...@@ -209,15 +209,15 @@ SetupPage {
Layout.minimumHeight: ScreenTools.defaultFontPixelHeight * 2 Layout.minimumHeight: ScreenTools.defaultFontPixelHeight * 2
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
maximumValue: QGroundControl.metersToAppSettingsDistanceUnits(15) maximumValue: QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(15)
minimumValue: QGroundControl.metersToAppSettingsDistanceUnits(1) minimumValue: QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(1)
stepSize: 1 stepSize: 1
displayValue: true displayValue: true
updateValueWhileDragging: false updateValueWhileDragging: false
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
value: { value: {
if (_collisionPrevention && _collisionPrevention.rawValue > 0) { if (_collisionPrevention && _collisionPrevention.rawValue > 0) {
return QGroundControl.metersToAppSettingsDistanceUnits(_collisionPrevention.rawValue) return QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_collisionPrevention.rawValue)
} else { } else {
return 1; return 1;
} }
...@@ -226,7 +226,7 @@ SetupPage { ...@@ -226,7 +226,7 @@ SetupPage {
if(_collisionPrevention) { if(_collisionPrevention) {
//-- Negative means disabled //-- Negative means disabled
if(_collisionPrevention.rawValue >= 0) { if(_collisionPrevention.rawValue >= 0) {
_collisionPrevention.rawValue = QGroundControl.appSettingsDistanceUnitsToMeters(value) _collisionPrevention.rawValue = QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsToMeters(value)
} }
} }
} }
......
...@@ -32,6 +32,11 @@ const qreal FactMetaData::UnitConsts_s::milesToMeters = 1609.344; ...@@ -32,6 +32,11 @@ const qreal FactMetaData::UnitConsts_s::milesToMeters = 1609.344;
const qreal FactMetaData::UnitConsts_s::feetToMeters = 0.3048; const qreal FactMetaData::UnitConsts_s::feetToMeters = 0.3048;
const qreal FactMetaData::UnitConsts_s::inchesToCentimeters = 2.54; const qreal FactMetaData::UnitConsts_s::inchesToCentimeters = 2.54;
//Weight
const qreal FactMetaData::UnitConsts_s::ouncesToGrams = 28.3495;
const qreal FactMetaData::UnitConsts_s::poundsToGrams = 453.592;
static const char* kDefaultCategory = QT_TRANSLATE_NOOP("FactMetaData", "Other"); static const char* kDefaultCategory = QT_TRANSLATE_NOOP("FactMetaData", "Other");
static const char* kDefaultGroup = QT_TRANSLATE_NOOP("FactMetaData", "Misc"); static const char* kDefaultGroup = QT_TRANSLATE_NOOP("FactMetaData", "Misc");
...@@ -48,27 +53,34 @@ const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[] ...@@ -48,27 +53,34 @@ const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[]
// Translations driven by app settings // Translations driven by app settings
const FactMetaData::AppSettingsTranslation_s FactMetaData::_rgAppSettingsTranslations[] = { const FactMetaData::AppSettingsTranslation_s FactMetaData::_rgAppSettingsTranslations[] = {
{ "m", "m", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m", "m", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "meter", "meter", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "meter", "meter", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "meters", "meters", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "meters", "meters", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "cm/px", "cm/px", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, //NOTE: we've coined an artificial "raw unit" of "vertical metre" to separate it from the horizontal metre - a bit awkward but this is all the design permits
{ "vertical m", "m", FactMetaData::UnitVerticalDistance, UnitsSettings::VerticalDistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "cm/px", "cm/px", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "m/s", "m/s", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsMetersPerSecond, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m/s", "m/s", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsMetersPerSecond, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "C", "C", FactMetaData::UnitTemperature, UnitsSettings::TemperatureUnitsCelsius, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "C", "C", FactMetaData::UnitTemperature, UnitsSettings::TemperatureUnitsCelsius, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "m^2", "m^2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator }, { "m^2", "m\u00B2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareMeters, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "m", "ft", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, { "m", "ft", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
{ "meter", "ft", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, { "meter", "ft", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
{ "meters", "ft", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, { "meters", "ft", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
{ "cm/px", "in/px", FactMetaData::UnitDistance, UnitsSettings::DistanceUnitsFeet, FactMetaData::_centimetersToInches, FactMetaData::_inchesToCentimeters }, { "alt m", "ft", FactMetaData::UnitVerticalDistance, UnitsSettings::VerticalDistanceUnitsFeet, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
{ "m^2", "km^2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareKilometers, FactMetaData::_squareMetersToSquareKilometers, FactMetaData::_squareKilometersToSquareMeters }, { "cm/px", "in/px", FactMetaData::UnitHorizontalDistance, UnitsSettings::HorizontalDistanceUnitsFeet, FactMetaData::_centimetersToInches, FactMetaData::_inchesToCentimeters },
{ "m^2", "km\u00B2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareKilometers, FactMetaData::_squareMetersToSquareKilometers, FactMetaData::_squareKilometersToSquareMeters },
{ "m^2", "ha", FactMetaData::UnitArea, UnitsSettings::AreaUnitsHectares, FactMetaData::_squareMetersToHectares, FactMetaData::_hectaresToSquareMeters }, { "m^2", "ha", FactMetaData::UnitArea, UnitsSettings::AreaUnitsHectares, FactMetaData::_squareMetersToHectares, FactMetaData::_hectaresToSquareMeters },
{ "m^2", "ft^2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareFeet, FactMetaData::_squareMetersToSquareFeet, FactMetaData::_squareFeetToSquareMeters }, { "m^2", "ft\u00B2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareFeet, FactMetaData::_squareMetersToSquareFeet, FactMetaData::_squareFeetToSquareMeters },
{ "m^2", "ac", FactMetaData::UnitArea, UnitsSettings::AreaUnitsAcres, FactMetaData::_squareMetersToAcres, FactMetaData::_acresToSquareMeters }, { "m^2", "ac", FactMetaData::UnitArea, UnitsSettings::AreaUnitsAcres, FactMetaData::_squareMetersToAcres, FactMetaData::_acresToSquareMeters },
{ "m^2", "mi^2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareMiles, FactMetaData::_squareMetersToSquareMiles, FactMetaData::_squareMilesToSquareMeters }, { "m^2", "mi\u00B2", FactMetaData::UnitArea, UnitsSettings::AreaUnitsSquareMiles, FactMetaData::_squareMetersToSquareMiles, FactMetaData::_squareMilesToSquareMeters },
{ "m/s", "ft/s", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsFeetPerSecond, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters }, { "m/s", "ft/s", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsFeetPerSecond, FactMetaData::_metersToFeet, FactMetaData::_feetToMeters },
{ "m/s", "mph", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsMilesPerHour, FactMetaData::_metersPerSecondToMilesPerHour, FactMetaData::_milesPerHourToMetersPerSecond }, { "m/s", "mph", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsMilesPerHour, FactMetaData::_metersPerSecondToMilesPerHour, FactMetaData::_milesPerHourToMetersPerSecond },
{ "m/s", "km/h", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsKilometersPerHour, FactMetaData::_metersPerSecondToKilometersPerHour, FactMetaData::_kilometersPerHourToMetersPerSecond }, { "m/s", "km/h", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsKilometersPerHour, FactMetaData::_metersPerSecondToKilometersPerHour, FactMetaData::_kilometersPerHourToMetersPerSecond },
{ "m/s", "kn", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsKnots, FactMetaData::_metersPerSecondToKnots, FactMetaData::_knotsToMetersPerSecond }, { "m/s", "kn", FactMetaData::UnitSpeed, UnitsSettings::SpeedUnitsKnots, FactMetaData::_metersPerSecondToKnots, FactMetaData::_knotsToMetersPerSecond },
{ "C", "F", FactMetaData::UnitTemperature, UnitsSettings::TemperatureUnitsFarenheit, FactMetaData::_celsiusToFarenheit, FactMetaData::_farenheitToCelsius }, { "C", "F", FactMetaData::UnitTemperature, UnitsSettings::TemperatureUnitsFarenheit, FactMetaData::_celsiusToFarenheit, FactMetaData::_farenheitToCelsius },
{ "g", "g", FactMetaData::UnitWeight, UnitsSettings::WeightUnitsGrams, FactMetaData::_defaultTranslator, FactMetaData::_defaultTranslator },
{ "g", "kg", FactMetaData::UnitWeight, UnitsSettings::WeightUnitsKg, FactMetaData::_gramsToKilograms, FactMetaData::_kilogramsToGrams },
{ "g", "oz", FactMetaData::UnitWeight, UnitsSettings::WeightUnitsOz, FactMetaData::_gramsToOunces, FactMetaData::_ouncesToGrams },
{ "g", "lbs", FactMetaData::UnitWeight, UnitsSettings::WeightUnitsLbs, FactMetaData::_gramsToPunds, FactMetaData::_poundsToGrams },
}; };
const char* FactMetaData::_decimalPlacesJsonKey = "decimalPlaces"; const char* FactMetaData::_decimalPlacesJsonKey = "decimalPlaces";
...@@ -790,6 +802,30 @@ QVariant FactMetaData::_farenheitToCelsius(const QVariant& farenheit) ...@@ -790,6 +802,30 @@ QVariant FactMetaData::_farenheitToCelsius(const QVariant& farenheit)
return QVariant((farenheit.toDouble() - 32) * (5.0 / 9.0)); return QVariant((farenheit.toDouble() - 32) * (5.0 / 9.0));
} }
QVariant FactMetaData::_kilogramsToGrams(const QVariant& kg) {
return QVariant(kg.toDouble() * 1000);
}
QVariant FactMetaData::_ouncesToGrams(const QVariant& oz) {
return QVariant(oz.toDouble() * constants.ouncesToGrams);
}
QVariant FactMetaData::_poundsToGrams(const QVariant& lbs) {
return QVariant(lbs.toDouble() * constants.poundsToGrams);
}
QVariant FactMetaData::_gramsToKilograms(const QVariant& g) {
return QVariant(g.toDouble() / 1000);
}
QVariant FactMetaData::_gramsToOunces(const QVariant& g) {
return QVariant(g.toDouble() / constants.ouncesToGrams);
}
QVariant FactMetaData::_gramsToPunds(const QVariant& g) {
return QVariant(g.toDouble() / constants.poundsToGrams);
}
void FactMetaData::setRawUnits(const QString& rawUnits) void FactMetaData::setRawUnits(const QString& rawUnits)
{ {
_rawUnits = rawUnits; _rawUnits = rawUnits;
...@@ -892,8 +928,11 @@ void FactMetaData::_setAppSettingsTranslators(void) ...@@ -892,8 +928,11 @@ void FactMetaData::_setAppSettingsTranslators(void)
uint settingsUnits = 0; uint settingsUnits = 0;
switch (pAppSettingsTranslation->unitType) { switch (pAppSettingsTranslation->unitType) {
case UnitDistance: case UnitHorizontalDistance:
settingsUnits = settings->distanceUnits()->rawValue().toUInt(); settingsUnits = settings->horizontalDistanceUnits()->rawValue().toUInt();
break;
case UnitVerticalDistance:
settingsUnits = settings->verticalDistanceUnits()->rawValue().toUInt();
break; break;
case UnitSpeed: case UnitSpeed:
settingsUnits = settings->speedUnits()->rawValue().toUInt(); settingsUnits = settings->speedUnits()->rawValue().toUInt();
...@@ -904,6 +943,9 @@ void FactMetaData::_setAppSettingsTranslators(void) ...@@ -904,6 +943,9 @@ void FactMetaData::_setAppSettingsTranslators(void)
case UnitTemperature: case UnitTemperature:
settingsUnits = settings->temperatureUnits()->rawValue().toUInt(); settingsUnits = settings->temperatureUnits()->rawValue().toUInt();
break; break;
case UnitWeight:
settingsUnits = settings->weightUnits()->rawValue().toUInt();
break;
default: default:
break; break;
} }
...@@ -917,7 +959,45 @@ void FactMetaData::_setAppSettingsTranslators(void) ...@@ -917,7 +959,45 @@ void FactMetaData::_setAppSettingsTranslators(void)
} }
} }
const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsDistanceUnitsTranslation(const QString& rawUnits) const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsHorizontalDistanceUnitsTranslation(const QString& rawUnits)
{
for (size_t i=0; i<sizeof(_rgAppSettingsTranslations)/sizeof(_rgAppSettingsTranslations[0]); i++) {
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
if (rawUnits.toLower() != pAppSettingsTranslation->rawUnits.toLower()) {
continue;
}
uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->horizontalDistanceUnits()->rawValue().toUInt();
if (pAppSettingsTranslation->unitType == UnitHorizontalDistance
&& pAppSettingsTranslation->unitOption == settingsUnits) {
return pAppSettingsTranslation;
}
}
return nullptr;
}
const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsVerticalDistanceUnitsTranslation(const QString& rawUnits)
{
for (size_t i=0; i<sizeof(_rgAppSettingsTranslations)/sizeof(_rgAppSettingsTranslations[0]); i++) {
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
if (rawUnits.toLower() != pAppSettingsTranslation->rawUnits.toLower()) {
continue;
}
uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->verticalDistanceUnits()->rawValue().toUInt();
if (pAppSettingsTranslation->unitType == UnitVerticalDistance
&& pAppSettingsTranslation->unitOption == settingsUnits) {
return pAppSettingsTranslation;
}
}
return nullptr;
}
const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsWeightUnitsTranslation(const QString& rawUnits)
{ {
for (size_t i=0; i<sizeof(_rgAppSettingsTranslations)/sizeof(_rgAppSettingsTranslations[0]); i++) { for (size_t i=0; i<sizeof(_rgAppSettingsTranslations)/sizeof(_rgAppSettingsTranslations[0]); i++) {
const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i]; const AppSettingsTranslation_s* pAppSettingsTranslation = &_rgAppSettingsTranslations[i];
...@@ -926,9 +1006,9 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsDist ...@@ -926,9 +1006,9 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsDist
continue; continue;
} }
uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->distanceUnits()->rawValue().toUInt(); uint settingsUnits = qgcApp()->toolbox()->settingsManager()->unitsSettings()->weightUnits()->rawValue().toUInt();
if (pAppSettingsTranslation->unitType == UnitDistance if (pAppSettingsTranslation->unitType == UnitWeight
&& pAppSettingsTranslation->unitOption == settingsUnits) { && pAppSettingsTranslation->unitOption == settingsUnits) {
return pAppSettingsTranslation; return pAppSettingsTranslation;
} }
...@@ -956,9 +1036,19 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsArea ...@@ -956,9 +1036,19 @@ const FactMetaData::AppSettingsTranslation_s* FactMetaData::_findAppSettingsArea
return nullptr; return nullptr;
} }
QVariant FactMetaData::metersToAppSettingsDistanceUnits(const QVariant& meters) QVariant FactMetaData::metersToAppSettingsHorizontalDistanceUnits(const QVariant& meters)
{
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsHorizontalDistanceUnitsTranslation("m");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->rawTranslator(meters);
} else {
return meters;
}
}
QVariant FactMetaData::metersToAppSettingsVerticalDistanceUnits(const QVariant& meters)
{ {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsDistanceUnitsTranslation("m"); const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsVerticalDistanceUnitsTranslation("vertical m");
if (pAppSettingsTranslation) { if (pAppSettingsTranslation) {
return pAppSettingsTranslation->rawTranslator(meters); return pAppSettingsTranslation->rawTranslator(meters);
} else { } else {
...@@ -966,9 +1056,9 @@ QVariant FactMetaData::metersToAppSettingsDistanceUnits(const QVariant& meters) ...@@ -966,9 +1056,9 @@ QVariant FactMetaData::metersToAppSettingsDistanceUnits(const QVariant& meters)
} }
} }
QVariant FactMetaData::appSettingsDistanceUnitsToMeters(const QVariant& distance) QVariant FactMetaData::appSettingsHorizontalDistanceUnitsToMeters(const QVariant& distance)
{ {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsDistanceUnitsTranslation("m"); const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsHorizontalDistanceUnitsTranslation("m");
if (pAppSettingsTranslation) { if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedTranslator(distance); return pAppSettingsTranslation->cookedTranslator(distance);
} else { } else {
...@@ -976,9 +1066,19 @@ QVariant FactMetaData::appSettingsDistanceUnitsToMeters(const QVariant& distance ...@@ -976,9 +1066,19 @@ QVariant FactMetaData::appSettingsDistanceUnitsToMeters(const QVariant& distance
} }
} }
QString FactMetaData::appSettingsDistanceUnitsString(void) QVariant FactMetaData::appSettingsVerticalDistanceUnitsToMeters(const QVariant& distance)
{ {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsDistanceUnitsTranslation("m"); const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsVerticalDistanceUnitsTranslation("alt m");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedTranslator(distance);
} else {
return distance;
}
}
QString FactMetaData::appSettingsHorizontalDistanceUnitsString(void)
{
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsHorizontalDistanceUnitsTranslation("m");
if (pAppSettingsTranslation) { if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedUnits; return pAppSettingsTranslation->cookedUnits;
} else { } else {
...@@ -986,6 +1086,26 @@ QString FactMetaData::appSettingsDistanceUnitsString(void) ...@@ -986,6 +1086,26 @@ QString FactMetaData::appSettingsDistanceUnitsString(void)
} }
} }
QString FactMetaData::appSettingsVerticalDistanceUnitsString(void)
{
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsVerticalDistanceUnitsTranslation("alt m");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedUnits;
} else {
return QStringLiteral("m");
}
}
QString FactMetaData::appSettingsWeightUnitsString(void)
{
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsWeightUnitsTranslation("g");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedUnits;
} else {
return QStringLiteral("g");
}
}
QVariant FactMetaData::squareMetersToAppSettingsAreaUnits(const QVariant& squareMeters) QVariant FactMetaData::squareMetersToAppSettingsAreaUnits(const QVariant& squareMeters)
{ {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsAreaUnitsTranslation("m^2"); const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsAreaUnitsTranslation("m^2");
...@@ -1016,6 +1136,25 @@ QString FactMetaData::appSettingsAreaUnitsString(void) ...@@ -1016,6 +1136,25 @@ QString FactMetaData::appSettingsAreaUnitsString(void)
} }
} }
QVariant FactMetaData::gramsToAppSettingsWeightUnits(const QVariant& grams) {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsWeightUnitsTranslation("g");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->rawTranslator(grams);
} else {
return grams;
}
}
QVariant FactMetaData::appSettingsWeightUnitsToGrams(const QVariant& weight) {
const AppSettingsTranslation_s* pAppSettingsTranslation = _findAppSettingsWeightUnitsTranslation("g");
if (pAppSettingsTranslation) {
return pAppSettingsTranslation->cookedTranslator(weight);
} else {
return weight;
}
}
double FactMetaData::cookedIncrement(void) const double FactMetaData::cookedIncrement(void) const
{ {
return _rawTranslator(this->rawIncrement()).toDouble(); return _rawTranslator(this->rawIncrement()).toDouble();
......
...@@ -60,14 +60,32 @@ public: ...@@ -60,14 +60,32 @@ public:
const FactMetaData& operator=(const FactMetaData& other); const FactMetaData& operator=(const FactMetaData& other);
/// Converts from meters to the user specified distance unit /// Converts from meters to the user specified horizontal distance unit
static QVariant metersToAppSettingsDistanceUnits(const QVariant& meters); static QVariant metersToAppSettingsHorizontalDistanceUnits(const QVariant& meters);
/// Converts from user specified distance unit to meters /// Converts from user specified horizontal distance unit to meters
static QVariant appSettingsDistanceUnitsToMeters(const QVariant& distance); static QVariant appSettingsHorizontalDistanceUnitsToMeters(const QVariant& distance);
/// Returns the string for distance units which has configued by user /// Returns the string for horizontal distance units which has configued by user
static QString appSettingsDistanceUnitsString(void); static QString appSettingsHorizontalDistanceUnitsString(void);
/// Converts from meters to the user specified vertical distance unit
static QVariant metersToAppSettingsVerticalDistanceUnits(const QVariant& meters);
/// Converts from user specified vertical distance unit to meters
static QVariant appSettingsVerticalDistanceUnitsToMeters(const QVariant& distance);
/// Returns the string for vertical distance units which has configued by user
static QString appSettingsVerticalDistanceUnitsString(void);
/// Converts from grams to the user specified weight unit
static QVariant gramsToAppSettingsWeightUnits(const QVariant& grams);
/// Converts from user specified weight unit to grams
static QVariant appSettingsWeightUnitsToGrams(const QVariant& weight);
/// Returns the string for weight units which has configued by user
static QString appSettingsWeightUnitsString(void);
/// Converts from meters to the user specified distance unit /// Converts from meters to the user specified distance unit
static QVariant squareMetersToAppSettingsAreaUnits(const QVariant& squareMeters); static QVariant squareMetersToAppSettingsAreaUnits(const QVariant& squareMeters);
...@@ -209,12 +227,21 @@ private: ...@@ -209,12 +227,21 @@ private:
static QVariant _inchesToCentimeters(const QVariant& inches); static QVariant _inchesToCentimeters(const QVariant& inches);
static QVariant _celsiusToFarenheit(const QVariant& celsius); static QVariant _celsiusToFarenheit(const QVariant& celsius);
static QVariant _farenheitToCelsius(const QVariant& farenheit); static QVariant _farenheitToCelsius(const QVariant& farenheit);
static QVariant _kilogramsToGrams(const QVariant& kg);
static QVariant _ouncesToGrams(const QVariant& oz);
static QVariant _poundsToGrams(const QVariant& lbs);
static QVariant _gramsToKilograms(const QVariant& g);
static QVariant _gramsToOunces(const QVariant& g);
static QVariant _gramsToPunds(const QVariant& g);
enum UnitTypes { enum UnitTypes {
UnitDistance = 0, UnitHorizontalDistance = 0,
UnitVerticalDistance,
UnitArea, UnitArea,
UnitSpeed, UnitSpeed,
UnitTemperature UnitTemperature,
UnitWeight
}; };
struct AppSettingsTranslation_s { struct AppSettingsTranslation_s {
...@@ -226,8 +253,10 @@ private: ...@@ -226,8 +253,10 @@ private:
Translator cookedTranslator; Translator cookedTranslator;
}; };
static const AppSettingsTranslation_s* _findAppSettingsDistanceUnitsTranslation(const QString& rawUnits); static const AppSettingsTranslation_s* _findAppSettingsHorizontalDistanceUnitsTranslation(const QString& rawUnits);
static const AppSettingsTranslation_s* _findAppSettingsVerticalDistanceUnitsTranslation(const QString& rawUnits);
static const AppSettingsTranslation_s* _findAppSettingsAreaUnitsTranslation(const QString& rawUnits); static const AppSettingsTranslation_s* _findAppSettingsAreaUnitsTranslation(const QString& rawUnits);
static const AppSettingsTranslation_s* _findAppSettingsWeightUnitsTranslation(const QString& rawUnits);
static void _loadJsonDefines(const QJsonObject& jsonDefinesObject, QMap<QString, QString>& defineMap); static void _loadJsonDefines(const QJsonObject& jsonDefinesObject, QMap<QString, QString>& defineMap);
...@@ -267,6 +296,8 @@ private: ...@@ -267,6 +296,8 @@ private:
static const qreal milesToMeters; static const qreal milesToMeters;
static const qreal feetToMeters; static const qreal feetToMeters;
static const qreal inchesToCentimeters; static const qreal inchesToCentimeters;
static const qreal ouncesToGrams;
static const qreal poundsToGrams;
} constants; } constants;
struct BuiltInTranslation_s { struct BuiltInTranslation_s {
......
...@@ -67,14 +67,14 @@ Rectangle { ...@@ -67,14 +67,14 @@ Rectangle {
QGCLabel { QGCLabel {
id: altField id: altField
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
text: newAltitudeAppUnits + " " + QGroundControl.appSettingsDistanceUnitsString text: newAltitudeAppUnits + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
property real altGainRange: Math.max(_sliderMaxAlt - _vehicleAltitude, 0) property real altGainRange: Math.max(_sliderMaxAlt - _vehicleAltitude, 0)
property real altLossRange: Math.max(_vehicleAltitude - _sliderMinAlt, 0) property real altLossRange: Math.max(_vehicleAltitude - _sliderMinAlt, 0)
property real altExp: Math.pow(altSlider.value, 3) property real altExp: Math.pow(altSlider.value, 3)
property real altLossGain: altExp * (altSlider.value > 0 ? altGainRange : altLossRange) property real altLossGain: altExp * (altSlider.value > 0 ? altGainRange : altLossRange)
property real newAltitudeMeters: _vehicleAltitude + altLossGain property real newAltitudeMeters: _vehicleAltitude + altLossGain
property string newAltitudeAppUnits: QGroundControl.metersToAppSettingsDistanceUnits(newAltitudeMeters).toFixed(1) property string newAltitudeAppUnits: QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(newAltitudeMeters).toFixed(1)
function setToMinimumTakeoff() { function setToMinimumTakeoff() {
altSlider.value = Math.pow(activeVehicle.minimumTakeoffAltitude() / altGainRange, 1.0/3.0) altSlider.value = Math.pow(activeVehicle.minimumTakeoffAltitude() / altGainRange, 1.0/3.0)
......
...@@ -84,7 +84,7 @@ MapQuickItem { ...@@ -84,7 +84,7 @@ MapQuickItem {
visible: _adsbVehicle ? !isNaN(altitude) : _multiVehicle visible: _adsbVehicle ? !isNaN(altitude) : _multiVehicle
property string vehicleLabelText: visible ? property string vehicleLabelText: visible ?
(_adsbVehicle ? (_adsbVehicle ?
QGroundControl.metersToAppSettingsDistanceUnits(altitude).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(altitude).toFixed(0) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString :
(_multiVehicle ? qsTr("Vehicle %1").arg(vehicle.id) : "")) : (_multiVehicle ? qsTr("Vehicle %1").arg(vehicle.id) : "")) :
"" ""
......
...@@ -121,7 +121,7 @@ Item { ...@@ -121,7 +121,7 @@ Item {
var leftCoord = mapControl.toCoordinate(Qt.point(0, scale.y), false /* clipToViewPort */) var leftCoord = mapControl.toCoordinate(Qt.point(0, scale.y), false /* clipToViewPort */)
var rightCoord = mapControl.toCoordinate(Qt.point(scaleLinePixelLength, scale.y), false /* clipToViewPort */) var rightCoord = mapControl.toCoordinate(Qt.point(scaleLinePixelLength, scale.y), false /* clipToViewPort */)
var scaleLineMeters = Math.round(leftCoord.distanceTo(rightCoord)) var scaleLineMeters = Math.round(leftCoord.distanceTo(rightCoord))
if (QGroundControl.settingsManager.unitsSettings.distanceUnits.value === UnitsSettings.DistanceUnitsFeet) { if (QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits.value === UnitsSettings.HorizontalDistanceUnitsFeet) {
calculateFeetRatio(scaleLineMeters, scaleLinePixelLength) calculateFeetRatio(scaleLineMeters, scaleLinePixelLength)
} else { } else {
calculateMetersRatio(scaleLineMeters, scaleLinePixelLength) calculateMetersRatio(scaleLineMeters, scaleLinePixelLength)
......
...@@ -84,8 +84,8 @@ void KMLPlanDomDocument::_addFlightPath(Vehicle* vehicle, QList<MissionItem*> rg ...@@ -84,8 +84,8 @@ void KMLPlanDomDocument::_addFlightPath(Vehicle* vehicle, QList<MissionItem*> rg
QString htmlString; QString htmlString;
htmlString += QStringLiteral("Index: %1\n").arg(item->sequenceNumber()); htmlString += QStringLiteral("Index: %1\n").arg(item->sequenceNumber());
htmlString += uiInfo->friendlyName() + "\n"; htmlString += uiInfo->friendlyName() + "\n";
htmlString += QStringLiteral("Alt AMSL: %1 %2\n").arg(QString::number(FactMetaData::metersToAppSettingsDistanceUnits(coord.altitude()).toDouble(), 'f', 2)).arg(FactMetaData::appSettingsDistanceUnitsString()); htmlString += QStringLiteral("Alt AMSL: %1 %2\n").arg(QString::number(FactMetaData::metersToAppSettingsHorizontalDistanceUnits(coord.altitude()).toDouble(), 'f', 2)).arg(FactMetaData::appSettingsHorizontalDistanceUnitsString());
htmlString += QStringLiteral("Alt Rel: %1 %2\n").arg(QString::number(FactMetaData::metersToAppSettingsDistanceUnits(coord.altitude() - homeCoord.altitude()).toDouble(), 'f', 2)).arg(FactMetaData::appSettingsDistanceUnitsString()); htmlString += QStringLiteral("Alt Rel: %1 %2\n").arg(QString::number(FactMetaData::metersToAppSettingsHorizontalDistanceUnits(coord.altitude() - homeCoord.altitude()).toDouble(), 'f', 2)).arg(FactMetaData::appSettingsHorizontalDistanceUnitsString());
htmlString += QStringLiteral("Lat: %1\n").arg(QString::number(coord.latitude(), 'f', 7)); htmlString += QStringLiteral("Lat: %1\n").arg(QString::number(coord.latitude(), 'f', 7));
htmlString += QStringLiteral("Lon: %1\n").arg(QString::number(coord.longitude(), 'f', 7)); htmlString += QStringLiteral("Lon: %1\n").arg(QString::number(coord.longitude(), 'f', 7));
QDomCDATASection cdataSection = createCDATASection(htmlString); QDomCDATASection cdataSection = createCDATASection(htmlString);
......
...@@ -460,8 +460,8 @@ Item { ...@@ -460,8 +460,8 @@ Item {
sourceItem: HeightIndicator { sourceItem: HeightIndicator {
map: _root.map map: _root.map
heightText: Math.floor(QGroundControl.metersToAppSettingsDistanceUnits(_transitionAltitudeMeters)) + heightText: Math.floor(QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_transitionAltitudeMeters)) +
QGroundControl.appSettingsDistanceUnitsString + "<sup>*</sup>" QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString + "<sup>*</sup>"
} }
function recalc() { function recalc() {
...@@ -492,8 +492,8 @@ Item { ...@@ -492,8 +492,8 @@ Item {
sourceItem: HeightIndicator { sourceItem: HeightIndicator {
map: _root.map map: _root.map
heightText: Math.floor(QGroundControl.metersToAppSettingsDistanceUnits(_midSlopeAltitudeMeters)) + heightText: Math.floor(QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_midSlopeAltitudeMeters)) +
QGroundControl.appSettingsDistanceUnitsString + "<sup>*</sup>" QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString + "<sup>*</sup>"
} }
function recalc() { function recalc() {
...@@ -527,7 +527,7 @@ Item { ...@@ -527,7 +527,7 @@ Item {
sourceItem: HeightIndicator { sourceItem: HeightIndicator {
map: _root.map map: _root.map
heightText: _missionItem.loiterAltitude.value.toFixed(1) + QGroundControl.appSettingsDistanceUnitsString heightText: _missionItem.loiterAltitude.value.toFixed(1) + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
} }
} }
} }
......
...@@ -50,13 +50,13 @@ Item { ...@@ -50,13 +50,13 @@ Item {
property real _controllerProgressPct: _controllerValid ? _planMasterController.missionController.progressPct : 0 property real _controllerProgressPct: _controllerValid ? _planMasterController.missionController.progressPct : 0
property bool _syncInProgress: _controllerValid ? _planMasterController.missionController.syncInProgress : false property bool _syncInProgress: _controllerValid ? _planMasterController.missionController.syncInProgress : false
property string _distanceText: isNaN(_distance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString property string _distanceText: isNaN(_distance) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_distance).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
property string _altDifferenceText: isNaN(_altDifference) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString property string _altDifferenceText: isNaN(_altDifference) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_altDifference).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
property string _gradientText: isNaN(_gradient) ? "-.-" : _gradient.toFixed(0) + " %" property string _gradientText: isNaN(_gradient) ? "-.-" : _gradient.toFixed(0) + " %"
property string _azimuthText: isNaN(_azimuth) ? "-.-" : Math.round(_azimuth) % 360 property string _azimuthText: isNaN(_azimuth) ? "-.-" : Math.round(_azimuth) % 360
property string _headingText: isNaN(_azimuth) ? "-.-" : Math.round(_heading) % 360 property string _headingText: isNaN(_azimuth) ? "-.-" : Math.round(_heading) % 360
property string _missionDistanceText: isNaN(_missionDistance) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString property string _missionDistanceText: isNaN(_missionDistance) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_missionDistance).toFixed(0) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
property string _missionMaxTelemetryText: isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString property string _missionMaxTelemetryText: isNaN(_missionMaxTelemetry) ? "-.-" : QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(_missionMaxTelemetry).toFixed(0) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
property string _batteryChangePointText: _batteryChangePoint < 0 ? "N/A" : _batteryChangePoint property string _batteryChangePointText: _batteryChangePoint < 0 ? "N/A" : _batteryChangePoint
property string _batteriesRequiredText: _batteriesRequired < 0 ? "N/A" : _batteriesRequired property string _batteriesRequiredText: _batteriesRequired < 0 ? "N/A" : _batteriesRequired
......
...@@ -221,13 +221,13 @@ Rectangle { ...@@ -221,13 +221,13 @@ Rectangle {
QGCLabel { text: missionItem.layers.valueString } QGCLabel { text: missionItem.layers.valueString }
QGCLabel { text: qsTr("Layer Height") } QGCLabel { text: qsTr("Layer Height") }
QGCLabel { text: missionItem.cameraCalc.adjustedFootprintFrontal.valueString + " " + QGroundControl.appSettingsDistanceUnitsString } QGCLabel { text: missionItem.cameraCalc.adjustedFootprintFrontal.valueString + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString }
QGCLabel { text: qsTr("Top Layer Alt") } QGCLabel { text: qsTr("Top Layer Alt") }
QGCLabel { text: QGroundControl.metersToAppSettingsDistanceUnits(missionItem.topFlightAlt).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString } QGCLabel { text: QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(missionItem.topFlightAlt).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString }
QGCLabel { text: qsTr("Bottom Layer Alt") } QGCLabel { text: qsTr("Bottom Layer Alt") }
QGCLabel { text: QGroundControl.metersToAppSettingsDistanceUnits(missionItem.bottomFlightAlt).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString } QGCLabel { text: QGroundControl.unitsConversion.metersToAppSettingsHorizontalDistanceUnits(missionItem.bottomFlightAlt).toFixed(1) + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString }
QGCLabel { text: qsTr("Photo Count") } QGCLabel { text: qsTr("Photo Count") }
QGCLabel { text: missionItem.cameraShots } QGCLabel { text: missionItem.cameraShots }
...@@ -236,7 +236,7 @@ Rectangle { ...@@ -236,7 +236,7 @@ Rectangle {
QGCLabel { text: missionItem.timeBetweenShots.toFixed(1) + " " + qsTr("secs") } QGCLabel { text: missionItem.timeBetweenShots.toFixed(1) + " " + qsTr("secs") }
QGCLabel { text: qsTr("Trigger Distance") } QGCLabel { text: qsTr("Trigger Distance") }
QGCLabel { text: missionItem.cameraCalc.adjustedFootprintSide.valueString + " " + QGroundControl.appSettingsDistanceUnitsString } QGCLabel { text: missionItem.cameraCalc.adjustedFootprintSide.valueString + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString }
} }
} // Grid Column } // Grid Column
......
...@@ -48,7 +48,9 @@ Rectangle { ...@@ -48,7 +48,9 @@ Rectangle {
anchors.top: parent.bottom anchors.top: parent.bottom
width: parent.height width: parent.height
font.pointSize: ScreenTools.smallFontPointSize font.pointSize: ScreenTools.smallFontPointSize
text: qsTr("Height AMSL (%1)").arg(QGroundControl.appSettingsDistanceUnitsString) text: qsTr("Height AMSL (%1)").arg(
QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
)
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
rotation: -90 rotation: -90
transformOrigin: Item.TopLeft transformOrigin: Item.TopLeft
......
...@@ -14,7 +14,7 @@ Grid { ...@@ -14,7 +14,7 @@ Grid {
columnSpacing: ScreenTools.defaultFontPixelWidth columnSpacing: ScreenTools.defaultFontPixelWidth
QGCLabel { text: qsTr("Survey Area") } QGCLabel { text: qsTr("Survey Area") }
QGCLabel { text: QGroundControl.squareMetersToAppSettingsAreaUnits(missionItem.coveredArea).toFixed(2) + " " + QGroundControl.appSettingsAreaUnitsString } QGCLabel { text: QGroundControl.unitsConversion.squareMetersToAppSettingsAreaUnits(missionItem.coveredArea).toFixed(2) + " " + QGroundControl.unitsConversion.appSettingsAreaUnitsString }
QGCLabel { text: qsTr("Photo Count") } QGCLabel { text: qsTr("Photo Count") }
QGCLabel { text: missionItem.cameraShots } QGCLabel { text: missionItem.cameraShots }
......
...@@ -57,18 +57,18 @@ BaseStartupWizardPage { ...@@ -57,18 +57,18 @@ BaseStartupWizardPage {
model: [qsTr("Metric System"), qsTr("Imperial System")] model: [qsTr("Metric System"), qsTr("Imperial System")]
Layout.preferredWidth: _comboFieldWidth Layout.preferredWidth: _comboFieldWidth
currentIndex: QGroundControl.settingsManager.unitsSettings.distanceUnits.value === UnitsSettings.DistanceUnitsMeters ? 0 : 1 currentIndex: QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits.value === UnitsSettings.HorizontalDistanceUnitsMeters ? 0 : 1
onActivated: { onActivated: {
var metric = (currentIndex === 0); var metric = (currentIndex === 0);
QGroundControl.settingsManager.unitsSettings.distanceUnits.value = metric ? UnitsSettings.DistanceUnitsMeters : UnitsSettings.DistanceUnitsFeet QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits.value = metric ? UnitsSettings.HorizontalDistanceUnitsMeters : UnitsSettings.HorizontalDistanceUnitsFeet
QGroundControl.settingsManager.unitsSettings.areaUnits.value = metric ? UnitsSettings.AreaUnitsSquareMeters : UnitsSettings.AreaUnitsSquareFeet QGroundControl.settingsManager.unitsSettings.areaUnits.value = metric ? UnitsSettings.AreaUnitsSquareMeters : UnitsSettings.AreaUnitsSquareFeet
QGroundControl.settingsManager.unitsSettings.speedUnits.value = metric ? UnitsSettings.SpeedUnitsMetersPerSecond : UnitsSettings.SpeedUnitsFeetPerSecond QGroundControl.settingsManager.unitsSettings.speedUnits.value = metric ? UnitsSettings.SpeedUnitsMetersPerSecond : UnitsSettings.SpeedUnitsFeetPerSecond
QGroundControl.settingsManager.unitsSettings.temperatureUnits.value = metric ? UnitsSettings.TemperatureUnitsCelsius : UnitsSettings.TemperatureUnitsFarenheit QGroundControl.settingsManager.unitsSettings.temperatureUnits.value = metric ? UnitsSettings.TemperatureUnitsCelsius : UnitsSettings.TemperatureUnitsFarenheit
} }
} }
Repeater { Repeater {
model: [ QGroundControl.settingsManager.unitsSettings.distanceUnits, QGroundControl.settingsManager.unitsSettings.areaUnits, QGroundControl.settingsManager.unitsSettings.speedUnits, QGroundControl.settingsManager.unitsSettings.temperatureUnits ] model: [ QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits, QGroundControl.settingsManager.unitsSettings.areaUnits, QGroundControl.settingsManager.unitsSettings.speedUnits, QGroundControl.settingsManager.unitsSettings.temperatureUnits ]
FactComboBox { FactComboBox {
Layout.preferredWidth: _comboFieldWidth Layout.preferredWidth: _comboFieldWidth
fact: modelData fact: modelData
......
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
#include "QGCApplication.h" #include "QGCApplication.h"
#include "LinkManager.h" #include "LinkManager.h"
#include "SettingsFact.h" #include "SettingsFact.h"
#include "FactMetaData.h"
#include "SimulatedPosition.h" #include "SimulatedPosition.h"
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
#include "AppSettings.h" #include "AppSettings.h"
#include "AirspaceManager.h" #include "AirspaceManager.h"
#include "ADSBVehicleManager.h" #include "ADSBVehicleManager.h"
#include "QGCPalette.h" #include "QGCPalette.h"
#include "QmlUnitsConversion.h"
#if defined(QGC_ENABLE_PAIRING) #if defined(QGC_ENABLE_PAIRING)
#include "PairingManager.h" #include "PairingManager.h"
#endif #endif
...@@ -83,6 +83,7 @@ public: ...@@ -83,6 +83,7 @@ public:
Q_PROPERTY(bool microhardSupported READ microhardSupported CONSTANT) Q_PROPERTY(bool microhardSupported READ microhardSupported CONSTANT)
Q_PROPERTY(bool supportsPairing READ supportsPairing CONSTANT) Q_PROPERTY(bool supportsPairing READ supportsPairing CONSTANT)
Q_PROPERTY(QGCPalette* globalPalette MEMBER _globalPalette CONSTANT) // This palette will always return enabled colors Q_PROPERTY(QGCPalette* globalPalette MEMBER _globalPalette CONSTANT) // This palette will always return enabled colors
Q_PROPERTY(QmlUnitsConversion* unitsConversion READ unitsConversion CONSTANT)
#if defined(QGC_ENABLE_PAIRING) #if defined(QGC_ENABLE_PAIRING)
Q_PROPERTY(PairingManager* pairingManager READ pairingManager CONSTANT) Q_PROPERTY(PairingManager* pairingManager READ pairingManager CONSTANT)
#endif #endif
...@@ -114,10 +115,6 @@ public: ...@@ -114,10 +115,6 @@ public:
Q_PROPERTY(QString missionFileExtension READ missionFileExtension CONSTANT) Q_PROPERTY(QString missionFileExtension READ missionFileExtension CONSTANT)
Q_PROPERTY(QString telemetryFileExtension READ telemetryFileExtension CONSTANT) Q_PROPERTY(QString telemetryFileExtension READ telemetryFileExtension CONSTANT)
/// Returns the string for distance units which has configued by user
Q_PROPERTY(QString appSettingsDistanceUnitsString READ appSettingsDistanceUnitsString CONSTANT)
Q_PROPERTY(QString appSettingsAreaUnitsString READ appSettingsAreaUnitsString CONSTANT)
Q_PROPERTY(QString qgcVersion READ qgcVersion CONSTANT) Q_PROPERTY(QString qgcVersion READ qgcVersion CONSTANT)
Q_PROPERTY(bool skipSetupPage READ skipSetupPage WRITE setSkipSetupPage NOTIFY skipSetupPageChanged) Q_PROPERTY(bool skipSetupPage READ skipSetupPage WRITE setSkipSetupPage NOTIFY skipSetupPageChanged)
...@@ -137,22 +134,6 @@ public: ...@@ -137,22 +134,6 @@ public:
Q_INVOKABLE void startAPMArduRoverMockLink (bool sendStatusText); Q_INVOKABLE void startAPMArduRoverMockLink (bool sendStatusText);
Q_INVOKABLE void stopOneMockLink (void); Q_INVOKABLE void stopOneMockLink (void);
/// Converts from meters to the user specified distance unit
Q_INVOKABLE QVariant metersToAppSettingsDistanceUnits(const QVariant& meters) const { return FactMetaData::metersToAppSettingsDistanceUnits(meters); }
/// Converts from user specified distance unit to meters
Q_INVOKABLE QVariant appSettingsDistanceUnitsToMeters(const QVariant& distance) const { return FactMetaData::appSettingsDistanceUnitsToMeters(distance); }
QString appSettingsDistanceUnitsString(void) const { return FactMetaData::appSettingsDistanceUnitsString(); }
/// Converts from square meters to the user specified area unit
Q_INVOKABLE QVariant squareMetersToAppSettingsAreaUnits(const QVariant& meters) const { return FactMetaData::squareMetersToAppSettingsAreaUnits(meters); }
/// Converts from user specified area unit to square meters
Q_INVOKABLE QVariant appSettingsAreaUnitsToSquareMeters(const QVariant& area) const { return FactMetaData::appSettingsAreaUnitsToSquareMeters(area); }
QString appSettingsAreaUnitsString(void) const { return FactMetaData::appSettingsAreaUnitsString(); }
/// Returns the list of available logging category names. /// Returns the list of available logging category names.
Q_INVOKABLE QStringList loggingCategories(void) const { return QGCLoggingCategoryRegister::instance()->registeredCategories(); } Q_INVOKABLE QStringList loggingCategories(void) const { return QGCLoggingCategoryRegister::instance()->registeredCategories(); }
...@@ -167,9 +148,6 @@ public: ...@@ -167,9 +148,6 @@ public:
Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2); Q_INVOKABLE bool linesIntersect(QPointF xLine1, QPointF yLine1, QPointF xLine2, QPointF yLine2);
Q_INVOKABLE double degreesToRadians(double degrees) { return qDegreesToRadians(degrees); }
Q_INVOKABLE double radiansToDegrees(double radians) { return qRadiansToDegrees(radians); }
// Property accesors // Property accesors
QString appName () { return qgcApp()->applicationName(); } QString appName () { return qgcApp()->applicationName(); }
...@@ -185,6 +163,7 @@ public: ...@@ -185,6 +163,7 @@ public:
FactGroup* gpsRtkFactGroup () { return _gpsRtkFactGroup; } FactGroup* gpsRtkFactGroup () { return _gpsRtkFactGroup; }
AirspaceManager* airspaceManager () { return _airspaceManager; } AirspaceManager* airspaceManager () { return _airspaceManager; }
ADSBVehicleManager* adsbVehicleManager () { return _adsbVehicleManager; } ADSBVehicleManager* adsbVehicleManager () { return _adsbVehicleManager; }
QmlUnitsConversion* unitsConversion () { return &_unitsConversion; }
#if defined(QGC_ENABLE_PAIRING) #if defined(QGC_ENABLE_PAIRING)
bool supportsPairing () { return true; } bool supportsPairing () { return true; }
PairingManager* pairingManager () { return _pairingManager; } PairingManager* pairingManager () { return _pairingManager; }
...@@ -283,6 +262,7 @@ private: ...@@ -283,6 +262,7 @@ private:
MicrohardManager* _microhardManager = nullptr; MicrohardManager* _microhardManager = nullptr;
ADSBVehicleManager* _adsbVehicleManager = nullptr; ADSBVehicleManager* _adsbVehicleManager = nullptr;
QGCPalette* _globalPalette = nullptr; QGCPalette* _globalPalette = nullptr;
QmlUnitsConversion _unitsConversion;
#if defined(QGC_ENABLE_PAIRING) #if defined(QGC_ENABLE_PAIRING)
PairingManager* _pairingManager = nullptr; PairingManager* _pairingManager = nullptr;
#endif #endif
......
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#ifndef QMLUNITSCONVERSION_H
#define QMLUNITSCONVERSION_H
#include <QObject>
#include <qmath.h>
#include "FactMetaData.h"
class QmlUnitsConversion : public QObject
{
Q_OBJECT
public:
QmlUnitsConversion(QObject *parent=nullptr): QObject(parent) {}
~QmlUnitsConversion() = default;
Q_PROPERTY(QString appSettingsHorizontalDistanceUnitsString READ appSettingsHorizontalDistanceUnitsString CONSTANT)
Q_PROPERTY(QString appSettingsVerticalDistanceUnitsString READ appSettingsVerticalDistanceUnitsString CONSTANT)
Q_PROPERTY(QString appSettingsAreaUnitsString READ appSettingsAreaUnitsString CONSTANT)
Q_PROPERTY(QString appSettingsWeightUnitsString READ appSettingsWeightUnitsString CONSTANT)
/// Converts from meters to the user specified distance unit
Q_INVOKABLE QVariant metersToAppSettingsHorizontalDistanceUnits(const QVariant& meters) const { return FactMetaData::metersToAppSettingsHorizontalDistanceUnits(meters); }
/// Converts from user specified distance unit to meters
Q_INVOKABLE QVariant appSettingsHorizontalDistanceUnitsToMeters(const QVariant& distance) const { return FactMetaData::appSettingsHorizontalDistanceUnitsToMeters(distance); }
QString appSettingsHorizontalDistanceUnitsString(void) const { return FactMetaData::appSettingsHorizontalDistanceUnitsString(); }
/// Converts from meters to the user specified distance unit
Q_INVOKABLE QVariant metersToAppSettingsVerticalDistanceUnits(const QVariant& meters) const { return FactMetaData::metersToAppSettingsVerticalDistanceUnits(meters); }
/// Converts from user specified distance unit to meters
Q_INVOKABLE QVariant appSettingsVerticalDistanceUnitsToMeters(const QVariant& distance) const { return FactMetaData::appSettingsVerticalDistanceUnitsToMeters(distance); }
QString appSettingsVerticalDistanceUnitsString(void) const { return FactMetaData::appSettingsVerticalDistanceUnitsString(); }
/// Converts from grams to the user specified weight unit
Q_INVOKABLE QVariant gramsToAppSettingsWeightUnits(const QVariant& meters) const { return FactMetaData::gramsToAppSettingsWeightUnits(meters); }
/// Converts from user specified weight unit to grams
Q_INVOKABLE QVariant appSettingsWeightUnitsToGrams(const QVariant& distance) const { return FactMetaData::appSettingsWeightUnitsToGrams(distance); }
QString appSettingsWeightUnitsString(void) const { return FactMetaData::appSettingsWeightUnitsString(); }
/// Converts from square meters to the user specified area unit
Q_INVOKABLE QVariant squareMetersToAppSettingsAreaUnits(const QVariant& meters) const { return FactMetaData::squareMetersToAppSettingsAreaUnits(meters); }
/// Converts from user specified area unit to square meters
Q_INVOKABLE QVariant appSettingsAreaUnitsToSquareMeters(const QVariant& area) const { return FactMetaData::appSettingsAreaUnitsToSquareMeters(area); }
QString appSettingsAreaUnitsString(void) const { return FactMetaData::appSettingsAreaUnitsString(); }
Q_INVOKABLE double degreesToRadians(double degrees) { return qDegreesToRadians(degrees); }
Q_INVOKABLE double radiansToDegrees(double radians) { return qRadiansToDegrees(radians); }
};
#endif // QMLUNITSCONVERSION_H
...@@ -17,34 +17,65 @@ DECLARE_SETTINGGROUP(Units, "Units") ...@@ -17,34 +17,65 @@ DECLARE_SETTINGGROUP(Units, "Units")
qmlRegisterUncreatableType<UnitsSettings>("QGroundControl.SettingsManager", 1, 0, "UnitsSettings", "Reference only"); qmlRegisterUncreatableType<UnitsSettings>("QGroundControl.SettingsManager", 1, 0, "UnitsSettings", "Reference only");
} }
DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, distanceUnits) DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, horizontalDistanceUnits)
{ {
if (!_distanceUnitsFact) { if (!_horizontalDistanceUnitsFact) {
// Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading. // Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
QStringList enumStrings; QStringList enumStrings;
QVariantList enumValues; QVariantList enumValues;
enumStrings << "Feet" << "Meters"; enumStrings << "Feet" << "Meters";
enumValues << QVariant::fromValue(static_cast<uint32_t>(DistanceUnitsFeet)) << QVariant::fromValue(static_cast<uint32_t>(DistanceUnitsMeters)); enumValues << QVariant::fromValue(static_cast<uint32_t>(HorizontalDistanceUnitsFeet))
<< QVariant::fromValue(static_cast<uint32_t>(HorizontalDistanceUnitsMeters));
FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this); FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
metaData->setName(distanceUnitsName); metaData->setName(horizontalDistanceUnitsName);
metaData->setShortDescription("Distance units"); metaData->setShortDescription("Distance units");
metaData->setEnumInfo(enumStrings, enumValues); metaData->setEnumInfo(enumStrings, enumValues);
DistanceUnits defaultDistanceUnit = DistanceUnitsMeters; HorizontalDistanceUnits defaultHorizontalDistanceUnit = HorizontalDistanceUnitsMeters;
switch(QLocale::system().measurementSystem()) { switch(QLocale::system().measurementSystem()) {
case QLocale::MetricSystem: { case QLocale::MetricSystem: {
defaultDistanceUnit = DistanceUnitsMeters; defaultHorizontalDistanceUnit = HorizontalDistanceUnitsMeters;
} break; } break;
case QLocale::ImperialUSSystem: case QLocale::ImperialUSSystem:
case QLocale::ImperialUKSystem: case QLocale::ImperialUKSystem:
defaultDistanceUnit = DistanceUnitsFeet; defaultHorizontalDistanceUnit = HorizontalDistanceUnitsFeet;
break; break;
} }
metaData->setRawDefaultValue(defaultDistanceUnit); metaData->setRawDefaultValue(defaultHorizontalDistanceUnit);
metaData->setQGCRebootRequired(true); metaData->setQGCRebootRequired(true);
_distanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this); _horizontalDistanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this);
} }
return _distanceUnitsFact; return _horizontalDistanceUnitsFact;
}
DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, verticalDistanceUnits)
{
if (!_verticalDistanceUnitsFact) {
// Distance/Area/Speed units settings can't be loaded from json since it creates an infinite loop of meta data loading.
QStringList enumStrings;
QVariantList enumValues;
enumStrings << "Feet" << "Meters";
enumValues << QVariant::fromValue(static_cast<uint32_t>(VerticalDistanceUnitsFeet))
<< QVariant::fromValue(static_cast<uint32_t>(VerticalDistanceUnitsMeters));
FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
metaData->setName(verticalDistanceUnitsName);
metaData->setShortDescription("Altitude units");
metaData->setEnumInfo(enumStrings, enumValues);
VerticalDistanceUnits defaultVerticalAltitudeUnit = VerticalDistanceUnitsMeters;
switch(QLocale::system().measurementSystem()) {
case QLocale::MetricSystem: {
defaultVerticalAltitudeUnit = VerticalDistanceUnitsMeters;
} break;
case QLocale::ImperialUSSystem:
case QLocale::ImperialUKSystem:
defaultVerticalAltitudeUnit = VerticalDistanceUnitsFeet;
break;
}
metaData->setRawDefaultValue(defaultVerticalAltitudeUnit);
metaData->setQGCRebootRequired(true);
_verticalDistanceUnitsFact = new SettingsFact(_settingsGroup, metaData, this);
}
return _verticalDistanceUnitsFact;
} }
DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, areaUnits) DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, areaUnits)
...@@ -147,3 +178,36 @@ DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, temperatureUnits) ...@@ -147,3 +178,36 @@ DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, temperatureUnits)
} }
return _temperatureUnitsFact; return _temperatureUnitsFact;
} }
DECLARE_SETTINGSFACT_NO_FUNC(UnitsSettings, weightUnits)
{
if (!_weightUnitsFact) {
// Units settings can't be loaded from json since it creates an infinite loop of meta data loading.
QStringList enumStrings;
QVariantList enumValues;
enumStrings << "Grams" << "Kilograms" << "Ounces" << "Pounds";
enumValues
<< QVariant::fromValue(static_cast<uint32_t>(WeightUnitsGrams))
<< QVariant::fromValue(static_cast<uint32_t>(WeightUnitsKg))
<< QVariant::fromValue(static_cast<uint32_t>(WeightUnitsOz))
<< QVariant::fromValue(static_cast<uint32_t>(WeightUnitsLbs));
FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, this);
metaData->setName(weightUnitsName);
metaData->setShortDescription(tr("Weight units"));
metaData->setEnumInfo(enumStrings, enumValues);
WeightUnits defaultWeightUnit = WeightUnitsGrams;
switch(QLocale::system().measurementSystem()) {
case QLocale::MetricSystem:
case QLocale::ImperialUKSystem: {
defaultWeightUnit = WeightUnitsGrams;
} break;
case QLocale::ImperialUSSystem:
defaultWeightUnit = WeightUnitsOz;
break;
}
metaData->setRawDefaultValue(defaultWeightUnit);
metaData->setQGCRebootRequired(true);
_weightUnitsFact = new SettingsFact(_settingsGroup, metaData, this);
}
return _weightUnitsFact;
}
...@@ -19,9 +19,14 @@ class UnitsSettings : public SettingsGroup ...@@ -19,9 +19,14 @@ class UnitsSettings : public SettingsGroup
public: public:
UnitsSettings(QObject* parent = nullptr); UnitsSettings(QObject* parent = nullptr);
enum DistanceUnits { enum HorizontalDistanceUnits {
DistanceUnitsFeet = 0, HorizontalDistanceUnitsFeet = 0,
DistanceUnitsMeters HorizontalDistanceUnitsMeters
};
enum VerticalDistanceUnits {
VerticalDistanceUnitsFeet = 0,
VerticalDistanceUnitsMeters
}; };
enum AreaUnits { enum AreaUnits {
...@@ -46,17 +51,28 @@ public: ...@@ -46,17 +51,28 @@ public:
TemperatureUnitsFarenheit, TemperatureUnitsFarenheit,
}; };
Q_ENUM(DistanceUnits) enum WeightUnits {
WeightUnitsGrams = 0,
WeightUnitsKg,
WeightUnitsOz,
WeightUnitsLbs
};
Q_ENUM(HorizontalDistanceUnits)
Q_ENUM(VerticalDistanceUnits)
Q_ENUM(AreaUnits) Q_ENUM(AreaUnits)
Q_ENUM(SpeedUnits) Q_ENUM(SpeedUnits)
Q_ENUM(TemperatureUnits) Q_ENUM(TemperatureUnits)
Q_ENUM(WeightUnits)
DEFINE_SETTING_NAME_GROUP() DEFINE_SETTING_NAME_GROUP()
DEFINE_SETTINGFACT(distanceUnits) DEFINE_SETTINGFACT(horizontalDistanceUnits)
DEFINE_SETTINGFACT(verticalDistanceUnits)
DEFINE_SETTINGFACT(areaUnits) DEFINE_SETTINGFACT(areaUnits)
DEFINE_SETTINGFACT(speedUnits) DEFINE_SETTINGFACT(speedUnits)
DEFINE_SETTINGFACT(temperatureUnits) DEFINE_SETTINGFACT(temperatureUnits)
DEFINE_SETTINGFACT(weightUnits)
}; };
#endif #endif
...@@ -3150,7 +3150,7 @@ void Vehicle::guidedModeGotoLocation(const QGeoCoordinate& gotoCoord) ...@@ -3150,7 +3150,7 @@ void Vehicle::guidedModeGotoLocation(const QGeoCoordinate& gotoCoord)
} }
double maxDistance = _settingsManager->flyViewSettings()->maxGoToLocationDistance()->rawValue().toDouble(); double maxDistance = _settingsManager->flyViewSettings()->maxGoToLocationDistance()->rawValue().toDouble();
if (coordinate().distanceTo(gotoCoord) > maxDistance) { if (coordinate().distanceTo(gotoCoord) > maxDistance) {
qgcApp()->showAppMessage(QString("New location is too far. Must be less than %1 %2.").arg(qRound(FactMetaData::metersToAppSettingsDistanceUnits(maxDistance).toDouble())).arg(FactMetaData::appSettingsDistanceUnitsString())); qgcApp()->showAppMessage(QString("New location is too far. Must be less than %1 %2.").arg(qRound(FactMetaData::metersToAppSettingsHorizontalDistanceUnits(maxDistance).toDouble())).arg(FactMetaData::appSettingsHorizontalDistanceUnitsString()));
return; return;
} }
_firmwarePlugin->guidedModeGotoLocation(this, gotoCoord); _firmwarePlugin->guidedModeGotoLocation(this, gotoCoord);
......
...@@ -99,7 +99,7 @@ Rectangle { ...@@ -99,7 +99,7 @@ Rectangle {
QGCLabel { text: modelData } QGCLabel { text: modelData }
} }
Repeater { Repeater {
model: [ QGroundControl.settingsManager.unitsSettings.distanceUnits, QGroundControl.settingsManager.unitsSettings.areaUnits, QGroundControl.settingsManager.unitsSettings.speedUnits, QGroundControl.settingsManager.unitsSettings.temperatureUnits ] model: [ QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits, QGroundControl.settingsManager.unitsSettings.areaUnits, QGroundControl.settingsManager.unitsSettings.speedUnits, QGroundControl.settingsManager.unitsSettings.temperatureUnits ]
FactComboBox { FactComboBox {
Layout.preferredWidth: _comboFieldWidth Layout.preferredWidth: _comboFieldWidth
fact: modelData fact: modelData
......
...@@ -71,7 +71,7 @@ Item { ...@@ -71,7 +71,7 @@ Item {
visible: QGroundControl.gpsRtk.currentAccuracy.value > 0 visible: QGroundControl.gpsRtk.currentAccuracy.value > 0
} }
QGCLabel { QGCLabel {
text: QGroundControl.gpsRtk.currentAccuracy.valueString + " " + QGroundControl.appSettingsDistanceUnitsString text: QGroundControl.gpsRtk.currentAccuracy.valueString + " " + QGroundControl.unitsConversion.appSettingsHorizontalDistanceUnitsString
visible: QGroundControl.gpsRtk.currentAccuracy.value > 0 visible: QGroundControl.gpsRtk.currentAccuracy.value > 0
} }
QGCLabel { text: qsTr("Satellites:") } QGCLabel { text: qsTr("Satellites:") }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment