From 06722d9d66a28db2404ee2cc4ba293bc982ac0fc Mon Sep 17 00:00:00 2001 From: LeshaInc Date: Wed, 19 Aug 2020 22:52:39 +0300 Subject: [PATCH] Add autosave --- .../scala/ocelot/desktop/OcelotDesktop.scala | 27 +++++++++++++++++-- .../scala/ocelot/desktop/ui/UiHandler.scala | 9 ++++++- .../ocelot/desktop/ui/widget/MenuBar.scala | 2 +- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/scala/ocelot/desktop/OcelotDesktop.scala b/src/main/scala/ocelot/desktop/OcelotDesktop.scala index 7d7db4a..f9f4861 100644 --- a/src/main/scala/ocelot/desktop/OcelotDesktop.scala +++ b/src/main/scala/ocelot/desktop/OcelotDesktop.scala @@ -5,7 +5,7 @@ import java.nio.file.{Files, Path, StandardCopyOption} import java.util.Comparator import java.util.concurrent.locks.{Lock, ReentrantLock} -import javax.swing.JFileChooser +import javax.swing.{JFileChooser, JOptionPane} import li.flor.nativejfilechooser.NativeJFileChooser import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.widget.RootWidget @@ -130,7 +130,7 @@ object OcelotDesktop extends Logging { } for (path <- oldFiles) { - Files.move(oldPath.resolve(path.getFileName), newPath.resolve(path.getFileName), StandardCopyOption.REPLACE_EXISTING) + Files.copy(oldPath.resolve(path.getFileName), newPath.resolve(path.getFileName), StandardCopyOption.REPLACE_EXISTING) } workspace.path = newPath @@ -179,6 +179,29 @@ object OcelotDesktop extends Logging { }).start() } + def exit(): Unit = { + if (savePath.isDefined) { + save() + UiHandler.exit() + return + } + + new Thread(() => { + val dialogResult = JOptionPane.showConfirmDialog(null, "Save workspace before exiting?", "Warning", JOptionPane.YES_NO_OPTION) + if (dialogResult == JOptionPane.YES_OPTION) { + chooseDirectory(dir => { + if (dir.isDefined) { + savePath = dir.map(_.toPath) + save() + UiHandler.exit() + } + }) + } else { + UiHandler.exit() + } + }).start() + } + var workspace: Workspace = _ private def createWorkspace(): Unit = { diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 4d0768b..a263da6 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -6,6 +6,7 @@ import java.nio.channels.Channels import java.nio.file.{Files, Paths} import javax.imageio.ImageIO +import ocelot.desktop.OcelotDesktop import ocelot.desktop.geometry.{Size2D, Vector2D} import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.event.MouseEvent @@ -167,13 +168,19 @@ object UiHandler extends Logging { } private var exitRequested = false + private var exitHandlerCalled = false def exit(): Unit = { exitRequested = true } def start(): Unit = { - while (!Display.isCloseRequested && !exitRequested) { + while (!exitRequested) { + if (!exitHandlerCalled && Display.isCloseRequested) { + exitHandlerCalled = true + OcelotDesktop.exit() + } + Audio.update() updateWindowSize() diff --git a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala index b60e143..38dcca0 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala @@ -21,7 +21,7 @@ class MenuBar extends Widget { menu.addEntry(new ContextMenuEntry("Save", () => OcelotDesktop.save())) menu.addEntry(new ContextMenuEntry("Save as…", () => OcelotDesktop.saveAs())) menu.addSeparator() - menu.addEntry(new ContextMenuEntry("Exit", () => UiHandler.exit())) + menu.addEntry(new ContextMenuEntry("Exit", () => OcelotDesktop.exit())) })) addEntry(new Widget {