From 04a435df1ddfe08f2b956cc2070fa5de1e92536e Mon Sep 17 00:00:00 2001 From: Stefan Mogeritsch Date: Fri, 8 May 2026 12:25:55 +0200 Subject: [PATCH] =?UTF-8?q?refactor(core,=20desktop):=20Fehlertexte=20pr?= =?UTF-8?q?=C3=A4zisiert=20und=20Verzeichnisauswahl=20f=C3=BCr=20JFileChoo?= =?UTF-8?q?ser=20optimiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Mogeritsch --- .../components/MsFilePicker.jvm.kt | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/frontend/core/design-system/src/jvmMain/kotlin/at/mocode/frontend/core/designsystem/components/MsFilePicker.jvm.kt b/frontend/core/design-system/src/jvmMain/kotlin/at/mocode/frontend/core/designsystem/components/MsFilePicker.jvm.kt index a3772d99..ec7abb03 100644 --- a/frontend/core/design-system/src/jvmMain/kotlin/at/mocode/frontend/core/designsystem/components/MsFilePicker.jvm.kt +++ b/frontend/core/design-system/src/jvmMain/kotlin/at/mocode/frontend/core/designsystem/components/MsFilePicker.jvm.kt @@ -33,11 +33,21 @@ actual fun MsFilePicker( else { val f = File(currentValue) if (directoryOnly) { - val ok = f.exists() && f.isDirectory && f.canWrite() - (!ok) to if (!ok) "Ordner existiert nicht oder ist nicht beschreibbar" else null + when { + !f.exists() -> true to "Ordner existiert nicht" + !f.isDirectory -> true to "Pfad ist kein Ordner" + !f.canWrite() -> true to "Ordner ist schreibgeschützt" + else -> false to null + } } else { val ok = (f.exists() && f.isFile && f.canWrite()) || (f.parentFile?.canWrite() == true) - (!ok) to if (!ok) "Datei/Ordner nicht beschreibbar" else null + (!ok) to if (!ok) { + when { + !f.exists() && f.parentFile?.exists() != true -> "Pfad existiert nicht" + f.exists() && !f.isFile -> "Pfad ist keine Datei" + else -> "Datei/Ordner nicht beschreibbar" + } + } else null } } } @@ -69,19 +79,24 @@ actual fun MsFilePicker( val chooser = JFileChooser().apply { isMultiSelectionEnabled = false // Initiales Verzeichnis/Pfad - selectedPath?.let { p -> - val f = File(p) - currentDirectory = when { - f.isDirectory -> f - f.parentFile?.isDirectory == true -> f.parentFile - else -> currentDirectory + run { + val home = File(System.getProperty("user.home") ?: ".") + val initial = selectedPath?.takeIf { it.isNotBlank() }?.let { File(it) } + val baseDir = when { + initial == null -> home + directoryOnly && initial.isDirectory -> initial + !directoryOnly && initial.isFile -> initial.parentFile ?: home + initial.parentFile?.isDirectory == true -> initial.parentFile + else -> home } - if (!directoryOnly && f.isFile) selectedFile = f + currentDirectory = baseDir + if (!directoryOnly && initial?.isFile == true) selectedFile = initial } if (directoryOnly) { fileSelectionMode = JFileChooser.DIRECTORIES_ONLY - dialogType = JFileChooser.SAVE_DIALOG // ermöglicht "Neuer Ordner" + // KDE/Plasma: OPEN_DIALOG im DIRECTORIES_ONLY‑Modus verwenden (kein Save‑Dialog) + dialogType = JFileChooser.OPEN_DIALOG } else { fileSelectionMode = JFileChooser.FILES_ONLY if (fileExtensions.isNotEmpty()) {