From f580a986eddcdb938cebcbfbf228893bad420449 Mon Sep 17 00:00:00 2001 From: Steven van den Broek <30909373+Yvee1@users.noreply.github.com> Date: Mon, 11 Oct 2021 21:17:58 +0200 Subject: [PATCH] [orx-gui] Persist GUI state and change default save location (#197) --- orx-jvm/orx-gui/src/main/kotlin/Gui.kt | 57 ++++++++++++++++++++------ 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt index 0bb7e2eb..efffee67 100644 --- a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt +++ b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt @@ -92,6 +92,8 @@ class GUI : Extension { var compartmentsCollapsedByDefault = true var doubleBind = false + var defaultSaveFolder = "gui-parameters" + var persistState = true private var panel: ControlManager? = null @@ -106,13 +108,28 @@ class GUI : Extension { val collapsed = ElementClass("collapsed") override fun setup(program: Program) { + if (persistState) { + val guiState = File(defaultSaveFolder, "latest.json") + if (guiState.exists()) { + loadParameters(guiState) + } + } + program.produceAssets.listen { if (listenToProduceAssetsEvent) { - val targetDir = File("gui-parameters") - if (!targetDir.exists()) { targetDir.mkdir() } - val targetFile = File(targetDir, "${it.assetMetadata.assetBaseName}.json") - logger.info("Saving parameters to '${targetFile.absolutePath}") - saveParameters(targetFile) + val folderFile = File(defaultSaveFolder) + val targetFile = File(defaultSaveFolder, "${it.assetMetadata.assetBaseName}.json") + if (folderFile.exists() && folderFile.isDirectory) { + logger.info("Saving parameters to '${targetFile.absolutePath}") + saveParameters(targetFile) + } else { + if (folderFile.mkdirs()) { + logger.info("Saving parameters to '${targetFile.absolutePath}") + saveParameters(targetFile) + } else { + logger.error { "Could not save parameters because could not create directory ${folderFile.absolutePath}" } + } + } } } @@ -258,15 +275,14 @@ class GUI : Extension { if (defaultPath == null) { val local = File(".") - val data = File(local, "data") - if (data.exists() && data.isDirectory) { - val parameters = File(data, "parameters") - if (!parameters.exists()) { - if (parameters.mkdirs()) { - setDefaultPathForContext(contextID = "gui.parameters", file = parameters) - } - } else { + val parameters = File(local, defaultSaveFolder) + if (parameters.exists() && parameters.isDirectory) { + setDefaultPathForContext(contextID = "gui.parameters", file = parameters) + } else { + if (parameters.mkdirs()) { setDefaultPathForContext(contextID = "gui.parameters", file = parameters) + } else { + logger.warn { "Could not create directory ${parameters.absolutePath}" } } } } @@ -934,6 +950,21 @@ class GUI : Extension { updateControls() } } + + override fun shutdown(program: Program) { + if (persistState) { + val folderFile = File(defaultSaveFolder) + if (folderFile.exists() && folderFile.isDirectory) { + saveParameters(File(defaultSaveFolder, "latest.json")) + } else { + if (folderFile.mkdirs()) { + saveParameters(File(defaultSaveFolder, "latest.json")) + } else { + logger.error { "Could not persist GUI state because could not create directory ${folderFile.absolutePath}" } + } + } + } + } } @JvmName("addToGui")