bb8b06e294
has to be given before a --wp or --flight-plan option to work.) - let the "Remove" button remove the first entry by default, not the last. (Note that you can remove any entry if you selected it in the list first. Likewise you can insert a new waypoint at any position by selecting the respective entry.)
204 lines
4.5 KiB
XML
204 lines
4.5 KiB
XML
<?xml version="1.0"?>
|
|
|
|
<!--
|
|
command interface /autopilot/route-manager/input:
|
|
|
|
@clear ... clear route
|
|
@pop ... remove first entry
|
|
@delete3 ... delete 4th entry
|
|
@insert2:ksfo@900 ... insert "ksfo@900" as 3rd entry
|
|
ksfo@900 ... append "ksfo@900"
|
|
|
|
-->
|
|
|
|
<PropertyList>
|
|
<name>route-manager</name>
|
|
<layout>vbox</layout>
|
|
<default-padding>4</default-padding>
|
|
|
|
<text>
|
|
<label>Route Manager</label>
|
|
</text>
|
|
|
|
<hrule><empty/></hrule>
|
|
|
|
<nasal>
|
|
<open>
|
|
var ft = getprop("/sim/startup/units") == "feet";
|
|
var dlg = props.globals.getNode("/sim/gui/dialogs/route-manager", 1);
|
|
var selection = dlg.getNode("selection", 1);
|
|
var input = dlg.getNode("input", 1);
|
|
|
|
selection.setValue("");
|
|
input.setValue("");
|
|
|
|
var list = cmdarg().getNode("list");
|
|
var cmd = props.globals.getNode("/autopilot/route-manager/input", 1);
|
|
var routemgr = props.globals.getNode("/autopilot/route-manager/route", 1);
|
|
|
|
sel_index = func {
|
|
var s = selection.getValue();
|
|
selection.setValue("");
|
|
return s == "" ? -1 : split(':', s)[0] - 1;
|
|
}
|
|
|
|
clear = func {
|
|
cmd.setValue("@clear");
|
|
}
|
|
|
|
insert = func {
|
|
cmd.setValue("@insert" ~ sel_index() ~ ":" ~ input.getValue());
|
|
input.setValue("");
|
|
}
|
|
|
|
remove = func {
|
|
var pos = sel_index();
|
|
cmd.setValue("@delete" ~ (pos > 0 ? pos : 0));
|
|
}
|
|
|
|
route_changed = func {
|
|
list.removeChildren("value");
|
|
var wp = routemgr.getChildren("wp");
|
|
forindex (var i; wp) {
|
|
var id = wp[i].getNode("id").getValue();
|
|
var lon = wp[i].getNode("longitude-deg").getValue();
|
|
var lat = wp[i].getNode("latitude-deg").getValue();
|
|
var alt = wp[i].getNode("altitude-m").getValue();
|
|
var entry = sprintf("%d: %-5s %3.4f lon %3.4f lat ",
|
|
i + 1, id, lon, lat);
|
|
if (alt > -9990) {
|
|
if (ft) {
|
|
entry ~= sprintf("%.0f ft", alt / 0.3048);
|
|
} else {
|
|
entry ~= sprintf("%.0f m", alt);
|
|
}
|
|
}
|
|
list.getChild("value", i, 1).setValue(entry);
|
|
}
|
|
|
|
fgcommand("dialog-update", props.Node.new({"object-name": "list",
|
|
"dialog-name": "route-manager"}));
|
|
}
|
|
|
|
var lst = setlistener("/autopilot/route-manager/route/num", route_changed, 1);
|
|
</open>
|
|
|
|
<close>
|
|
removelistener(lst);
|
|
</close>
|
|
</nasal>
|
|
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<default-padding>2</default-padding>
|
|
|
|
<text>
|
|
<label>MMMMMMMMMMMMMMMM</label>
|
|
<format>Target: %s</format>
|
|
<property>/autopilot/route-manager/wp[0]/id</property>
|
|
<live>true</live>
|
|
</text>
|
|
|
|
<text>
|
|
<label>MMMMMMMMM</label>
|
|
<format>Dist: %.2f nm</format>
|
|
<property>/autopilot/route-manager/wp[0]/dist</property>
|
|
<live>true</live>
|
|
</text>
|
|
|
|
<text>
|
|
<label>MMMMMMMMM</label>
|
|
<format>ETA: %s</format>
|
|
<property>/autopilot/route-manager/wp[0]/eta</property>
|
|
<live>true</live>
|
|
</text>
|
|
</group>
|
|
|
|
<list>
|
|
<name>list</name>
|
|
<halign>fill</halign>
|
|
<pref-height>150</pref-height>
|
|
<property>/sim/gui/dialogs/route-manager/selection</property>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
<object-name>list</object-name>
|
|
</binding>
|
|
</list>
|
|
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<default-padding>4</default-padding>
|
|
|
|
<text>
|
|
<label>Waypoint:</label>
|
|
<pref-width>60</pref-width>
|
|
</text>
|
|
|
|
<input>
|
|
<name>input</name>
|
|
<pref-width>220</pref-width>
|
|
<property>/sim/gui/dialogs/route-manager/input</property>
|
|
</input>
|
|
|
|
<button>
|
|
<legend>Add</legend>
|
|
<default>true</default>
|
|
<pref-width>70</pref-width>
|
|
<binding>
|
|
<command>dialog-apply</command>
|
|
</binding>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>insert()</script>
|
|
</binding>
|
|
<binding>
|
|
<command>dialog-update</command>
|
|
</binding>
|
|
</button>
|
|
</group>
|
|
|
|
<text>
|
|
<padding>1</padding>
|
|
<label>Format: (airport|fix|nav|lon,lat)[@alt] -- e.g. "KSFO@900"</label>
|
|
<color>
|
|
<red>0.5</red>
|
|
<green>0.5</green>
|
|
<blue>0.5</blue>
|
|
</color>
|
|
</text>
|
|
|
|
<group>
|
|
<layout>hbox</layout>
|
|
<halign>fill</halign>
|
|
<default-padding>6</default-padding>
|
|
|
|
<button>
|
|
<legend>Clear List</legend>
|
|
<equal>true</equal>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>clear()</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button>
|
|
<legend>Remove</legend>
|
|
<equal>true</equal>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>remove()</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<empty><stretch>true</stretch></empty>
|
|
|
|
<button>
|
|
<legend>Close</legend>
|
|
<equal>true</equal>
|
|
<key>Esc</key>
|
|
<binding>
|
|
<command>dialog-close</command>
|
|
</binding>
|
|
</button>
|
|
</group>
|
|
</PropertyList>
|