<?xml version="1.0"?>

<PropertyList>
	<name>model-view-select</name>
	<dialog-name>model-view-select</dialog-name>
	<x>46</x>
	<y>33</y>
	<layout>hbox</layout>
	<default-padding>0</default-padding>

	<nasal>
		<open>
			var self = cmdarg();
			var dlg = props.globals.getNode("sim/gui/dialogs/model-view-select", 1);
			dlg.getNode("open", 1).setBoolValue(1);
			var maxh = getprop("sim/startup/ysize") - 50;
			var gui = getprop("sim/gui/current-style");
			var baseline = getprop("/sim/gui/style[" ~ gui ~ "]/fonts/gui/baseline-height") or 21;
			var list = cmdarg().getNode("list");

			var data = view.model_view_handler.list;
			var height = size(data) * baseline;
			if (height > maxh)
				height = maxh;
			list.getNode("pref-height").setValue(height);
			list.removeChildren("value");

			var entries = {};
			forindex (var i; data) {
				if (i == 0) {
					var ident = var myself = '[' ~ data[i].callsign ~ ']';
					list.getChild("value", size(data), 1).setValue(ident);
				} else {
					var ident = '"' ~ data[i].callsign ~ '" (' ~ data[i].model ~ ')';
					list.getChild("value", i - 1, 1).setValue(ident);
				}
				entries[ident] = data[i].callsign;
			}

			var select = func {
				var e = dlg.initNode("choice", "").getValue();
				if (e == myself or contains(multiplayer.model.callsign, entries[e]))
					view.model_view_handler.select(entries[e]);
				else
					settimer(func fgcommand("dialog-show", self), 0);
			}
		</open>

		<close>
			dlg.getNode("open").setValue(0);
		</close>
	</nasal>

	<list>
		<legend/>
		<pref-height>100</pref-height>
		<pref-width>250</pref-width>
		<border>0</border>
		<property>/sim/gui/dialogs/model-view-select/choice</property>
		<binding>
			<command>dialog-apply</command>
		</binding>
		<binding>
			<command>nasal</command>
			<script>select()</script>
		</binding>
		<binding>
			<command>dialog-close</command>
		</binding>
	</list>
</PropertyList>