From ec80e51f95198dd68afe0cb264325f6f77fc09f4 Mon Sep 17 00:00:00 2001
From: dalyjame <dalyjame@msu.edu>
Date: Tue, 25 Jun 2019 15:33:51 -0400
Subject: [PATCH] The builder apps will now remember which directory was opened
 last and have enabled the Save button

---
 Builder/src/fmon/builder/App.fxml  |  2 +-
 Builder/src/fmon/builder/App.scala | 30 ++++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/Builder/src/fmon/builder/App.fxml b/Builder/src/fmon/builder/App.fxml
index 1d8b168..5a282ec 100644
--- a/Builder/src/fmon/builder/App.fxml
+++ b/Builder/src/fmon/builder/App.fxml
@@ -20,7 +20,7 @@
             <Menu mnemonicParsing="false" text="Open Recent" />
             <SeparatorMenuItem mnemonicParsing="false" />
             <MenuItem mnemonicParsing="false" text="Close" />
-            <MenuItem mnemonicParsing="false" text="Save" />
+            <MenuItem mnemonicParsing="false" onAction="#save" text="Save" />
             <MenuItem mnemonicParsing="false" onAction="#saveAs" text="Save As…" />
             <MenuItem mnemonicParsing="false" text="Revert" />
             <SeparatorMenuItem mnemonicParsing="false" />
diff --git a/Builder/src/fmon/builder/App.scala b/Builder/src/fmon/builder/App.scala
index f33da58..5b14832 100644
--- a/Builder/src/fmon/builder/App.scala
+++ b/Builder/src/fmon/builder/App.scala
@@ -1,6 +1,9 @@
 package fmon.builder
 
 import java.io.File
+import java.util.prefs.Preferences
+
+import scala.util.Properties
 
 import javafx.fxml.FXML
 import javafx.fxml.FXMLLoader
@@ -20,11 +23,25 @@ class App {
   @FXML var pane: jfxsl.Pane = _
   
   var builder: Savable = _
+  var lastFile: File = _
   
+  def lastDir(): String = {
+    val prefs = Preferences.userNodeForPackage(classOf[App])
+    prefs.get("dir", Properties.userDir)
+  }
+  
+  def rememberDir(file: File): Unit = {
+    val dir = if (file.isDirectory()) file.getPath else file.getParent
+    if (dir != lastDir) {
+      val prefs = Preferences.userNodeForPackage(classOf[App])
+      prefs.put("dir", dir)
+    }
+  }
   
   def open(): Unit = {
     val fileChooser = new FileChooser {
       title = "Open Resource File"
+      initialDirectory = new File(lastDir())
       extensionFilters ++= Seq(
         new ExtensionFilter("YAML Files", "*.yaml"),
         new ExtensionFilter("All Files", "*.*")
@@ -33,13 +50,24 @@ class App {
     
     val selectedFile = fileChooser.showOpenDialog(null)
     if (selectedFile != null) {
+      rememberDir(selectedFile)
       builder openFrom selectedFile
+      lastFile = selectedFile
+    }
+  }
+  
+  def save(): Unit = {
+    if (lastFile != null) {
+      builder saveTo lastFile
+    } else {
+      saveAs()
     }
   }
   
   def saveAs(): Unit = {
     val fileChooser = new FileChooser {
       title = "Open Resource File"
+      initialDirectory = new File(lastDir())
       extensionFilters ++= Seq(
         new ExtensionFilter("YAML Files", "*.yaml"),
         new ExtensionFilter("All Files", "*.*")
@@ -48,7 +76,9 @@ class App {
     
     val selectedFile = fileChooser.showSaveDialog(null)
     if (selectedFile != null) {
+      rememberDir(selectedFile)
       builder saveTo selectedFile
+      lastFile = selectedFile
     }
   }
 }
\ No newline at end of file