1
0
Fork 0

Merge commit '9fd7e88'

This commit is contained in:
Ryan Miller 2010-12-28 18:55:43 -08:00
commit 2d00d51107
3 changed files with 142 additions and 80 deletions

View file

@ -155,7 +155,7 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
menubarAutoVisibilityListener = setlistener( "/devices/status/mice/mouse/y", func(n) { menubarAutoVisibilityListener = setlistener( "/devices/status/mice/mouse/y", func(n) {
if( n.getValue() == nil ) return; if( n.getValue() == nil ) return;
if( mouseMode.getValue() != 0 ) return; if( mouseMode.getValue() != 0 ) return;
if( n.getValue() <= menubarAutoVisibilityEdge.getValue() ) if( n.getValue() <= menubarAutoVisibilityEdge.getValue() )
menubarVisibility.setBoolValue( 1 ); menubarVisibility.setBoolValue( 1 );
@ -372,10 +372,10 @@ var OverlaySelector = {
var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/overlay-select.xml", name); var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/overlay-select.xml", name);
m.parents = [OverlaySelector, Dialog]; m.parents = [OverlaySelector, Dialog];
# resolve the path in FG_ROOT, and --fg-aircraft dir, etc # resolve the path in FG_ROOT, and --fg-aircraft dir, etc
m.dir = resolvepath(dir) ~ "/"; m.dir = resolvepath(dir) ~ "/";
var relpath = func(p) substr(p, p[0] == `/`); var relpath = func(p) substr(p, p[0] == `/`);
m.nameprop = relpath(nameprop); m.nameprop = relpath(nameprop);
m.sortprop = relpath(sortprop or nameprop); m.sortprop = relpath(sortprop or nameprop);
@ -724,8 +724,17 @@ var showWeightDialog = func {
dialog[name].set("name", name); dialog[name].set("name", name);
dialog[name].set("layout", "vbox"); dialog[name].set("layout", "vbox");
var header = dialog[name].addChild("text"); var header = dialog[name].addChild("group");
header.set("label", title); header.set("layout", "hbox");
header.addChild("empty").set("stretch", "1");
header.addChild("text").set("label", title);
header.addChild("empty").set("stretch", "1");
var w = header.addChild("button");
w.set("pref-width", 16);
w.set("pref-height", 16);
w.set("legend", "");
w.set("default", 0);
w.setBinding("dialog-close");
dialog[name].addChild("hrule"); dialog[name].addChild("hrule");
@ -801,15 +810,17 @@ var showWeightDialog = func {
weightitem = nil; weightitem = nil;
} }
dialog[name].addChild("hrule");
var buttonBar = dialog[name].addChild("group"); var buttonBar = dialog[name].addChild("group");
buttonBar.set("layout", "hbox"); buttonBar.set("layout", "hbox");
buttonBar.set("default-padding", 10); buttonBar.set("default-padding", 10);
var ok = buttonBar.addChild("button"); var close = buttonBar.addChild("button");
ok.set("legend", "OK"); close.set("legend", "Close");
ok.set("key", "esc"); close.set("default", "true");
ok.setBinding("dialog-apply"); close.set("key", "Enter");
ok.setBinding("dialog-close"); close.setBinding("dialog-close");
# Temporary helper function # Temporary helper function
var tcell = func(parent, type, row, col) { var tcell = func(parent, type, row, col) {

View file

@ -216,12 +216,12 @@ var parse_msg = func (source, msg) {
var pos = Binary.decodeCoord(substr(msg, 6)); var pos = Binary.decodeCoord(substr(msg, 6));
var radius = Binary.decodeDouble(substr(msg, 36)); var radius = Binary.decodeDouble(substr(msg, 36));
resolve_retardant_drop(pos, radius, 0, 0); resolve_retardant_drop(pos, radius, 0, 0);
} }
if (type == 4) { if (type == 4) {
var pos = Binary.decodeCoord(substr(msg, 6)); var pos = Binary.decodeCoord(substr(msg, 6));
var radius = Binary.decodeDouble(substr(msg, 36)); var radius = Binary.decodeDouble(substr(msg, 36));
resolve_foam_drop(pos, radius, 0, 0); resolve_foam_drop(pos, radius, 0, 0);
} }
} }
############################################################################### ###############################################################################
@ -356,7 +356,7 @@ var FireCell = {
CAFire.set_cell(me.x + d[0], me.y + d[1], CAFire.set_cell(me.x + d[0], me.y + d[1],
FireCell.new(me.x + d[0], FireCell.new(me.x + d[0],
me.y + d[1])); me.y + d[1]));
} }
} }
} }
foreach (var d; CAFire.NEIGHBOURS[1]) { foreach (var d; CAFire.NEIGHBOURS[1]) {
@ -385,7 +385,7 @@ var CellModel = {
############################################################ ############################################################
new : func (x, y, alt) { new : func (x, y, alt) {
var m = { parents: [CellModel] }; var m = { parents: [CellModel] };
m.type = "none"; m.type = "none";
m.model = nil; m.model = nil;
m.lat = y * CAFire.CELL_SIZE/60.0 + 0.5 * CAFire.CELL_SIZE / 60.0; m.lat = y * CAFire.CELL_SIZE/60.0 + 0.5 * CAFire.CELL_SIZE / 60.0;
m.lon = x * CAFire.CELL_SIZE/60.0 + 0.5 * CAFire.CELL_SIZE / 60.0; m.lon = x * CAFire.CELL_SIZE/60.0 + 0.5 * CAFire.CELL_SIZE / 60.0;
@ -488,7 +488,7 @@ CAFireModels.update = func {
var c = me.pending[0]; var c = me.pending[0];
me.pending = subvec(me.pending, 1); me.pending = subvec(me.pending, 1);
work -= 1; work -= 1;
if (contains(c, "alt")) { if (contains(c, "alt")) {
if (me.grid[c.x] == nil) { if (me.grid[c.x] == nil) {
me.grid[c.x] = {}; me.grid[c.x] = {};
} }
@ -606,7 +606,7 @@ CAFire.ignite = func (lat, lon) {
# Resolve a water drop. # Resolve a water drop.
# For now: Assume that water makes the affected cell nonflammable forever # For now: Assume that water makes the affected cell nonflammable forever
# and extinguishes it if burning. # and extinguishes it if burning.
# radius - meter : double # radius - meter : double
# Note: volume is unused ATM. # Note: volume is unused ATM.
CAFire.resolve_water_drop = func (lat, lon, radius, volume=0) { CAFire.resolve_water_drop = func (lat, lon, radius, volume=0) {
trace("CAFire.resolve_water_drop: Dumping water at " ~ lat ~", " ~ lon ~ trace("CAFire.resolve_water_drop: Dumping water at " ~ lat ~", " ~ lon ~
@ -652,7 +652,7 @@ CAFire.resolve_retardant_drop = func (lat, lon, radius, volume=0) {
# Resolve a foam drop. # Resolve a foam drop.
# For now: Assume that water makes the affected cell nonflammable forever # For now: Assume that water makes the affected cell nonflammable forever
# and extinguishes it if burning. # and extinguishes it if burning.
# radius - meter : double # radius - meter : double
# Note: volume is unused ATM. # Note: volume is unused ATM.
CAFire.resolve_foam_drop = func (lat, lon, radius, volume=0) { CAFire.resolve_foam_drop = func (lat, lon, radius, volume=0) {
trace("CAFire.resolve_foam_drop: Dumping foam at " ~ lat ~", " ~ lon ~ trace("CAFire.resolve_foam_drop: Dumping foam at " ~ lat ~", " ~ lon ~
@ -904,7 +904,7 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
if (getprop(save_on_exit_pp)) if (getprop(save_on_exit_pp))
CAFire.save_event_log(SAVEDIR ~ "fire_log.xml"); CAFire.save_event_log(SAVEDIR ~ "fire_log.xml");
}); });
if (getprop(restore_on_startup_pp)) { if (getprop(restore_on_startup_pp)) {
settimer(func { settimer(func {
# Delay loading the log until the terrain is there. Note: hack. # Delay loading the log until the terrain is there. Note: hack.
@ -952,7 +952,7 @@ var dialog = {
me.x = x; me.x = x;
me.y = y; me.y = y;
me.bg = [0, 0, 0, 0.3]; # background color me.bg = [0, 0, 0, 0.3]; # background color
me.fg = [[1.0, 1.0, 1.0, 1.0]]; me.fg = [[1.0, 1.0, 1.0, 1.0]];
# #
# "private" # "private"
me.title = "Wildfire"; me.title = "Wildfire";
@ -979,12 +979,12 @@ var dialog = {
titlebar.set("layout", "hbox"); titlebar.set("layout", "hbox");
titlebar.addChild("empty").set("stretch", 1); titlebar.addChild("empty").set("stretch", 1);
titlebar.addChild("text").set("label", "Wildfire settings"); titlebar.addChild("text").set("label", "Wildfire settings");
titlebar.addChild("empty").set("stretch", 1);
var w = titlebar.addChild("button"); var w = titlebar.addChild("button");
w.set("pref-width", 16); w.set("pref-width", 16);
w.set("pref-height", 16); w.set("pref-height", 16);
w.set("legend", ""); w.set("legend", "");
w.set("default", 0); w.set("default", 0);
w.set("key", "esc");
w.setBinding("nasal", "wildfire.dialog.destroy(); "); w.setBinding("nasal", "wildfire.dialog.destroy(); ");
w.setBinding("dialog-close"); w.setBinding("dialog-close");
me.dialog.addChild("hrule"); me.dialog.addChild("hrule");
@ -1011,13 +1011,25 @@ var dialog = {
} }
me.dialog.addChild("hrule"); me.dialog.addChild("hrule");
# Buttons
var buttons = me.dialog.addChild("group");
buttons.node.setValues({"layout" : "hbox"});
# Load button. # Load button.
var load = me.dialog.addChild("button"); var load = buttons.addChild("button");
load.node.setValues({"legend" : "Load Wildfire log", load.node.setValues({"legend" : "Load Wildfire log",
"halign" : "center"}); "halign" : "center"});
load.setBinding("nasal", load.setBinding("nasal",
"wildfire.dialog.select_and_load()"); "wildfire.dialog.select_and_load()");
# Close button
var close = buttons.addChild("button");
close.node.setValues({"legend" : "Close",
"default" : "true",
"key" : "Esc"});
close.setBinding("nasal", "wildfire.dialog.destroy();");
close.setBinding("dialog-close");
fgcommand("dialog-new", me.dialog.prop()); fgcommand("dialog-new", me.dialog.prop());
fgcommand("dialog-show", me.namenode); fgcommand("dialog-show", me.namenode);
}, },

View file

@ -21,7 +21,7 @@ command interface /autopilot/route-manager/input:
var ft = getprop("/sim/startup/units") == "feet"; var ft = getprop("/sim/startup/units") == "feet";
var dlg = props.globals.getNode("/sim/gui/dialogs/route-manager", 1); var dlg = props.globals.getNode("/sim/gui/dialogs/route-manager", 1);
var selection = dlg.getNode("selection", 1); var selection = dlg.getNode("selection", 1);
var input = dlg.getNode("input", 1); var input = dlg.getNode("input", 1);
var routem = props.globals.getNode("/autopilot/route-manager", 1); var routem = props.globals.getNode("/autopilot/route-manager", 1);
selection.setIntValue(-1); selection.setIntValue(-1);
@ -32,7 +32,7 @@ command interface /autopilot/route-manager/input:
var route = routem.getNode("route", 1); var route = routem.getNode("route", 1);
var dep = routem.getNode("departure", 1); var dep = routem.getNode("departure", 1);
var dest = routem.getNode("destination", 1); var dest = routem.getNode("destination", 1);
var sel_index = func { var sel_index = func {
return int(selection.getValue()); return int(selection.getValue());
} }
@ -47,10 +47,10 @@ command interface /autopilot/route-manager/input:
# when selection index is valid, insert *after* the waypoint # when selection index is valid, insert *after* the waypoint
insertIndex = insertIndex + 1; insertIndex = insertIndex + 1;
} }
cmd.setValue("@insert" ~ insertIndex ~ ":" ~ input.getValue()); cmd.setValue("@insert" ~ insertIndex ~ ":" ~ input.getValue());
input.setValue(""); input.setValue("");
if (insertIndex >= 0) { if (insertIndex >= 0) {
selection.setValue(insertIndex); selection.setValue(insertIndex);
gui.dialog_update("route-manager"); gui.dialog_update("route-manager");
@ -60,15 +60,15 @@ command interface /autopilot/route-manager/input:
var remove = func { var remove = func {
cmd.setValue("@delete" ~ sel_index()); cmd.setValue("@delete" ~ sel_index());
} }
var route = func { var route = func {
cmd.setValue("@route" ~ sel_index()); cmd.setValue("@route" ~ sel_index());
} }
var jump_to = func { var jump_to = func {
cmd.setValue("@jump" ~ sel_index()); cmd.setValue("@jump" ~ sel_index());
} }
var load_route = func(path) { var load_route = func(path) {
routem.getNode("file-path", 1).setValue(path.getValue()); routem.getNode("file-path", 1).setValue(path.getValue());
cmd.setValue("@load"); cmd.setValue("@load");
@ -80,26 +80,26 @@ command interface /autopilot/route-manager/input:
cmd.setValue("@save"); cmd.setValue("@save");
gui.dialog_update("route-manager"); gui.dialog_update("route-manager");
} }
var file_selector = gui.FileSelector.new(load_route, "Load flight-plan", "Load"); var file_selector = gui.FileSelector.new(load_route, "Load flight-plan", "Load");
var save_selector = gui.FileSelector.new(save_route, "Save flight-plan", "Save"); var save_selector = gui.FileSelector.new(save_route, "Save flight-plan", "Save");
var activate_fp = func { var activate_fp = func {
cmd.setValue("@activate"); cmd.setValue("@activate");
} }
var departureRunways = dlg.getNode("departure-runways", 1); var departureRunways = dlg.getNode("departure-runways", 1);
var destRunways = dlg.getNode("destination-runways", 1); var destRunways = dlg.getNode("destination-runways", 1);
var sids = dlg.getNode("sids", 1); var sids = dlg.getNode("sids", 1);
var stars = dlg.getNode("stars", 1); var stars = dlg.getNode("stars", 1);
var updateRunways = func { var updateRunways = func {
var depIcao = dep.getNode("airport").getValue(); var depIcao = dep.getNode("airport").getValue();
departureRunways.removeChildren("value"); departureRunways.removeChildren("value");
var currentRunway = dep.getNode("runway").getValue(); var currentRunway = dep.getNode("runway").getValue();
var foundCurrent = 0; var foundCurrent = 0;
var apt = airportinfo(depIcao); var apt = airportinfo(depIcao);
if (apt != nil) { if (apt != nil) {
var i=0; var i=0;
@ -111,16 +111,16 @@ command interface /autopilot/route-manager/input:
} }
} }
} }
if (!foundCurrent) { if (!foundCurrent) {
dep.getNode("runway").clearValue(); dep.getNode("runway").clearValue();
} }
var destIcao = dest.getNode("airport").getValue(); var destIcao = dest.getNode("airport").getValue();
destRunways.removeChildren("value"); destRunways.removeChildren("value");
currentRunway = dest.getNode("runway").getValue(); currentRunway = dest.getNode("runway").getValue();
foundCurrent = 0; foundCurrent = 0;
var apt = airportinfo(destIcao); var apt = airportinfo(destIcao);
if (apt != nil) { if (apt != nil) {
var i=0; var i=0;
@ -132,15 +132,15 @@ command interface /autopilot/route-manager/input:
} }
} }
} }
if (!foundCurrent) { if (!foundCurrent) {
dest.getNode("runway").clearValue(); dest.getNode("runway").clearValue();
} }
print("updated runways"); print("updated runways");
gui.dialog_update("route-manager"); gui.dialog_update("route-manager");
} }
var updateSIDs = func { var updateSIDs = func {
sids.removeChildren("value"); sids.removeChildren("value");
var depIcao = dep.getNode("airport").getValue(); var depIcao = dep.getNode("airport").getValue();
@ -151,17 +151,17 @@ command interface /autopilot/route-manager/input:
gui.dialog_update("route-manager", "sid"); gui.dialog_update("route-manager", "sid");
return; return;
} }
sids.getNode("value[0]", 1).setValue("(none)"); sids.getNode("value[0]", 1).setValue("(none)");
var i=1; var i=1;
foreach (var s; apt.runways[rwy].sids) { foreach (var s; apt.runways[rwy].sids) {
sids.getNode("value[" ~ i ~ "]", 1).setValue(s); sids.getNode("value[" ~ i ~ "]", 1).setValue(s);
i += 1; i += 1;
} }
gui.dialog_update("route-manager", "sid"); gui.dialog_update("route-manager", "sid");
} }
var updateSTARs = func { var updateSTARs = func {
stars.removeChildren("value"); stars.removeChildren("value");
var icao = dest.getNode("airport").getValue(); var icao = dest.getNode("airport").getValue();
@ -172,20 +172,20 @@ command interface /autopilot/route-manager/input:
gui.dialog_update("route-manager", "star"); gui.dialog_update("route-manager", "star");
return; return;
} }
var i=1; var i=1;
stars.getNode("value[0]", 1).setValue("(none)"); stars.getNode("value[0]", 1).setValue("(none)");
foreach (var s; apt.runways[rwy].stars) { foreach (var s; apt.runways[rwy].stars) {
stars.getNode("value[" ~ i ~ "]", 1).setValue(s); stars.getNode("value[" ~ i ~ "]", 1).setValue(s);
i += 1; i += 1;
} }
gui.dialog_update("route-manager", "star"); gui.dialog_update("route-manager", "star");
} }
# initialise departure values based on current position # initialise departure values based on current position
cmd.setValue("@posinit"); cmd.setValue("@posinit");
updateRunways(); updateRunways();
updateSIDs(); updateSIDs();
updateSTARs(); updateSTARs();
@ -222,14 +222,19 @@ command interface /autopilot/route-manager/input:
</group> </group>
<hrule/> <hrule/>
<!-- departure / arrival airport information --> <!-- departure / arrival airport information -->
<group> <group>
<layout>hbox</layout> <layout>table</layout>
<text> <text>
<row>0</row>
<col>0</col>
<halign>right</halign>
<label>Departure:</label> <label>Departure:</label>
<pref-width>80</pref-width>
</text> </text>
<input> <input>
<row>0</row>
<col>1</col>
<halign>left</halign>
<name>departure-airport</name> <name>departure-airport</name>
<pref-width>60</pref-width> <pref-width>60</pref-width>
<property>/autopilot/route-manager/departure/airport</property> <property>/autopilot/route-manager/departure/airport</property>
@ -238,31 +243,38 @@ command interface /autopilot/route-manager/input:
<command>dialog-apply</command> <command>dialog-apply</command>
<object-name>departure-airport</object-name> <object-name>departure-airport</object-name>
</binding> </binding>
<binding> <binding>
<command>nasal</command> <command>nasal</command>
<script>updateRunways();</script> <script>updateRunways();</script>
</binding> </binding>
</input> </input>
<text> <text>
<row>0</row>
<col>2</col>
<format>%s</format> <format>%s</format>
<property>/autopilot/route-manager/departure/name</property> <property>/autopilot/route-manager/departure/name</property>
<live>true</live> <live>true</live>
<stretch>true</stretch> <stretch>true</stretch>
<halign>fill</halign> <halign>fill</halign>
</text> </text>
<text> <text>
<row>0</row>
<col>3</col>
<halign>right</halign>
<label>Rwy:</label> <label>Rwy:</label>
</text> </text>
<combo> <combo>
<row>0</row>
<col>4</col>
<halign>left</halign>
<name>departure-runway</name> <name>departure-runway</name>
<pref-width>60</pref-width>
<property>/autopilot/route-manager/departure/runway</property> <property>/autopilot/route-manager/departure/runway</property>
<editable>false</editable> <editable>false</editable>
<properties>/sim/gui/dialogs/route-manager/departure-runways</properties> <properties>/sim/gui/dialogs/route-manager/departure-runways</properties>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
<object-name>departure-runway</object-name> <object-name>departure-runway</object-name>
@ -272,33 +284,40 @@ command interface /autopilot/route-manager/input:
<script>updateSIDs();</script> <script>updateSIDs();</script>
</binding> </binding>
</combo> </combo>
<text> <text>
<row>0</row>
<col>5</col>
<halign>right</halign>
<label>SID:</label> <label>SID:</label>
</text> </text>
<combo> <combo>
<row>0</row>
<col>6</col>
<halign>left</halign>
<name>sid</name> <name>sid</name>
<pref-width>100</pref-width>
<property>/autopilot/route-manager/departure/sid</property> <property>/autopilot/route-manager/departure/sid</property>
<editable>false</editable> <editable>false</editable>
<properties>/sim/gui/dialogs/route-manager/sids</properties> <properties>/sim/gui/dialogs/route-manager/sids</properties>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
<object-name>sid</object-name> <object-name>sid</object-name>
</binding> </binding>
</combo> </combo>
</group>
<group>
<layout>hbox</layout>
<text> <text>
<row>1</row>
<col>0</col>
<halign>right</halign>
<label>Arrival:</label> <label>Arrival:</label>
<pref-width>80</pref-width>
</text> </text>
<input> <input>
<name>destination-airport</name> <row>1</row>
<col>1</col>
<halign>left</halign>
<pref-width>60</pref-width> <pref-width>60</pref-width>
<name>destination-airport</name>
<property>/autopilot/route-manager/destination/airport</property> <property>/autopilot/route-manager/destination/airport</property>
<live>true</live> <live>true</live>
<binding> <binding>
@ -311,44 +330,57 @@ command interface /autopilot/route-manager/input:
</binding> </binding>
</input> </input>
<text> <text>
<row>1</row>
<col>2</col>
<stretch>true</stretch> <stretch>true</stretch>
<pref-width>200</pref-width>
<format>%s</format> <format>%s</format>
<property>/autopilot/route-manager/destination/name</property> <property>/autopilot/route-manager/destination/name</property>
<live>true</live> <live>true</live>
<halign>fill</halign> <halign>fill</halign>
</text> </text>
<text> <text>
<row>1</row>
<col>3</col>
<halign>right</halign>
<label>Rwy:</label> <label>Rwy:</label>
</text> </text>
<combo> <combo>
<row>1</row>
<col>4</col>
<halign>left</halign>
<name>destination-runway</name> <name>destination-runway</name>
<pref-width>60</pref-width>
<property>/autopilot/route-manager/destination/runway</property> <property>/autopilot/route-manager/destination/runway</property>
<editable>false</editable> <editable>false</editable>
<properties>/sim/gui/dialogs/route-manager/destination-runways</properties> <properties>/sim/gui/dialogs/route-manager/destination-runways</properties>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
<object-name>destination-runway</object-name> <object-name>destination-runway</object-name>
</binding> </binding>
<binding> <binding>
<command>nasal</command> <command>nasal</command>
<script>updateSTARs();</script> <script>updateSTARs();</script>
</binding> </binding>
</combo> </combo>
<text> <text>
<row>1</row>
<col>5</col>
<halign>right</halign>
<label>STAR:</label> <label>STAR:</label>
</text> </text>
<combo> <combo>
<row>1</row>
<col>6</col>
<halign>left</halign>
<name>star</name> <name>star</name>
<pref-width>100</pref-width>
<property>/autopilot/route-manager/destination/star</property> <property>/autopilot/route-manager/destination/star</property>
<editable>false</editable> <editable>false</editable>
<properties>/sim/gui/dialogs/route-manager/stars</properties> <properties>/sim/gui/dialogs/route-manager/stars</properties>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
<object-name>star</object-name> <object-name>star</object-name>
@ -369,38 +401,38 @@ command interface /autopilot/route-manager/input:
<pref-width>150</pref-width> <pref-width>150</pref-width>
<property>/autopilot/route-manager/alternate/airport</property> <property>/autopilot/route-manager/alternate/airport</property>
</input> </input>
</group> </group>
--> -->
<group> <group>
<layout>hbox</layout> <layout>hbox</layout>
<text> <text>
<halign>right</halign>
<label>Cruise Speed (kts):</label> <label>Cruise Speed (kts):</label>
<pref-width>80</pref-width>
</text> </text>
<input> <input>
<name>cruise-speed</name> <name>cruise-speed</name>
<live>true</live> <live>true</live>
<halign>fill</halign> <halign>left</halign>
<stretch>true</stretch> <stretch>true</stretch>
<pref-width>150</pref-width> <pref-width>100</pref-width>
<property>/autopilot/route-manager/cruise/speed-kts</property> <property>/autopilot/route-manager/cruise/speed-kts</property>
</input> </input>
<text> <text>
<label>Cruise Altitude (ft/FL):</label> <label>Cruise Altitude (ft/FL):</label>
<pref-width>80</pref-width> <halign>right</halign>
</text> </text>
<input> <input>
<name>cruise-alt</name> <name>cruise-alt</name>
<live>true</live> <live>true</live>
<halign>fill</halign> <halign>left</halign>
<stretch>true</stretch> <stretch>true</stretch>
<pref-width>150</pref-width> <pref-width>100</pref-width>
<property>/autopilot/route-manager/cruise/altitude-ft</property> <property>/autopilot/route-manager/cruise/altitude-ft</property>
</input> </input>
</group> </group>
<hrule/> <hrule/>
<group> <group>
@ -560,7 +592,7 @@ command interface /autopilot/route-manager/input:
<script>activate_fp()</script> <script>activate_fp()</script>
</binding> </binding>
</button> </button>
<empty><stretch>true</stretch></empty> <empty><stretch>true</stretch></empty>
<button> <button>
@ -582,5 +614,12 @@ command interface /autopilot/route-manager/input:
<script>save_selector.open();</script> <script>save_selector.open();</script>
</binding> </binding>
</button> </button>
<button>
<legend>Close</legend>
<key>Esc</key>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group> </group>
</PropertyList> </PropertyList>