From 5638ad837717debfe1dd68738016df74e5f4fff4 Mon Sep 17 00:00:00 2001
From: fly <merspieler@airmail.cc>
Date: Tue, 11 Feb 2020 16:20:05 +0000
Subject: [PATCH] Implementing state save between sessions

Signed-off-by: fly <merspieler@airmail.cc>
---
 A320-main.xml               |  3 +++
 AircraftConfig/acconfig.nas | 11 +++++++++++
 AircraftConfig/main.xml     | 21 +++++++++++++++++++++
 3 files changed, 35 insertions(+)

diff --git a/A320-main.xml b/A320-main.xml
index 29e4e1cd..417846ff 100644
--- a/A320-main.xml
+++ b/A320-main.xml
@@ -1949,6 +1949,9 @@
 			<file>Aircraft/A320-family/gui/dialogs/refuel.nas</file>
 			<file>Aircraft/A320-family/gui/dialogs/rmp.nas</file>
 		</Dialogs>
+		<save>
+			<file>Aircraft/A320-family/Nasal/Systems/save.nas</file>
+		</save>
 	</nasal>
 
 </PropertyList>
diff --git a/AircraftConfig/acconfig.nas b/AircraftConfig/acconfig.nas
index ca215827..94860a6f 100644
--- a/AircraftConfig/acconfig.nas
+++ b/AircraftConfig/acconfig.nas
@@ -96,6 +96,7 @@ setprop("systems/acconfig/options/weight-kgs", 0);
 setprop("systems/acconfig/options/adirs-skip", 0);
 setprop("systems/acconfig/options/welcome-skip", 0);
 setprop("systems/acconfig/options/no-rendering-warn", 0);
+setprop("systems/acconfig/options/save-state", 0);
 setprop("systems/acconfig/options/pfd-rate", 1);
 setprop("systems/acconfig/options/nd-rate", 1);
 setprop("systems/acconfig/options/uecam-rate", 1);
@@ -187,9 +188,17 @@ setlistener("/sim/signals/fdm-initialized", func {
 	}
 	setprop("systems/acconfig/options/revision", current_revision);
 	writeSettings();
+	if (getprop("options/system/save-state") == 1)
+	{
+		save.restore();
+	}
 	spinning.stop();
 });
 
+setlistener("/sim/signals/exit", func {
+	save.save();
+});
+
 var renderingSettings = {
 	check: func() {
 		var rembrandt = getprop("sim/rendering/rembrandt/enabled");
@@ -223,6 +232,7 @@ var readSettings = func {
 	io.read_properties(getprop("sim/fg-home") ~ "/Export/A320-family-config.xml", "/systems/acconfig/options");
 	setprop("options/system/keyboard-mode", getprop("systems/acconfig/options/keyboard-mode"));
 	setprop("options/system/weight-kgs", getprop("systems/acconfig/options/weight-kgs"));
+	setprop("options/system/save-state", getprop("systems/acconfig/options/save-state"));
 	setprop("controls/adirs/skip", getprop("systems/acconfig/options/adirs-skip"));
 	setprop("sim/model/autopush/route/show", getprop("systems/acconfig/options/autopush/show-route"));
 	setprop("sim/model/autopush/route/show-wingtip", getprop("systems/acconfig/options/autopush/show-wingtip"));
@@ -232,6 +242,7 @@ var readSettings = func {
 var writeSettings = func {
 	setprop("systems/acconfig/options/keyboard-mode", getprop("options/system/keyboard-mode"));
 	setprop("systems/acconfig/options/weight-kgs", getprop("options/system/weight-kgs"));
+	setprop("systems/acconfig/options/save-state", getprop("options/system/save-state"));
 	setprop("systems/acconfig/options/adirs-skip", getprop("controls/adirs/skip"));
 	setprop("systems/acconfig/options/autopush/show-route", getprop("sim/model/autopush/route/show"));
 	setprop("systems/acconfig/options/autopush/show-wingtip", getprop("sim/model/autopush/route/show-wingtip"));
diff --git a/AircraftConfig/main.xml b/AircraftConfig/main.xml
index 84620273..f3e266a1 100644
--- a/AircraftConfig/main.xml
+++ b/AircraftConfig/main.xml
@@ -426,6 +426,27 @@
 				</binding>
 				<live>true</live>
 			</checkbox>
+
+			<checkbox>
+				<!-- TODO there might be a better way to formulate this. -->
+				<label>Save states between sessions</label>
+				<halign>left</halign>
+				<property>/systems/acconfig/options/save-state</property>
+				<binding>
+					<command>property-toggle</command>
+					<property>/options/system/save-state</property>
+				</binding>
+				<binding>
+					<command>dialog-apply</command>
+				</binding>
+				<binding>
+					<command>nasal</command>
+					<script>
+					acconfig.writeSettings();
+					</script>
+				</binding>
+				<live>true</live>
+			</checkbox>
 			
 			<group>
 				<layout>hbox</layout>