<?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/> <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 route = 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 = route.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>