From 07c21660d83cfaf01c8989479f4c65a4a3d09a92 Mon Sep 17 00:00:00 2001
From: Stuart Buchanan <stuart_d_buchanan@yahoo.co.uk>
Date: Tue, 26 May 2020 22:20:38 +0100
Subject: [PATCH] FG1000 - make Debug menu items more efficient

Previously a completely new PFD or MFD was created when the Debug
menu items were used.  This cause significant slowdown if used
multiple times.  Now we just create one instance of each and re-use it.

Also clean up redundant code in the GUI.
---
 Aircraft/Instruments-3d/FG1000/Nasal/GUI.nas | 15 ------------
 gui/menubar.xml                              | 24 +++++++++++++-------
 2 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/GUI.nas b/Aircraft/Instruments-3d/FG1000/Nasal/GUI.nas
index 1bf31cb67..12c0461fa 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/GUI.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/GUI.nas
@@ -132,12 +132,6 @@ var GUI =
 
     obj.window.setCanvas(inset);
 
-    obj.window.del = func() {
-      # Over-ride the window.del function so we clean up when the user closes the window
-      # Use call method to ensure we have the correct closure.
-      call(obj.cleanup, [], obj);
-    };
-
     # Add a event listener for the mouse wheel, which is used for turning the
     # knobs.
     inset.addEventListener("wheel", func(e)
@@ -192,13 +186,4 @@ var GUI =
 
     return obj;
   },
-
-  cleanup : func()
-  {
-    # Clean up the MFD.  Particularly important to stop it picking up
-    # Emesary notifications.
-    me.mfd.del();
-    # Clean up the window itself
-    call(canvas.Window.del, [], me.window);
-  },
 };
diff --git a/gui/menubar.xml b/gui/menubar.xml
index ff3faa1ac..a605350ad 100644
--- a/gui/menubar.xml
+++ b/gui/menubar.xml
@@ -838,13 +838,17 @@
 					if (! defined("fg1000")) {
 						io.load_nasal(nasal_dir ~ 'FG1000.nas', "fg1000");
 						io.load_nasal(nasal_dir ~ 'Interfaces/GenericInterfaceController.nas', "fg1000");
+						var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
+						interfaceController.start();
 					}
 
-					var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
-					interfaceController.start();
-
 					var fg1000system = fg1000.FG1000.getOrCreateInstance();
-					var pfdindex = fg1000system.addPFD();
+					var pfdindex = getprop("/sim/gui/fg1000/pfd-index");
+					if (pfdindex == nil) {
+						pfdindex = fg1000system.addPFD();
+						setprop("/sim/gui/fg1000/pfd-index", pfdindex);
+					}
+
 					fg1000system.displayGUI(pfdindex);
 
 				</script>
@@ -860,13 +864,17 @@
 					if (! defined("fg1000")) {
 						io.load_nasal(nasal_dir ~ 'FG1000.nas', "fg1000");
 						io.load_nasal(nasal_dir ~ 'Interfaces/GenericInterfaceController.nas', "fg1000");
+						var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
+						interfaceController.start();
 					}
 
-					var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance();
-					interfaceController.start();
-
 					var fg1000system = fg1000.FG1000.getOrCreateInstance();
-					var mfdindex = fg1000system.addMFD();
+					var mfdindex = getprop("/sim/gui/fg1000/mfd-index");
+					if (mfdindex == nil) {
+						mfdindex = fg1000system.addPFD();
+						setprop("/sim/gui/fg1000/mfd-index", mfdindex);
+					}
+
 					fg1000system.displayGUI(mfdindex);
 
 				</script>