Library globals

Source checklist.nas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
# 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 autoTutorials = props.globals.getNode("/sim/checklists/auto-tutorials");
  if (autoTutorials != nil and !autoTutorials.getBoolValue()) 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 allowed = grp.getNode("auto-tutorial");
      if (allowed != nil and !allowed.getBoolValue()) continue;

      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 allowed = ch.getNode("auto-tutorial");
    if (allowed != nil and !allowed.getBoolValue()) continue;

    var tutorial = tutorials.addChild("tutorial");

    # 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);
  }
}

convert_checklists();