diff --git a/index.html b/index.html index e6442d74..e3f9cc4d 100644 --- a/index.html +++ b/index.html @@ -2830,6 +2830,39 @@ +
+
+
Measurement System
+
+
+
+ + + + +
+ + m/s +
+ kph +
+ mph +
+
+
+ + + + +
+ + meters +
+ feet +
+
+
+
diff --git a/js/flightlog_fields_presenter.js b/js/flightlog_fields_presenter.js index dcc4cd81..332650a0 100644 --- a/js/flightlog_fields_presenter.js +++ b/js/flightlog_fields_presenter.js @@ -851,6 +851,24 @@ function FlightLogFieldPresenter() { return enumNames[value]; }; + /** + * Function to translate altitudes from the default meters + * to the user selected measurement unit. + * @param altitude String: Altitude in meters. + * @param altitudeUnits Integer: 1 for meters, 2 for feet. + * + * @returns String: readable meters in selected unit. + */ + + FlightLogFieldPresenter.decodeCorrectAltitude = function(altitude, altitudeUnits) { + switch (altitudeUnits) { + case 1: // Keep it in meters. + return (altitude).toFixed(2) + " m"; + case 2: // Translate it into feet. + return (altitude * 3.28).toFixed(2) + " ft"; + } + }; + /** * Attempt to decode the given raw logged value into something more human readable, or return an empty string if * no better representation is available. @@ -967,7 +985,7 @@ function FlightLogFieldPresenter() { return (value / Math.PI * 180).toFixed(1) + "°"; case 'baroAlt': - return (value / 100).toFixed(1) + " m"; + return FlightLogFieldPresenter.decodeCorrectAltitude((value/100), userSettings.altitudeUnits); case 'flightModeFlags': return FlightLogFieldPresenter.presentFlags(value, FLIGHT_LOG_FLIGHT_MODE_NAME); @@ -991,9 +1009,16 @@ function FlightLogFieldPresenter() { case 'GPS_coord[1]': return `${(value/10000000).toFixed(5)}`; case 'GPS_altitude': - return `${(value/10).toFixed(2)} m`; + return FlightLogFieldPresenter.decodeCorrectAltitude((value/10), userSettings.altitudeUnits); case 'GPS_speed': - return `${(value/100).toFixed(2)} m/s`; + switch (userSettings.speedUnits) { + case 1: + return `${(value/100).toFixed(2)} m/s`; + case 2: + return `${((value/100) * 3.6).toFixed(2)} kph`; + case 3: + return `${((value/100) * 2.2369).toFixed(2)} mph`; + } case 'GPS_ground_course': return `${(value/10).toFixed(1)} °`; diff --git a/js/user_settings_dialog.js b/js/user_settings_dialog.js index 9f3aea00..28f978b4 100644 --- a/js/user_settings_dialog.js +++ b/js/user_settings_dialog.js @@ -44,6 +44,8 @@ function UserSettingsDialog(dialog, onLoad, onSave) { stickTrails : false, // Show stick trails? stickInvertYaw : false, // Invert yaw in stick display? legendUnits : true, // Show units on legend? + speedUnits : 1, // Default speed mode = m/s + altitudeUnits : 1, // Default altitude mode = meters gapless : false, drawCraft : "3D", hasCraft : true, @@ -314,6 +316,14 @@ function UserSettingsDialog(dialog, onLoad, onSave) { currentSettings.legendUnits = $(this).is(":checked"); }); + $('input[type=radio][name=speed-mode]').change(function() { + currentSettings.speedUnits = parseInt($(this).val()); + }); + + $('input[type=radio][name=altitude-mode]').change(function() { + currentSettings.altitudeUnits = parseInt($(this).val()); + }); + // Load Custom Logo function readURL(input) { if (input.files && input.files[0]) { @@ -390,7 +400,6 @@ function UserSettingsDialog(dialog, onLoad, onSave) { $(".legend-units").prop('checked', currentSettings.legendUnits); } - mixerListSelection(currentSettings.mixerConfiguration); // select current mixer configuration stickModeSelection(currentSettings.stickMode); @@ -398,6 +407,9 @@ function UserSettingsDialog(dialog, onLoad, onSave) { $('select.mixerList').val(currentSettings.mixerConfiguration); $('input:radio[name="stick-mode"]').filter('[value="' + currentSettings.stickMode + '"]').attr('checked', true); + $('input:radio[name="speed-mode"]').filter('[value="' + currentSettings.speedUnits + '"]').attr('checked', true); + $('input:radio[name="altitude-mode"]').filter('[value="' + currentSettings.altitudeUnits + '"]').attr('checked', true); + $('.stick-mode-group input[name="stick-top"]').val(parseInt(currentSettings.sticks.top)); $('.stick-mode-group input[name="stick-left"]').val(parseInt(currentSettings.sticks.left)); $('.stick-mode-group input[name="stick-size"]').val(parseInt(currentSettings.sticks.size));