# 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) return; var tutorials = props.globals.getNode("/sim/tutorials", 1); var groups = props.globals.getNode("/sim/checklists").getChildren("group"); var checklists = []; if (size(groups) > 0) { foreach (var grp; groups) { var checks = grp.getChildren("checklist"); foreach (var chk; checks) { append(checklists, chk); } } } else { checklists = props.globals.getNode("/sim/checklists").getChildren("checklist"); } if (size(checklists) == 0) return; 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(); });