<?xml version="1.0"?> <PropertyList> <name>checklist</name> <layout>vbox</layout> <default-padding>1</default-padding> <color> <red type="float">0.41</red> <green type="float">0.4</green> <blue type="float">0.42</blue> <alpha type="float">1.0</alpha> <alpha type="float">1.0</alpha> </color> <nasal> <open> var dlgRoot = cmdarg(); var checklists = props.globals.getNode("/sim/checklists", 1).getChildren("checklist"); if (size(checklists) > 0) { var combo = gui.findElementByName(dlgRoot, "checklist-combo"); var group = gui.findElementByName(dlgRoot, "checklist-table-group"); forindex (var idx; checklists) { combo.getChild("value", idx, 1).setValue(checklists[idx].getNode("title", 1).getValue()); var c = checklists[idx]; var row = 0; # Set up a new table, only visible when this checklist is selected. var table = group.getChild("group", idx, 1); table.getNode("row", 1).setValue(0); table.getNode("col", 1).setValue(0); table.getNode("default-padding", 1).setValue(4); table.getNode("layout", 1).setValue("table"); table.getNode("valign", 1).setValue("top"); var vis = table.getNode("visible", 1).getNode("equals", 1); vis.getNode("property", 1).setValue("sim/gui/dialogs/checklist/selected-checklist"); vis.getNode("value", 1).setValue(c.getNode("title").getValue()); var items = c.getChildren("item"); var txtcount = 0; forindex (var i; items) { var item = items[i]; var t = table.getChild("text", txtcount, 1); txtcount += 1; var values = item.getChildren("value"); if (size(values) == 0) { # Single name element with no values. Used as title t.getNode("halign", 1).setValue("center"); t.getNode("row", 1).setValue(row); t.getNode("col", 1).setValue(0); t.getNode("colspan", 1).setValue(2); t.getNode("label", 1).setValue(item.getNode("name", 1).getValue()); row = row + 1; } else { t.getNode("halign", 1).setValue("left"); t.getNode("row", 1).setValue(row); t.getNode("col", 1).setValue(0); t.getNode("label", 1).setValue(item.getNode("name", 1).getValue()); forindex (var v; values) { var t = table.getChild("text", txtcount, 1); txtcount += 1; t.getNode("halign", 1).setValue("right"); t.getNode("row", 1).setValue(row); if (v > 0) { # The second row of values can overlap with the # first column if required - helps keep the # checklist dialog as compact as possible t.getNode("col", 1).setValue(0); t.getNode("colspan", 1).setValue(2); } else { t.getNode("col", 1).setValue(1); } t.getNode("label", 1).setValue(values[v].getValue()); # If there's a complete node, it contains a condition # that can be checked to ensure the checklist item is # complete. We display this item in yellow while the # condition is not met, and green once it is complete. var condition = item.getNode("condition"); if (condition != nil) { var vis = t.getNode("visible", 1); props.copy(condition, vis); var c = t.getNode("color", 1); c.getNode("red", 1).setValue(0.2); c.getNode("green", 1).setValue(1.0); c.getNode("blue", 1).setValue(0.2); # Now create an yellow version for when the condition # is not met. t = table.getChild("text", txtcount, 1); txtcount += 1; t.getNode("halign", 1).setValue("right"); t.getNode("row", 1).setValue(row); if (v > 0) { # The second row of values can overlap with the # first column if required - helps keep the # checklist dialog as compact as possible t.getNode("col", 1).setValue(0); t.getNode("colspan", 1).setValue(2); } else { t.getNode("col", 1).setValue(1); } t.getNode("label", 1).setValue(values[v].getValue()); c = t.getNode("color", 1); c.getNode("red", 1).setValue(1.0); c.getNode("green", 1).setValue(1.0); c.getNode("blue", 1).setValue(0.2); vis = t.getNode("visible", 1).getNode("not", 1); props.copy(condition, vis); } row = row + 1; } } } } setprop("sim/gui/dialogs/checklist/selected-checklist", checklists[0].getNode("title").getValue()); } else { var group = gui.findElementByName(dlgRoot, "checklist-table-group"); var table = group.getNode("text", 1); table.getNode("row", 1).setValue(0); table.getNode("col", 1).setValue(0); table.getNode("default-padding", 1).setValue(4); table.getNode("layout", 1).setValue("table"); table.getNode("valign", 1).setValue("top"); table.getNode("halign", 1).setValue("center"); table.getNode("label", 1).setValue("No checklists exist for this aircraft"); } var setTransparency = func(updateDialog){ var alpha = (getprop("/sim/gui/dialogs/checklist/transparent") or 0); dlgRoot.getNode("color/alpha").setValue(1-alpha*0.3); dlgRoot.getNode("color/red").setValue(0.41-alpha*0.2); dlgRoot.getNode("color/green").setValue(0.4-alpha*0.2); dlgRoot.getNode("color/blue").setValue(0.42-alpha*0.2); var n = props.Node.new({ "dialog-name": "checklist" }); if (updateDialog) { fgcommand("dialog-close", n); fgcommand("dialog-show", n); } } setTransparency(0); </open> </nasal> <group> <layout>hbox</layout> <empty><stretch>1</stretch></empty> <text> <label>Aircraft Checklists</label> </text> <empty><stretch>1</stretch></empty> <button> <pref-width>16</pref-width> <pref-height>16</pref-height> <legend></legend> <keynum>27</keynum> <border>2</border> <binding> <command>dialog-close</command> </binding> </button> </group> <hrule/> <group> <layout>hbox</layout> <text> <halign>right</halign> <label>Checklist:</label> </text> <combo> <name>checklist-combo</name> <property>/sim/gui/dialogs/checklist/selected-checklist</property> <editable>false</editable> <pref-width>200</pref-width> <halign>fill</halign> <binding> <command>dialog-apply</command> <object-name>checklist-combo</object-name> </binding> </combo> <empty><stretch>true</stretch></empty> <checkbox> <label>Transparent</label> <pref-width>100</pref-width> <property>/sim/gui/dialogs/checklist/transparent</property> <live>true</live> <halign>right</halign> <binding> <command>dialog-apply</command> </binding> <binding> <command>property-toggle</command> </binding> <binding> <command>nasal</command> <script>setTransparency(1);</script> </binding> </checkbox> </group> <hrule/> <group> <default-padding>4</default-padding> <halign>fill</halign> <layout>table</layout> <name>checklist-table-group</name> </group> </PropertyList>