8bc72e8e7b
set their properties as strings, not bools. So set the properties once from initialization to ensure their types are correct.
83 lines
3.2 KiB
Text
83 lines
3.2 KiB
Text
##
|
|
## These are just GUI helper routines. The autopilot itself is not a
|
|
## Nasal module.
|
|
##
|
|
|
|
tagSettings =
|
|
{
|
|
"hdg-wing" : ["/autopilot/locks/heading", "wing-leveler"],
|
|
"hdg-bug" : ["/autopilot/locks/heading", "dg-heading-hold"],
|
|
"hdg-true" : ["/autopilot/locks/heading", "true-heading-hold"],
|
|
"hdg-nav" : ["/autopilot/locks/heading", "nav1-hold"],
|
|
"vel-throttle" : ["/autopilot/locks/speed", "speed-with-throttle"],
|
|
"vel-pitch" : ["/autopilot/locks/speed", "speed-with-pitch-trim"],
|
|
"alt-vert" : ["/autopilot/locks/altitude", "vertical-speed-hold"],
|
|
"alt-pitch" : ["/autopilot/locks/altitude", "pitch-hold"],
|
|
"alt-aoa" : ["/autopilot/locks/altitude", "aoa-hold"],
|
|
"alt-alt" : ["/autopilot/locks/altitude", "altitude-hold"],
|
|
"alt-agl" : ["/autopilot/locks/altitude", "agl-hold"],
|
|
"alt-gs" : ["/autopilot/locks/altitude", "gs1-hold"]
|
|
};
|
|
|
|
radioGroups = [["hdg-wing", "hdg-bug", "hdg-true", "hdg-nav"],
|
|
["vel-throttle", "vel-pitch"],
|
|
["alt-vert", "alt-pitch", "alt-aoa", "alt-alt",
|
|
"alt-agl", "alt-gs"]];
|
|
|
|
# Initialize to get the types of the gui properties correct
|
|
INIT = func {
|
|
guinode = props.globals.getNode("/autopilot/gui", 1);
|
|
foreach(tag; keys(tagSettings)) {
|
|
guinode.getNode(tag, 1).setBoolValue(0);
|
|
}
|
|
foreach(tag; ["hdg", "alt", "vel"]) {
|
|
guinode.getNode(tag ~ "-active", 1).setBoolValue(0);
|
|
}
|
|
}
|
|
settimer(INIT, 0);
|
|
|
|
update = func {
|
|
# Suck out the values from the dialog
|
|
fgcommand("dialog-apply", props.Node.new());
|
|
|
|
# Sanitize the radio buttons such that only one is selected. We are
|
|
# passed a tag indicating the one that was pressed.
|
|
if(size(arg) > 0) {
|
|
tag = arg[0];
|
|
foreach(group; radioGroups) {
|
|
for(i=0; i<size(group); i = i+1) {
|
|
if(tag == group[i]) {
|
|
if(getprop("/autopilot/gui", tag)) {
|
|
# The user just turned it on, turn the rest off...
|
|
for(j=0; j<size(group); j=j+1) {
|
|
if(j != i) {
|
|
setprop("/autopilot/gui", group[j], 0);
|
|
}
|
|
}
|
|
} else {
|
|
# The user tried to turn off an active radio
|
|
# button. Turn it back on.
|
|
setprop("/autopilot/gui", tag, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Set the actual output properties for the autopilot system
|
|
foreach(tag; keys(tagSettings)) {
|
|
setting = tagSettings[tag];
|
|
if(getprop("/autopilot/gui", tag)) {
|
|
setprop(setting[0], setting[1]);
|
|
}
|
|
}
|
|
if(!getprop("/autopilot/gui/hdg-active")) {
|
|
setprop("/autopilot/locks/heading", ""); }
|
|
if(!getprop("/autopilot/gui/alt-active")) {
|
|
setprop("/autopilot/locks/altitude", ""); }
|
|
if(!getprop("/autopilot/gui/vel-active")) {
|
|
setprop("/autopilot/locks/speed", ""); }
|
|
|
|
# Push any changes back to the dialog
|
|
fgcommand("dialog-update", props.Node.new());
|
|
}
|