route-manager vbox true 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); var sel_index = func { var s = selection.getValue(); selection.setValue(""); return s == "" ? -1 : split(':', s)[0] - 1; } var clear = func { cmd.setValue("@clear"); } var insert = func { cmd.setValue("@insert" ~ sel_index() ~ ":" ~ input.getValue()); input.setValue(""); } var remove = func { var pos = sel_index(); cmd.setValue("@delete" ~ (pos > 0 ? pos : 0)); } var load = func { file_selector.open(); } var 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); var load_wp_file = func(path) { call(func { var file = io.open(path.getValue(), "r"); var index = sel_index(); while ((var wp = io.readln(file)) != nil) { wp = string.trim(wp); if (wp != "") { cmd.setValue("@insert" ~ index ~ ":" ~ wp); if (index >= 0) index += 1; } } io.close(file); }, [], var err = []); if (size(err)) gui.popupTip("can't open file " ~ path.getValue(), 5); } var file_selector = gui.FileSelector.new(load_wp_file, "Load waypoint list", "Load"); removelistener(lst); file_selector.del(); hbox 1 1 hbox 2 Target: %s /autopilot/route-manager/wp[0]/id true Dist: %.2f nm /autopilot/route-manager/wp[0]/dist true ETA: %s /autopilot/route-manager/wp[0]/eta true list fill fill true 150 /sim/gui/dialogs/route-manager/selection dialog-apply list hbox 4 60 input fill true 220 /sim/gui/dialogs/route-manager/input 1 0.5 0.5 0.5 hbox fill 6 true