<?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>