mirror of
https://github.com/amir1376/ab-download-manager.git
synced 2025-02-20 11:43:24 +08:00
improve directory picker
This commit is contained in:
parent
4ed44eb2bb
commit
5ef003c5e2
@ -31,9 +31,6 @@ dependencies {
|
||||
|
||||
implementation(libs.kotlin.datetime)
|
||||
|
||||
implementation(libs.composeFilePicker) {
|
||||
exclude("org.jetbrains.compose.material")
|
||||
}
|
||||
implementation(libs.compose.reorderable)
|
||||
|
||||
implementation(libs.http4k.core)
|
||||
@ -47,7 +44,18 @@ dependencies {
|
||||
|
||||
implementation(libs.aboutLibraries.core)
|
||||
|
||||
implementation(libs.osThemeDetector)
|
||||
implementation(libs.composeFileKit) {
|
||||
exclude(group = "net.java.dev.jna")
|
||||
}
|
||||
implementation(libs.osThemeDetector) {
|
||||
exclude(group = "net.java.dev.jna")
|
||||
}
|
||||
|
||||
// at the moment I don't use jna but some libraries does
|
||||
// filekit and osThemeDetector both use jna but with different versions
|
||||
// I excluded jna from both of them and add it here!
|
||||
implementation(libs.jna.core)
|
||||
implementation(libs.jna.platform)
|
||||
|
||||
implementation(project(":downloader:core"))
|
||||
implementation(project(":downloader:monitor"))
|
||||
|
@ -20,7 +20,10 @@ import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.darkrockstudios.libraries.mpfilepicker.DirectoryPicker
|
||||
import io.github.vinceglb.filekit.compose.rememberDirectoryPickerLauncher
|
||||
import io.github.vinceglb.filekit.core.FileKitPlatformSettings
|
||||
import ir.amirab.util.desktop.LocalWindow
|
||||
import java.io.File
|
||||
|
||||
@Composable
|
||||
fun LocationTextField(
|
||||
@ -30,18 +33,22 @@ fun LocationTextField(
|
||||
errorText: String? = null,
|
||||
lastUsedLocations: List<String> = emptyList(),
|
||||
) {
|
||||
var showFolderDialog by remember { mutableStateOf(false) }
|
||||
var showLastUsedLocations by remember { mutableStateOf(false) }
|
||||
DirectoryPicker(
|
||||
showFolderDialog,
|
||||
initialDirectory = text,
|
||||
onFileSelected = {
|
||||
showFolderDialog = false
|
||||
it?.let {
|
||||
setText(it)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
val downloadLauncherFolderPickerLauncher = rememberDirectoryPickerLauncher(
|
||||
title = "Download Location",
|
||||
initialDirectory = remember(text) {
|
||||
runCatching {
|
||||
File(text).canonicalPath
|
||||
}.getOrNull()
|
||||
},
|
||||
platformSettings = FileKitPlatformSettings(
|
||||
parentWindow = LocalWindow.current
|
||||
)
|
||||
) { directory ->
|
||||
directory?.path?.let(setText)
|
||||
}
|
||||
|
||||
var widthForDropDown by remember {
|
||||
mutableStateOf(0.dp)
|
||||
}
|
||||
@ -62,7 +69,7 @@ fun LocationTextField(
|
||||
end = {
|
||||
Row {
|
||||
MyTextFieldIcon(MyIcons.folder) {
|
||||
showFolderDialog = true
|
||||
downloadLauncherFolderPickerLauncher.launch()
|
||||
}
|
||||
MyTextFieldIcon(MyIcons.down) {
|
||||
showLastUsedLocations = !showLastUsedLocations
|
||||
|
@ -12,25 +12,31 @@ import androidx.compose.ui.graphics.RectangleShape
|
||||
import androidx.compose.ui.input.pointer.PointerIcon
|
||||
import androidx.compose.ui.input.pointer.pointerHoverIcon
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.darkrockstudios.libraries.mpfilepicker.DirectoryPicker
|
||||
import io.github.vinceglb.filekit.compose.rememberDirectoryPickerLauncher
|
||||
import io.github.vinceglb.filekit.core.FileKitPlatformSettings
|
||||
import ir.amirab.util.desktop.LocalWindow
|
||||
import java.io.File
|
||||
|
||||
@Composable
|
||||
fun RenderFolderConfig(cfg: FolderConfigurable, modifier: Modifier) {
|
||||
val value by cfg.stateFlow.collectAsState()
|
||||
val setValue = cfg::set
|
||||
var showFolderPicker by remember(cfg) {
|
||||
mutableStateOf(false)
|
||||
}
|
||||
DirectoryPicker(
|
||||
show = showFolderPicker,
|
||||
initialDirectory = value,
|
||||
onFileSelected = { newValue ->
|
||||
if (newValue != null) {
|
||||
setValue(newValue)
|
||||
}
|
||||
showFolderPicker = false
|
||||
|
||||
val pickFolderLauncher = rememberDirectoryPickerLauncher(
|
||||
title = cfg.title,
|
||||
initialDirectory = remember(value) {
|
||||
runCatching {
|
||||
File(value).canonicalPath
|
||||
}.getOrNull()
|
||||
},
|
||||
)
|
||||
platformSettings = FileKitPlatformSettings(
|
||||
parentWindow = LocalWindow.current
|
||||
)
|
||||
) { directory ->
|
||||
directory?.path?.let(setValue)
|
||||
}
|
||||
|
||||
|
||||
ConfigTemplate(
|
||||
modifier = modifier,
|
||||
title = {
|
||||
@ -53,7 +59,7 @@ fun RenderFolderConfig(cfg: FolderConfigurable, modifier: Modifier) {
|
||||
modifier = Modifier
|
||||
.pointerHoverIcon(PointerIcon.Default)
|
||||
.fillMaxHeight()
|
||||
.clickable { showFolderPicker=true }
|
||||
.clickable { pickFolderLauncher.launch() }
|
||||
.wrapContentHeight()
|
||||
.padding(horizontal = 8.dp)
|
||||
.size(16.dp))
|
||||
|
@ -18,6 +18,7 @@ http4k = "5.14.1.0"
|
||||
arrow = "1.2.4"
|
||||
datastore = "1.1.1"
|
||||
aboutLibraries = "11.2.0"
|
||||
jna = "5.14.0"
|
||||
|
||||
[libraries]
|
||||
|
||||
@ -57,7 +58,7 @@ kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines
|
||||
kotlin-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" }
|
||||
|
||||
kotlin-datetime = "org.jetbrains.kotlinx:kotlinx-datetime:0.4.1"
|
||||
composeFilePicker = "com.darkrockstudios:mpfilepicker:3.1.0"
|
||||
composeFileKit = "io.github.vinceglb:filekit-compose:0.8.2"
|
||||
|
||||
ktor-server-core = { module = "io.ktor:ktor-server-core", version.ref = "ktorVersion" }
|
||||
ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktorVersion" }
|
||||
@ -91,6 +92,9 @@ jgit = "org.eclipse.jgit:org.eclipse.jgit:6.9.0.202403050737-r"
|
||||
aboutLibraries-core = { module = "com.mikepenz:aboutlibraries-core", version.ref = "aboutLibraries" }
|
||||
aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose", version.ref = "aboutLibraries" }
|
||||
|
||||
jna-core = { module = "net.java.dev.jna:jna", version.ref = "jna" }
|
||||
jna-platform = { module = "net.java.dev.jna:jna-platform", version.ref = "jna" }
|
||||
|
||||
pluginComposeMultiplatform = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "compose" }
|
||||
pluginComposeCopmiler = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
|
||||
pluginKotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
||||
|
Loading…
x
Reference in New Issue
Block a user