Add native macOS filepicker

This commit is contained in:
ProjectInfinity 2022-12-17 22:42:31 +01:00
parent 6f2e10c400
commit 182cd146df

View File

@ -4,6 +4,7 @@ import com.jetpackduba.gitnuro.extensions.getCurrentOs
import com.jetpackduba.gitnuro.extensions.runCommand import com.jetpackduba.gitnuro.extensions.runCommand
import com.jetpackduba.gitnuro.logging.printLog import com.jetpackduba.gitnuro.logging.printLog
import com.jetpackduba.gitnuro.viewmodels.TabViewModel import com.jetpackduba.gitnuro.viewmodels.TabViewModel
import java.awt.FileDialog
import javax.swing.JFileChooser import javax.swing.JFileChooser
import javax.swing.UIManager import javax.swing.UIManager
@ -38,11 +39,12 @@ private fun openPickerDialog(
): String? { ): String? {
val os = getCurrentOs() val os = getCurrentOs()
val isLinux = os.isLinux() val isLinux = os.isLinux()
val isMac = os.isMac()
return if (isLinux) { return if (isLinux) {
openDirectoryDialogLinux(pickerType) openDirectoryDialogLinux(pickerType)
} else } else
openJvmDialog(pickerType, basePath, false) openJvmDialog(pickerType, basePath, false, isMac)
} }
enum class PickerType(val value: Int) { enum class PickerType(val value: Int) {
@ -72,7 +74,7 @@ fun openDirectoryDialogLinux(pickerType: PickerType): String? {
if (!openDirectory.isNullOrEmpty()) if (!openDirectory.isNullOrEmpty())
dirToOpen = openDirectory dirToOpen = openDirectory
} else } else
dirToOpen = openJvmDialog(pickerType, "", true) dirToOpen = openJvmDialog(pickerType, "", isLinux = true, isMac = false)
return dirToOpen return dirToOpen
} }
@ -81,21 +83,39 @@ private fun openJvmDialog(
pickerType: PickerType, pickerType: PickerType,
basePath: String?, basePath: String?,
isLinux: Boolean, isLinux: Boolean,
isMac: Boolean
): String? { ): String? {
if (!isLinux) { if (!isLinux) {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
} }
val fileChooser = if (basePath.isNullOrEmpty()) if(isMac) {
JFileChooser() System.setProperty("apple.awt.fileDialogForDirectories", "true")
else val fileChooser = if (basePath.isNullOrEmpty())
FileDialog(null as java.awt.Frame?, "Open", FileDialog.LOAD)
else
FileDialog(null as java.awt.Frame?, "Open", FileDialog.LOAD).apply {
directory = basePath
}
fileChooser.isMultipleMode = false
fileChooser.isVisible = true
System.setProperty("apple.awt.fileDialogForDirectories", "false")
if (fileChooser.file != null && fileChooser.directory != null) {
return fileChooser.directory + fileChooser.file
}
return null
} else {
val fileChooser = if (basePath.isNullOrEmpty())
JFileChooser()
else
JFileChooser(basePath) JFileChooser(basePath)
fileChooser.fileSelectionMode = pickerType.value
fileChooser.fileSelectionMode = pickerType.value fileChooser.showOpenDialog(null)
fileChooser.showOpenDialog(null) return if (fileChooser.selectedFile != null)
fileChooser.selectedFile.absolutePath
return if (fileChooser.selectedFile != null) else
fileChooser.selectedFile.absolutePath null
else }
null
} }