[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 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")
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()) {
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 {
setDefaultPathForContext(contextID = "gui.parameters", file = parameters)
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")