<?xml version="1.0"?>

<PropertyList>
	<name>callsign</name>
	<layout>vbox</layout>
	<x>30</x>
	<y>60</y>
	<pref-width>160</pref-width>

	<nasal>
		<open>
			var loopid = 0;
			var list = cmdarg().getNode("list");

			var search = func(list, item) {
				var left = 0;
				var right = size(list);
				while (left &lt; right) {
					var middle = int((left + right) / 2);
					var c = cmp(list[middle].getNode("callsign").getValue(), item);
					if (!c)
						return middle;
					if (c > 0)
						right = middle;
					else
						left = middle + 1;
				}
				return -1;
			}

			var select = func(which) {
				var index = search(cam.aircraft_list, which);
				if (index >= 0)
					cam.select_aircraft(index);
			}

			var loop = func(id) {
				id == loopid or return;
				cam.update_aircraft_list();
				list.removeChildren("value");

				forindex (var i; cam.aircraft_list) {
					var name = cam.aircraft_list[i].getNode("callsign").getValue();
					list.getChild("value", i, 1).setValue(name);
				}
				gui.dialog_update("callsign", "list");
				settimer(func { loop(id) }, 5);
			}

			loop(loopid);
		</open>

		<close>
			loopid += 1;
		</close>
	</nasal>

	<group>
		<layout>hbox</layout>
		<empty><stretch>1</stretch></empty>

		<text>
			<label>Select Aircraft</label>
		</text>

		<empty><stretch>1</stretch></empty>

		<button>
			<pref-width>16</pref-width>
			<pref-height>16</pref-height>
			<legend></legend>
			<default>1</default>
			<keynum>27</keynum>
			<border>2</border>

			<binding>
				<command>nasal</command>
				<script>cam.callsign_dialog.close()</script>
			</binding>
		</button>
	</group>

	<hrule/>

	<list>
		<name>list</name>
		<halign>fill</halign>
		<pref-height>300</pref-height>
		<property>/sim/gui/dialogs/cam/select</property>
		<binding>
			<command>dialog-apply</command>
		</binding>
		<binding>
			<command>nasal</command>
			<script>select(getprop("/sim/gui/dialogs/cam/select"))</script>
		</binding>
	</list>
</PropertyList>