From 10c875f75e3643bde8678fc427ab7499b33b5e75 Mon Sep 17 00:00:00 2001 From: mfranz Date: Mon, 19 Nov 2007 16:26:15 +0000 Subject: [PATCH] make system and aircraft views configurable in Menu->Views->View Options. These are then skipped with view.stepView(n), unless the second, optional argument is set to 1: view.stepView(n, 1); Whether a view is enabled or not, is saved in $FG_ROOT/.fgfs/autosave.xml (system views) or $FG_ROOT/.fgfs/aircraft-data/.xml --- Nasal/view.nas | 19 +++++++----- gui/dialogs/view.xml | 72 ++++++++++++++++++++++++++++++++++++++++++++ gui/menubar.xml | 28 ++++++++--------- preferences.xml | 7 +++++ 4 files changed, 104 insertions(+), 22 deletions(-) create mode 100644 gui/dialogs/view.xml diff --git a/Nasal/view.nas b/Nasal/view.nas index a612de557..9d41bc091 100644 --- a/Nasal/view.nas +++ b/Nasal/view.nas @@ -70,14 +70,19 @@ var resetViewDir = func { } ## -# Handler. Step to the next view. +# Handler. Step to the next (force=1) or next enabled view. # -var stepView = func(n) { - var i = getprop("/sim/current-view/view-number") + n; - if (i < 0) - i = size(views) - 1; - elsif (i >= size(views)) - i = 0; +var stepView = func(n, force = 0) { + var i = getprop("/sim/current-view/view-number"); + while (1) { + i += n; + if (i < 0) + i = size(views) - 1; + elsif (i >= size(views)) + i = 0; + if (!i or force or (var e = views[i].getNode("enabled")) == nil or e.getValue()) + break; + } setprop("/sim/current-view/view-number", i); # And pop up a nice reminder diff --git a/gui/dialogs/view.xml b/gui/dialogs/view.xml new file mode 100644 index 000000000..06519c730 --- /dev/null +++ b/gui/dialogs/view.xml @@ -0,0 +1,72 @@ + + + + view + false + vbox + + + + + + + + + + var group = cmdarg().getNode("group"); + var ac = getprop("/sim/aircraft"); + group.removeChildren("checkbox"); + group.removeChildren("hrule"); + group.removeChildren("text"); + var system = 1; + foreach (var v; view.views) { + var index = v.getIndex(); + if (index == 0 or index >= 200) + continue; + + if (index >= 100) { + if (system) { + group.getNode("hrule", 1); + var t = group.getNode("text", 1); + t.getNode("label", 1).setValue("\"" ~ ac ~ "\" Specific Views"); + system = 0; + } + aircraft.data.add(v.getPath() ~ "/enabled"); + } + if (v.getNode("enabled") == nil) + v.getNode("enabled", 1).setBoolValue(1); + + var target = group.getChild("checkbox", index, 1); + props.copy(group.getNode("checkbox-template"), target); + target.getNode("label").setValue(v.getNode("name").getValue()); + target.getNode("property").setValue(v.getPath() ~ "/enabled"); + } + + + + + vbox + center + + + left + + + + dialog-apply + + + + + + diff --git a/gui/menubar.xml b/gui/menubar.xml index 65a833442..9a7157b4d 100644 --- a/gui/menubar.xml +++ b/gui/menubar.xml @@ -19,16 +19,6 @@ - - @@ -117,7 +107,15 @@ - + + + dialog-show + view + + + + + dialog-show rendering @@ -156,7 +154,6 @@ - @@ -164,7 +161,7 @@ chat - + @@ -380,7 +377,7 @@ ATC-freq-search - + @@ -388,7 +385,7 @@ atc-ai - + @@ -463,6 +460,7 @@ dump-scenegraph + diff --git a/preferences.xml b/preferences.xml index 4331e5d1f..7db58042e 100644 --- a/preferences.xml +++ b/preferences.xml @@ -260,6 +260,7 @@ Started September 2000 by David Megginson, david@megginson.com Cockpit View + true lookfrom false @@ -283,6 +284,7 @@ Started September 2000 by David Megginson, david@megginson.com Helicopter View + true lookat false @@ -308,6 +310,7 @@ Started September 2000 by David Megginson, david@megginson.com Chase View + true lookat false @@ -337,6 +340,7 @@ Started September 2000 by David Megginson, david@megginson.com Tower View + true lookat /sim/tower/latitude-deg @@ -360,6 +364,7 @@ Started September 2000 by David Megginson, david@megginson.com Tower View Look From + true lookfrom /sim/tower/latitude-deg @@ -380,6 +385,7 @@ Started September 2000 by David Megginson, david@megginson.com Chase View wo yaw + true lookat false @@ -402,6 +408,7 @@ Started September 2000 by David Megginson, david@megginson.com Fly-By View + true lookat /sim/viewer/longitude-deg