desktop: fix creating tmpDir and providing name for file to save (#2789)

* desktop: creating tmpDir

* provide name for saved file

* directories only selection on Mac

* specified filename for file savers

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
This commit is contained in:
Stanislav Dmitrenko 2023-07-28 19:57:48 +03:00 committed by GitHub
parent 71d6410604
commit 02d00944ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 6 deletions

View File

@ -122,6 +122,7 @@ class SimplexWindowState {
}
data class DialogParams(
val filename: String? = null,
val allowMultiple: Boolean = false,
val fileFilter: ((File?) -> Boolean)? = null,
val fileFilterDescription: String = "",

View File

@ -37,15 +37,19 @@ actual class FileChooserLauncher actual constructor() {
}
actual suspend fun launch(input: String) {
val res = if (getContent) {
var res: File?
if (getContent) {
val params = DialogParams(
allowMultiple = false,
fileFilter = fileFilter(input),
fileFilterDescription = fileFilterDescription(input),
)
simplexWindowState.openDialog.awaitResult(params)
res = simplexWindowState.openDialog.awaitResult(params)
} else {
simplexWindowState.saveDialog.awaitResult()
res = simplexWindowState.saveDialog.awaitResult(DialogParams(filename = input))
if (res != null && res.isDirectory) {
res = File(res, input)
}
}
onResult(res?.toURI())
}

View File

@ -41,9 +41,9 @@ fun FrameWindowScope.FileDialogChooser(
onResult: (result: List<File>) -> Unit
) {
if (isLinux()) {
FileDialogChooserMultiple(title, isLoad, params.allowMultiple, params.fileFilter, params.fileFilterDescription, onResult)
FileDialogChooserMultiple(title, isLoad, params.filename, params.allowMultiple, params.fileFilter, params.fileFilterDescription, onResult)
} else {
FileDialogAwt(title, isLoad, params.allowMultiple, params.fileFilter, onResult)
FileDialogAwt(title, isLoad, params.filename, params.allowMultiple, params.fileFilter, onResult)
}
}
@ -51,6 +51,7 @@ fun FrameWindowScope.FileDialogChooser(
fun FrameWindowScope.FileDialogChooserMultiple(
title: String,
isLoad: Boolean,
filename: String?,
allowMultiple: Boolean,
fileFilter: ((File?) -> Boolean)? = null,
fileFilterDescription: String? = null,
@ -73,7 +74,11 @@ fun FrameWindowScope.FileDialogChooserMultiple(
val returned = if (isLoad) {
fileChooser.showOpenDialog(window)
} else {
fileChooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
if (filename != null) {
fileChooser.selectedFile = File(filename)
} else {
fileChooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
}
fileChooser.showSaveDialog(window)
}
val result = when (returned) {
@ -109,6 +114,7 @@ fun FrameWindowScope.FileDialogChooserMultiple(
private fun FrameWindowScope.FileDialogAwt(
title: String,
isLoad: Boolean,
filename: String?,
allowMultiple: Boolean,
fileFilter: ((File?) -> Boolean)? = null,
onResult: (result: List<File>) -> Unit
@ -128,6 +134,9 @@ private fun FrameWindowScope.FileDialogAwt(
}.apply {
this.title = title
this.isMultipleMode = allowMultiple && isLoad
if (!isLoad && filename != null) {
this.file = filename
}
if (fileFilter != null) {
this.setFilenameFilter { dir, file ->
fileFilter(File(dir.absolutePath + File.separator + file))

View File

@ -10,6 +10,7 @@ fun main() {
initHaskell()
initApp()
tmpDir.deleteRecursively()
tmpDir.mkdir()
return showApp()
}