[orx-gui] Persist GUI state and change default save location (#197)

This commit is contained in:
Steven van den Broek
2021-10-11 21:17:58 +02:00
committed by GitHub
parent b8ee4d87eb
commit f580a986ed

View File

@@ -92,6 +92,8 @@ class GUI : Extension {
var compartmentsCollapsedByDefault = true var compartmentsCollapsedByDefault = true
var doubleBind = false var doubleBind = false
var defaultSaveFolder = "gui-parameters"
var persistState = true
private var panel: ControlManager? = null private var panel: ControlManager? = null
@@ -106,13 +108,28 @@ class GUI : Extension {
val collapsed = ElementClass("collapsed") val collapsed = ElementClass("collapsed")
override fun setup(program: Program) { override fun setup(program: Program) {
if (persistState) {
val guiState = File(defaultSaveFolder, "latest.json")
if (guiState.exists()) {
loadParameters(guiState)
}
}
program.produceAssets.listen { program.produceAssets.listen {
if (listenToProduceAssetsEvent) { if (listenToProduceAssetsEvent) {
val targetDir = File("gui-parameters") val folderFile = File(defaultSaveFolder)
if (!targetDir.exists()) { targetDir.mkdir() } val targetFile = File(defaultSaveFolder, "${it.assetMetadata.assetBaseName}.json")
val targetFile = File(targetDir, "${it.assetMetadata.assetBaseName}.json") if (folderFile.exists() && folderFile.isDirectory) {
logger.info("Saving parameters to '${targetFile.absolutePath}") logger.info("Saving parameters to '${targetFile.absolutePath}")
saveParameters(targetFile) 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) { if (defaultPath == null) {
val local = File(".") val local = File(".")
val data = File(local, "data") val parameters = File(local, defaultSaveFolder)
if (data.exists() && data.isDirectory) { if (parameters.exists() && parameters.isDirectory) {
val parameters = File(data, "parameters") setDefaultPathForContext(contextID = "gui.parameters", file = parameters)
if (!parameters.exists()) { } else {
if (parameters.mkdirs()) { if (parameters.mkdirs()) {
setDefaultPathForContext(contextID = "gui.parameters", file = parameters)
}
} else {
setDefaultPathForContext(contextID = "gui.parameters", file = parameters) setDefaultPathForContext(contextID = "gui.parameters", file = parameters)
} else {
logger.warn { "Could not create directory ${parameters.absolutePath}" }
} }
} }
} }
@@ -934,6 +950,21 @@ class GUI : Extension {
updateControls() 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") @JvmName("addToGui")