2004-05-12 15:37:17 +00:00
|
|
|
##
|
|
|
|
## 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);
|
|
|
|
}
|
2004-05-15 23:04:17 +00:00
|
|
|
foreach(tag; ["hdg", "alt", "vel"]) {
|
|
|
|
guinode.getNode(tag ~ "-active", 1).setBoolValue(0);
|
|
|
|
}
|
2004-05-12 15:37:17 +00:00
|
|
|
}
|
|
|
|
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());
|
|
|
|
}
|