1
0
Fork 0

Select Airport partial fix for #2661: spurious enabling of helipad mode, showing N0E0 instead of nearest airport, strange zoom units

This commit is contained in:
Michael Danilov 2021-12-19 23:25:54 +01:00
parent 6a917a68b3
commit 5915acf7d5

View file

@ -39,82 +39,7 @@
<nasal> <nasal>
<!-- Generalize all this, turn into helpers and load defaults via XML --> <!-- Generalize all this, turn into helpers and load defaults via XML -->
<open><![CDATA[ <open><![CDATA[
var MAX_RUNWAYS = 28; # number of entries at KEDW var update_info = func(open = 0) {
var DIALOG = cmdarg();
var listeners = [];
## "prologue" currently required by the canvas-generic-map
var dialog_name ="airports"; #TODO: use substr() and cmdarg() to get this dynamically
var dialog_property = func(p) return "/sim/gui/dialogs/airports/"~p; #TODO: generalize using cmdarg
var DIALOG_CANVAS = gui.findElementByName(DIALOG, "airport-selection");
setprop("/sim/gui/dialogs/airports/selected-airport/lat", 0);
setprop("/sim/gui/dialogs/airports/selected-airport/lon", 0);
setprop("/sim/gui/dialogs/airports/selected-airport/rwy", "");
setprop("/sim/gui/dialogs/airports/selected-airport/parkpos", "");
setprop("/sim/gui/dialogs/airports/mode", "search");
setprop("/sim/gui/dialogs/airports/display-mode", "0");
setprop("/sim/gui/dialogs/airports/list", "");
if (getprop("/sim/gui/dialogs/airports/display-taxiways") == "") {
setprop("/sim/gui/dialogs/airports/display-taxiways", "1");
}
if (getprop("/sim/gui/dialogs/airports/display-parking") == "") {
setprop("/sim/gui/dialogs/airports/display-parking", "0");
}
if (getprop("/sim/gui/dialogs/airports/display-tower") == "") {
setprop("/sim/gui/dialogs/airports/display-tower", "1");
}
if (getprop("/sim/gui/dialogs/airports/show-helipads") == "") {
setprop("/sim/gui/dialogs/airports/show-helipads", "1");
}
# Start with the closest airport
var airport_id = airportinfo().id;
# Retrieve METAR
fgcommand("request-metar", var n = props.Node.new({ "path": "/sim/gui/dialogs/airports/selected-airport/metar",
"station": airport_id}));
var dlg = props.globals.getNode("/sim/gui/dialogs/airports", 1);
var avail_runways = dlg.getNode("available-runways", 1);
var avail_parking = {};
if (dlg.getNode("list") == nil)
dlg.getNode("list", 1).setValue("");
var airportlist = dlg.getNode("list");
var mode = {
runway: dlg.getNode("use_runway", 1),
bestrunway: dlg.getNode("use_best_runway", 1),
parkpos: dlg.getNode("use_parkpos", 1)
};
var set_radio = func(m) {
foreach (k; keys(mode)) {
mode[k].setBoolValue(m == k);
}
}
var initialized = 0;
foreach (k; keys(mode)) {
if (mode[k].getType() == "NONE" or initialized) {
mode[k].setBoolValue(0);
} else {
initialized += mode[k].getBoolValue();
}
}
if (!initialized) {
set_radio("bestrunway");
}
var update_info = func {
var info = airportinfo(airport_id); var info = airportinfo(airport_id);
setprop("/sim/gui/dialogs/airports/selected-airport/id", airport_id); setprop("/sim/gui/dialogs/airports/selected-airport/id", airport_id);
setprop("/sim/gui/dialogs/airports/selected-airport/name", info.name); setprop("/sim/gui/dialogs/airports/selected-airport/name", info.name);
@ -124,7 +49,9 @@
setprop("/sim/gui/dialogs/airports/selected-airport/elevation-ft", 3.28 * info.elevation); setprop("/sim/gui/dialogs/airports/selected-airport/elevation-ft", 3.28 * info.elevation);
setprop("/sim/gui/dialogs/airports/selected-airport/rwy", ""); setprop("/sim/gui/dialogs/airports/selected-airport/rwy", "");
setprop("/sim/gui/dialogs/airports/selected-airport/parkpos", ""); setprop("/sim/gui/dialogs/airports/selected-airport/parkpos", "");
AirportChart.getController().setPosition(info.lat, info.lon); if (!open) {
AirportChart.getController().setPosition(info.lat, info.lon);
}
if (info.has_metar) { if (info.has_metar) {
# Retrieve an updated METAR, and indicate that we've not got one currently. # Retrieve an updated METAR, and indicate that we've not got one currently.
@ -219,6 +146,81 @@
gui.dialog_update("airports", "runway-list"); gui.dialog_update("airports", "runway-list");
} }
var MAX_RUNWAYS = 28; # number of entries at KEDW
var DIALOG = cmdarg();
var listeners = [];
## "prologue" currently required by the canvas-generic-map
var dialog_name ="airports"; #TODO: use substr() and cmdarg() to get this dynamically
var dialog_property = func(p) return "/sim/gui/dialogs/airports/"~p; #TODO: generalize using cmdarg
var DIALOG_CANVAS = gui.findElementByName(DIALOG, "airport-selection");
var displayMode = getprop("/sim/gui/dialogs/airports/display-mode");
if ((displayMode != 0) and (displayMode != 1)) {
setprop("/sim/gui/dialogs/airports/display-mode", 0);
}
var displayTaxiways = getprop("/sim/gui/dialogs/airports/display-taxiways");
if ((displayTaxiways != 0) and (displayTaxiways != 1)) {
setprop("/sim/gui/dialogs/airports/display-taxiways", 1);
}
var displayParking = getprop("/sim/gui/dialogs/airports/display-parking");
if ((displayParking != 0) and (displayParking != 1)) {
setprop("/sim/gui/dialogs/airports/display-parking", 0);
}
var displayTower = getprop("/sim/gui/dialogs/airports/display-tower");
if ((displayTower != 0) and (displayTower != 1)) {
setprop("/sim/gui/dialogs/airports/display-tower", 1);
}
var showHelipads = getprop("/sim/gui/dialogs/airports/show-helipads");
if ((showHelipads != 0) and (showHelipads != 1)) {
setprop("/sim/gui/dialogs/airports/show-helipads", 0);
}
var dlg = props.globals.getNode("/sim/gui/dialogs/airports", 1);
var avail_runways = dlg.getNode("available-runways", 1);
var avail_parking = {};
# Start with the closest airport
var airport_id = airportinfo().id;
update_info(open = 1);
# Retrieve METAR
fgcommand("request-metar", var n = props.Node.new({ "path": "/sim/gui/dialogs/airports/selected-airport/metar",
"station": airport_id}));
dlg.getNode("list", 1).setValue("");
var airportlist = dlg.getNode("list");
var mode = {
runway: dlg.getNode("use_runway", 1),
bestrunway: dlg.getNode("use_best_runway", 1),
parkpos: dlg.getNode("use_parkpos", 1)
};
var set_radio = func(m) {
foreach (k; keys(mode)) {
mode[k].setBoolValue(m == k);
}
}
var initialized = 0;
foreach (k; keys(mode)) {
if (mode[k].getType() == "NONE" or initialized) {
mode[k].setBoolValue(0);
} else {
initialized += mode[k].getBoolValue();
}
}
if (!initialized) {
set_radio("bestrunway");
}
var listbox = func { var listbox = func {
airport_id = pop(split(" ", airportlist.getValue())); airport_id = pop(split(" ", airportlist.getValue()));
airport_id = substr(airport_id, 1, size(airport_id) - 2); # strip parentheses airport_id = substr(airport_id, 1, size(airport_id) - 2); # strip parentheses
@ -820,11 +822,9 @@
{ {
var range = AirportChart.getScreenRange(); var range = AirportChart.getScreenRange();
if (e.deltaY >0) { if (e.deltaY >0) {
if (range < 10000) AirportChart.setScreenRange(math.min(range*range_step, 10000));
AirportChart.setScreenRange(range*range_step);
} else { } else {
if (range > 100) AirportChart.setScreenRange(math.max(range/range_step, 100));
AirportChart.setScreenRange(range/range_step);
} }
setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange()); setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange());
}); });
@ -893,8 +893,7 @@
<command>nasal</command> <command>nasal</command>
<script> <script>
var range = AirportChart.getScreenRange(); var range = AirportChart.getScreenRange();
if (range &lt; 10000) AirportChart.setScreenRange(math.min(range*range_step, 10000));
AirportChart.setScreenRange(range*range_step);
setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange()); setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange());
</script> </script>
</binding> </binding>
@ -902,8 +901,8 @@
<text> <text>
<name>zoomdisplay</name> <name>zoomdisplay</name>
<label>MMMMMMMMMMMMM</label> <label>XXXXXXXXXXXX</label>
<format>Zoom %d</format> <format>Zoom: %d%%</format>
<property>/sim/gui/dialogs/airports/zoom-range</property> <property>/sim/gui/dialogs/airports/zoom-range</property>
<live>true</live> <live>true</live>
</text> </text>
@ -918,8 +917,7 @@
<command>nasal</command> <command>nasal</command>
<script> <script>
var range = AirportChart.getScreenRange(); var range = AirportChart.getScreenRange();
if (range &gt; 100) AirportChart.setScreenRange(math.max(range/range_step, 100));
AirportChart.setScreenRange(range/range_step);
setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange()); setprop("/sim/gui/dialogs/airports/zoom-range", AirportChart.getScreenRange());
</script> </script>
</binding> </binding>