b339ff1358
Checklist items now support a <condition> element that evaluates when the checklist item is complete, and is used to provide color coding in the checklist dialog.
241 lines
8.4 KiB
XML
241 lines
8.4 KiB
XML
<?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>
|