Add native macOS filepicker
This commit is contained in:
parent
6f2e10c400
commit
182cd146df
@ -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
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user