1
0
Fork 0
fgdata/gui/dialogs/location-in-air.xml
Stuart Buchanan 6d44030df5 Improve UI for select carrier start locations
Add dynamic combo boxes for users to select from the available
carriers and parking position/catapults/FLOLS/Abeam positions
in-sim.
2020-04-18 18:10:17 +01:00

596 lines
16 KiB
XML

<?xml version="1.0"?>
<PropertyList>
<name>location-in-air</name>
<layout>vbox</layout>
<halign>left</halign>
<nasal>
<open>
var p = props.globals.getNode("/sim/gui/dialogs/location-in-air/", 1);
var dlg_root = cmdarg();
var mode = {
airport: p.getNode("airport", 1),
lonlat: p.getNode("lonlat", 1),
vor: p.getNode("vor", 1),
ndb: p.getNode("ndb", 1),
fix: p.getNode("fix", 1),
carrier: p.getNode("carrier-active", 1),
};
var set_radio = func(m) {
foreach (var k; keys(mode)) {
mode[k].setBoolValue(m == k);
}
};
var initialized = 0;
foreach (var k; keys(mode)) {
if (mode[k].getType() == "NONE") {
mode[k].setBoolValue(0);
}
initialized += mode[k].getBoolValue();
}
if (!initialized) {
set_radio("airport");
}
var pickNearest = func(type,propname,freqpropname) {
var found = navinfo(type,getprop(propname));
if( found == nil or size(found) == 0 ) {
print(type, " ", getprop(propname), " NOT found");
setprop(propname, "");
setprop(freqpropname, "");
return;
}
setprop(propname, found[0].id);
setprop(freqpropname, found[0].frequency / 100.0);
}
var populateCarrierCombo = func() {
# Fill the carrier-selection combo box with a list of available carriers
var combo = gui.findElementByName( dlg_root, "carrier-selection" );
var carriers = props.globals.getNode( "/ai/models" );
combo.removeChildren("value");
foreach (var carrier; carriers.getChildren("carrier")) {
combo.addChild("value").setValue(carrier.getNode("name", 1).getValue());
}
};
var populateCarrierPositionCombo = func() {
# Fill the carrier-position-select combo box with the special values for
# final approach and abeam in-air positions, plus any catapults or parking
# positions available.
var combo = gui.findElementByName( dlg_root, "carrier-position-selection" );
var carriers = props.globals.getNode( "/ai/models" );
# Clear the box, as we may have selected a new carrier from the carrier selection
combo.removeChildren("value");
combo.addChild("value").setValue("FLOLS");
combo.addChild("value").setValue("Abeam");
foreach (var carrier; carriers.getChildren("carrier")) {
if (carrier.getNode("name", 1).getValue() == getprop("/sim/presets/carrier")) {
foreach (var parkpos; carrier.getChildren("parking-pos")) {
combo.addChild("value").setValue(parkpos.getNode("name", 1).getValue());
}
}
}
};
populateCarrierCombo();
populateCarrierPositionCombo();
</open>
<close># just kept for educational purposes :-)</close>
</nasal>
<group>
<layout>hbox</layout>
<empty>
<stretch>1</stretch>
</empty>
<text>
<label>Position Aircraft In Air</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>table</layout>
<group>
<default-padding>6</default-padding>
<row>0</row>
<col>1</col>
<layout>vbox</layout>
<radio>
<live>true</live>
<halign>left</halign>
<label>Airport:</label>
<property>/sim/gui/dialogs/location-in-air/airport</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("airport")</script>
</binding>
</radio>
<radio>
<label>Position:</label>
<halign>left</halign>
<live>true</live>
<property>/sim/gui/dialogs/location-in-air/lonlat</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("lonlat")</script>
</binding>
</radio>
<radio>
<label>VOR:</label>
<halign>left</halign>
<live>true</live>
<property>/sim/gui/dialogs/location-in-air/vor</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("vor")</script>
</binding>
</radio>
<radio>
<live>true</live>
<halign>left</halign>
<label>NDB:</label>
<property>/sim/gui/dialogs/location-in-air/ndb</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("ndb")</script>
</binding>
</radio>
<radio>
<label>Fix:</label>
<live>true</live>
<property>/sim/gui/dialogs/location-in-air/fix</property>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("fix")</script>
</binding>
</radio>
<radio>
<live>true</live>
<label>Aircraft Carrier:</label>
<property>/sim/gui/dialogs/location-in-air/carrier-active</property>
<halign>left</halign>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>set_radio("carrier")</script>
</binding>
</radio>
</group>
<group>
<layout>table</layout>
<row>0</row>
<col>2</col>
<visible>
<property>/sim/gui/dialogs/location-in-air/airport</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>Airport:</label>
</text>
<input>
<row>0</row>
<col>1</col>
<property>/sim/presets/airport-id</property>
<binding>
<command>nasal</command>
<script>set_radio("airport")</script>
</binding>
</input>
<text>
<row>1</row>
<col>0</col>
<halign>right</halign>
<label> Runway:</label>
</text>
<input>
<row>1</row>
<col>1</col>
<property>/sim/presets/runway</property>
<binding>
<command>nasal</command>
<script>set_radio("airport")</script>
</binding>
</input>
</group>
<group>
<row>0</row>
<col>2</col>
<layout>table</layout>
<visible>
<property>/sim/gui/dialogs/location-in-air/lonlat</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>Longitude:</label>
</text>
<input>
<row>0</row>
<col>1</col>
<property>/sim/presets/longitude-deg</property>
<binding>
<command>nasal</command>
<script>set_radio("lonlat")</script>
</binding>
</input>
<text>
<row>1</row>
<col>0</col>
<halign>right</halign>
<label> Latitude:</label>
</text>
<input>
<row>1</row>
<col>1</col>
<property>/sim/presets/latitude-deg</property>
<binding>
<command>nasal</command>
<script>set_radio("lonlat")</script>
</binding>
</input>
</group>
<group>
<row>0</row>
<col>2</col>
<layout>table</layout>
<visible>
<property>/sim/gui/dialogs/location-in-air/vor</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>VOR:</label>
</text>
<input>
<row>0</row>
<col>1</col>
<property>/sim/presets/vor-id</property>
<binding>
<command>nasal</command>
<script>set_radio("vor")</script>
</binding>
</input>
</group>
<group>
<row>0</row>
<col>2</col>
<layout>table</layout>
<visible>
<property>/sim/gui/dialogs/location-in-air/ndb</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>NDB:</label>
</text>
<input>
<row>0</row>
<col>1</col>
<property>/sim/presets/ndb-id</property>
<binding>
<command>nasal</command>
<script>set_radio("ndb")</script>
</binding>
</input>
</group>
<group>
<row>0</row>
<col>2</col>
<layout>table</layout>
<visible>
<property>/sim/gui/dialogs/location-in-air/fix</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>Fix:</label>
</text>
<input>
<row>0</row>
<col>1</col>
<property>/sim/presets/fix</property>
<binding>
<command>nasal</command>
<script>set_radio("fix")</script>
</binding>
</input>
</group>
<group>
<row>0</row>
<col>2</col>
<layout>table</layout>
<visible>
<property>/sim/gui/dialogs/location-in-air/carrier-active</property>
</visible>
<text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>Carrier:</label>
</text>
<combo>
<name>carrier-selection</name>
<row>0</row>
<col>1</col>
<property>/sim/presets/carrier</property>
<binding>
<command>dialog-apply</command>
<object-name>carrier-selection</object-name>
</binding>
<binding>
<command>nasal</command>
<script>populateCarrierPositionCombo();</script>
</binding>
</combo>
<text>
<row>1</row>
<col>0</col>
<halign>right</halign>
<label>Position:</label>
</text>
<combo>
<name>carrier-position-selection</name>
<row>1</row>
<col>1</col>
<property>/sim/presets/carrier-position</property>
<binding>
<command>dialog-apply</command>
<object-name>carrier-position-selection</object-name>
</binding>
</combo>
</group>
</group>
<hrule/>
<text>
<label>Relative Position</label>
</text>
<group>
<layout>hbox</layout>
<group>
<layout>table</layout>
<text>
<row>0</row><col>0</col>
<halign>right</halign>
<label> Distance (nm):</label>
<enable><not><property>/sim/gui/dialogs/location-in-air/lonlat</property></not></enable>
</text>
<input>
<row>0</row><col>1</col>
<property>/sim/presets/offset-distance-nm</property>
<enable><not><property>/sim/gui/dialogs/location-in-air/lonlat</property></not></enable>
</input>
<text>
<row>0</row><col>2</col>
<halign>right</halign>
<label>Azimuth (deg):</label>
<enable><not><property>/sim/gui/dialogs/location-in-air/lonlat</property></not></enable>
</text>
<input>
<row>0</row><col>3</col>
<property>/sim/presets/offset-azimuth-deg</property>
<enable><not><property>/sim/gui/dialogs/location-in-air/lonlat</property></not></enable>
</input>
<text>
<row>1</row><col>0</col>
<halign>right</halign>
<label>Altitude (ft):</label>
</text>
<input>
<row>1</row><col>1</col>
<property>/sim/presets/altitude-ft</property>
</input>
<text>
<row>1</row><col>2</col>
<halign>right</halign>
<label> Glidepath (deg):</label>
</text>
<input>
<row>1</row><col>3</col>
<property>/sim/presets/glideslope-deg</property>
</input>
<text>
<row>2</row><col>0</col>
<halign>right</halign>
<label>Airspeed (kt):</label>
</text>
<input>
<row>2</row><col>1</col>
<property>/sim/presets/airspeed-kt</property>
</input>
<text>
<row>2</row><col>2</col>
<halign>right</halign>
<label>Heading (deg):</label>
<enable><not><property>/sim/gui/dialogs/location-in-air/airport</property></not></enable>
</text>
<input>
<row>2</row><col>3</col>
<enable><not><property>/sim/gui/dialogs/location-in-air/airport</property></not></enable>
<property>/sim/presets/heading-deg</property>
</input>
</group>
<!-- only for a gap -->
<group>
<layout>vbox</layout>
<default-padding>1</default-padding>
<text>
<label> </label>
</text>
</group>
</group>
<hrule/>
<group>
<layout>hbox</layout>
<default-padding>10</default-padding>
<button>
<legend>OK</legend>
<default>true</default>
<equal>true</equal>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
if (mode.carrier.getBoolValue()) {
setprop("/sim/presets/airport-id", "");
setprop("/sim/presets/runway", "");
setprop("/sim/presets/runway-requested", 0);
}
else if (!mode.airport.getBoolValue()) {
setprop("/sim/presets/carrier", "");
setprop("/sim/presets/parkpos", "");
setprop("/sim/presets/airport-id", "");
setprop("/sim/presets/runway", "");
setprop("/sim/presets/runway-requested", 0);
} else {
setprop("/sim/presets/carrier", "");
var runway = getprop("/sim/presets/runway");
if (runway != "") {
setprop("/sim/presets/runway-requested", 1);
}
}
if (!mode.lonlat.getBoolValue()) {
setprop("/sim/presets/longitude-deg", -9999);
setprop("/sim/presets/latitude-deg", -9999);
}
if (!mode.vor.getBoolValue()) {
setprop("/sim/presets/vor-id", "");
} else {
pickNearest("vor","/sim/presets/vor-id","/sim/presets/vor-freq");
}
if (!mode.ndb.getBoolValue()) {
setprop("/sim/presets/ndb-id", "");
} else {
pickNearest("ndb","/sim/presets/ndb-id","/sim/presets/ndb-freq");
}
if (!mode.fix.getBoolValue()) {
setprop("/sim/presets/fix", "");
}
var speedRequested = getprop("/sim/presets/airspeed-kt");
if (speedRequested > 0) {
setprop("/sim/presets/speed-set", "knots");
}
</script>
</binding>
<binding>
<command>reposition</command>
</binding>
<binding>
<command>nasal</command>
<script>
ac = getprop("/sim/aircraft");
if (ac == "ufo") { return }
var eng = props.globals.getNode("/controls/engines");
if (eng != nil) {
foreach (c; eng.getChildren("engine")) {
c.getNode("magnetos", 1).setIntValue(3);
c.getNode("throttle", 1).setDoubleValue(0.5);
}
}
</script>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<button>
<legend>Cancel</legend>
<equal>true</equal>
<key>Esc</key>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
</PropertyList>