diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 1962e80..db71ab0 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -45,6 +45,7 @@ kotlin { desktopMain.dependencies { implementation(compose.desktop.currentOs) implementation(libs.kotlinx.coroutines.swing) + implementation(libs.com.formdev.flatlaf) } } } diff --git a/composeApp/src/desktopMain/kotlin/moe/crx/overport/app/ComposeMain.kt b/composeApp/src/desktopMain/kotlin/moe/crx/overport/app/ComposeMain.kt index fd9cf8a..627d5aa 100644 --- a/composeApp/src/desktopMain/kotlin/moe/crx/overport/app/ComposeMain.kt +++ b/composeApp/src/desktopMain/kotlin/moe/crx/overport/app/ComposeMain.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.draganddrop.awtTransferable import androidx.compose.ui.window.Window import androidx.compose.ui.window.application import androidx.lifecycle.viewmodel.compose.viewModel +import com.formdev.flatlaf.util.SystemFileChooser import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.launch import moe.crx.overport.app.composables.AppContent @@ -24,7 +25,6 @@ import org.jetbrains.compose.resources.stringResource import overportapp.composeapp.generated.resources.Res import overportapp.composeapp.generated.resources.select_a_file import overportapp.composeapp.generated.resources.window_icon -import java.awt.FileDialog import java.awt.Frame import java.awt.datatransfer.DataFlavor import java.io.* @@ -97,23 +97,26 @@ fun main(args: Array) = application { AppContent( viewModel = viewModel, openFile = { - val fileDialog = FileDialog(Frame(), selectFileString, FileDialog.LOAD).apply { - directory = lastOpenedDirectory - isVisible = true + val fileDialog = SystemFileChooser(selectFileString).apply { + currentDirectory = File(lastOpenedDirectory) + selectedFile = null } - val file = fileDialog.file?.let { File(fileDialog.directory).resolve(it) } + val file = if (fileDialog.showOpenDialog(Frame()) != SystemFileChooser.APPROVE_OPTION) null else { + fileDialog.selectedFile + } openFile(file) }, saveFile = { name -> - val fileDialog = FileDialog(Frame(), selectFileString, FileDialog.SAVE).apply { - directory = lastOpenedDirectory - file = name - isVisible = true + val fileDialog = SystemFileChooser(selectFileString).apply { + currentDirectory = File(lastOpenedDirectory) + selectedFile = File(lastOpenedDirectory, name) } - val file = fileDialog.file?.let { File(fileDialog.directory).resolve(it) } + val file = if (fileDialog.showSaveDialog(Frame()) != SystemFileChooser.APPROVE_OPTION) null else { + fileDialog.selectedFile + } scope.launch { if (file == null) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 18d5cc8..d77412d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,8 +13,11 @@ bcpkix = "1.83" kotlinx-serialization = "1.9.0" lifecycle-viewmodel-compose = "2.9.6" compose-hot-reload = "1.0.0" +flatlaf = "3.7.2" [libraries] +com-formdev-flatlaf = { group = "com.formdev", name = "flatlaf", version.ref = "flatlaf" } + androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activityCompose" } androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "androidx-lifecycle" } @@ -24,8 +27,8 @@ androidx-lifecycle-viewmodel-compose = { group = "org.jetbrains.androidx.lifecyc android-tools-build = { group = "com.android.tools.build", name = "apksig", version.ref = "apksig" } bouncycastle-pkix = { group = "org.bouncycastle", name = "bcpkix-jdk18on", version.ref = "bcpkix" } -kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name ="kotlinx-serialization-json", version.ref = "kotlinx-serialization" } -kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name ="kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } +kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" } +kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }