[orx-gui] Persist GUI state and change default save location (#197)
This commit is contained in:
committed by
GitHub
parent
b8ee4d87eb
commit
f580a986ed
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user