1
0
Fork 0
fgdata/Nasal/checklist.nas

74 lines
2.5 KiB
Text

# Nasal functions for handling the checklists present under /sim/checklists
# Convert checklists into full tutorials.
var convert_checklists = func {
if ((props.globals.getNode("/sim/checklists") != nil) and
(props.globals.getNode("/sim/checklists").getChildren("checklist") != nil) and
(size(props.globals.getNode("/sim/checklists").getChildren("checklist")) > 0) )
{
var checklists = props.globals.getNode("/sim/checklists").getChildren("checklist");
var tutorials = props.globals.getNode("/sim/tutorials", 1);
foreach (var ch; checklists) {
var name = ch.getNode("title", 1).getValue();
var tutorial = tutorials.getNode("tutorial[" ~ size(tutorials.getChildren("tutorial")) ~ "]", 1);
# Initial high level config
tutorial.getNode("name", 1).setValue("Checklist: " ~ name);
var description =
"Tutorial to run through the " ~
name ~
" checklist.\n\nChecklist available through the Help->Checklists menu.\n\n";
var step = tutorial.getNode("step", 1);
step.getNode("message", 1).setValue("Checklist: " ~ name);
# Now go through each of the checklist items and generate a tutorial step
# for each.
# Checklist may consist of one or more pages.
var pages = ch.getChildren("page");
if (size(pages) == 0) {
# Or no pages at all, in which case we need to create a checklist of one page
append(pages, ch);
}
foreach (var page; pages) {
foreach (var item; page.getChildren("item")) {
step = tutorial.getNode("step["~ size(tutorial.getChildren("step")) ~ "]", 1);
var msg = item.getNode("name", 1).getValue();
if (size(item.getChildren("value")) > 0) {
msg = msg ~ " :";
foreach (var v; item.getChildren("value")) {
msg = msg ~ " " ~ v.getValue();
}
}
step.getNode("message", 1).setValue(msg);
description = description ~ msg ~ "\n";
if (item.getNode("condition") != nil) {
var cond = step.getNode("exit", 1).getNode("condition", 1);
props.copy(item.getNode("condition"), cond);
}
if (item.getNode("marker") != nil) {
var marker= step.getNode("marker", 1);
props.copy(item.getNode("marker"), marker);
}
}
}
tutorial.getNode("description", 1).setValue(description);
}
}
}
_setlistener("/sim/signals/nasal-dir-initialized", func {
convert_checklists();
});