Skip to content

Commit 285831a

Browse files
Make measurement system units changeable. (#616)
* added input fields to the html * presented fields according to the current settings * added fields to the userSettings variable * removed unused code, cleaned up comments * fixed typo. * added missing semicolon
1 parent ddfadae commit 285831a

File tree

3 files changed

+74
-4
lines changed

3 files changed

+74
-4
lines changed

index.html

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2830,6 +2830,39 @@ <h4 class="modal-title">Advanced User Settings</h4>
28302830
</div>
28312831
</div>
28322832
</div>
2833+
<div class="gui_box grey unit-settings">
2834+
<div class="gui_box_titlebar">
2835+
<div class="spacer_box_title">Measurement System</div>
2836+
</div>
2837+
<div>
2838+
<div class="speed-mode-group">
2839+
<table>
2840+
<tr>
2841+
<td>
2842+
<label>Speed Units</label>
2843+
<input type="radio" name="speed-mode" value="1">m/s</input>
2844+
<br>
2845+
<input type="radio" name="speed-mode" value="2">kph</input>
2846+
<br>
2847+
<input type="radio" name="speed-mode" value="3">mph</input>
2848+
</td>
2849+
</tr>
2850+
</table>
2851+
</div>
2852+
<div class="altitude-mode-group">
2853+
<table>
2854+
<tr>
2855+
<td>
2856+
<label>Altitude Units</label>
2857+
<input type="radio" name="altitude-mode" value="1">meters</input>
2858+
<br>
2859+
<input type="radio" name="altitude-mode" value="2">feet</input>
2860+
</td>
2861+
</tr>
2862+
</table>
2863+
</div>
2864+
</div>
2865+
</div>
28332866
</div>
28342867
</div>
28352868
<div class="cf_column half right">

js/flightlog_fields_presenter.js

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,24 @@ function FlightLogFieldPresenter() {
851851
return enumNames[value];
852852
};
853853

854+
/**
855+
* Function to translate altitudes from the default meters
856+
* to the user selected measurement unit.
857+
* @param altitude String: Altitude in meters.
858+
* @param altitudeUnits Integer: 1 for meters, 2 for feet.
859+
*
860+
* @returns String: readable meters in selected unit.
861+
*/
862+
863+
FlightLogFieldPresenter.decodeCorrectAltitude = function(altitude, altitudeUnits) {
864+
switch (altitudeUnits) {
865+
case 1: // Keep it in meters.
866+
return (altitude).toFixed(2) + " m";
867+
case 2: // Translate it into feet.
868+
return (altitude * 3.28).toFixed(2) + " ft";
869+
}
870+
};
871+
854872
/**
855873
* Attempt to decode the given raw logged value into something more human readable, or return an empty string if
856874
* no better representation is available.
@@ -967,7 +985,7 @@ function FlightLogFieldPresenter() {
967985
return (value / Math.PI * 180).toFixed(1) + "°";
968986

969987
case 'baroAlt':
970-
return (value / 100).toFixed(1) + " m";
988+
return FlightLogFieldPresenter.decodeCorrectAltitude((value/100), userSettings.altitudeUnits);
971989

972990
case 'flightModeFlags':
973991
return FlightLogFieldPresenter.presentFlags(value, FLIGHT_LOG_FLIGHT_MODE_NAME);
@@ -991,9 +1009,16 @@ function FlightLogFieldPresenter() {
9911009
case 'GPS_coord[1]':
9921010
return `${(value/10000000).toFixed(5)}`;
9931011
case 'GPS_altitude':
994-
return `${(value/10).toFixed(2)} m`;
1012+
return FlightLogFieldPresenter.decodeCorrectAltitude((value/10), userSettings.altitudeUnits);
9951013
case 'GPS_speed':
996-
return `${(value/100).toFixed(2)} m/s`;
1014+
switch (userSettings.speedUnits) {
1015+
case 1:
1016+
return `${(value/100).toFixed(2)} m/s`;
1017+
case 2:
1018+
return `${((value/100) * 3.6).toFixed(2)} kph`;
1019+
case 3:
1020+
return `${((value/100) * 2.2369).toFixed(2)} mph`;
1021+
}
9971022
case 'GPS_ground_course':
9981023
return `${(value/10).toFixed(1)} °`;
9991024

js/user_settings_dialog.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
4444
stickTrails : false, // Show stick trails?
4545
stickInvertYaw : false, // Invert yaw in stick display?
4646
legendUnits : true, // Show units on legend?
47+
speedUnits : 1, // Default speed mode = m/s
48+
altitudeUnits : 1, // Default altitude mode = meters
4749
gapless : false,
4850
drawCraft : "3D",
4951
hasCraft : true,
@@ -314,6 +316,14 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
314316
currentSettings.legendUnits = $(this).is(":checked");
315317
});
316318

319+
$('input[type=radio][name=speed-mode]').change(function() {
320+
currentSettings.speedUnits = parseInt($(this).val());
321+
});
322+
323+
$('input[type=radio][name=altitude-mode]').change(function() {
324+
currentSettings.altitudeUnits = parseInt($(this).val());
325+
});
326+
317327
// Load Custom Logo
318328
function readURL(input) {
319329
if (input.files && input.files[0]) {
@@ -390,14 +400,16 @@ function UserSettingsDialog(dialog, onLoad, onSave) {
390400
$(".legend-units").prop('checked', currentSettings.legendUnits);
391401
}
392402

393-
394403
mixerListSelection(currentSettings.mixerConfiguration); // select current mixer configuration
395404
stickModeSelection(currentSettings.stickMode);
396405

397406
// setup the stick mode and dropdowns;
398407
$('select.mixerList').val(currentSettings.mixerConfiguration);
399408
$('input:radio[name="stick-mode"]').filter('[value="' + currentSettings.stickMode + '"]').attr('checked', true);
400409

410+
$('input:radio[name="speed-mode"]').filter('[value="' + currentSettings.speedUnits + '"]').attr('checked', true);
411+
$('input:radio[name="altitude-mode"]').filter('[value="' + currentSettings.altitudeUnits + '"]').attr('checked', true);
412+
401413
$('.stick-mode-group input[name="stick-top"]').val(parseInt(currentSettings.sticks.top));
402414
$('.stick-mode-group input[name="stick-left"]').val(parseInt(currentSettings.sticks.left));
403415
$('.stick-mode-group input[name="stick-size"]').val(parseInt(currentSettings.sticks.size));

0 commit comments

Comments
 (0)