Skip to content

Commit

Permalink
Merge pull request #117 from amir1376/update-drag-and-drop-logic
Browse files Browse the repository at this point in the history
update drag and drop logic
  • Loading branch information
amir1376 authored Oct 17, 2024
2 parents cc5f944 + a6cd388 commit ac3e984
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 572 deletions.
1 change: 0 additions & 1 deletion desktop/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ dependencies {
implementation(project(":integration:server"))
implementation(project(":desktop:shared"))
implementation(project(":desktop:tray"))
implementation(project(":desktop:external-draggable"))
implementation(project(":desktop:custom-window-frame"))
implementation(project(":shared:app-utils"))
implementation(project(":shared:utils"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -674,16 +674,14 @@ class HomeComponent(
currentActiveDrops.update { parsedLinks }
}

fun onExternalFilesDraggedIn(getFilePaths: () -> List<String>) {
val filePaths = getFilePaths().map {
URI.create(it)
}
.mapNotNull {
runCatching { File(it.path) }.getOrNull()
}
fun onExternalFilesDraggedIn(getFilePaths: () -> List<File>) {
val filePaths = kotlin.runCatching { getFilePaths() }
.getOrNull()?.filter { it.length() <= 1024 * 1024 } ?: return
onExternalTextDraggedIn {
filePaths.first()
.readText()
filePaths
.firstOrNull()
?.readText()
.orEmpty()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import com.abdownloadmanager.desktop.ui.widget.Text
import androidx.compose.runtime.*
import com.abdownloadmanager.desktop.utils.externaldraggable.onExternalDrag
import androidx.compose.ui.*
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
Expand All @@ -32,19 +31,24 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import com.abdownloadmanager.desktop.ui.widget.ActionButton
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.draganddrop.dragAndDropTarget
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.ui.draganddrop.DragAndDropEvent
import androidx.compose.ui.draganddrop.DragAndDropTarget
import androidx.compose.ui.draganddrop.awtTransferable
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalWindowInfo
import androidx.compose.ui.window.Dialog
import com.abdownloadmanager.desktop.ui.customwindow.*
import com.abdownloadmanager.desktop.ui.widget.menu.ShowOptionsInDropDown
import com.abdownloadmanager.desktop.utils.externaldraggable.DragData
import com.abdownloadmanager.utils.category.Category
import com.abdownloadmanager.utils.category.rememberIconPainter
import ir.amirab.util.compose.action.MenuItem
import java.awt.datatransfer.DataFlavor
import java.io.File


@Composable
Expand Down Expand Up @@ -162,27 +166,40 @@ fun HomePage(component: HomeComponent) {
Box(
Modifier
.fillMaxSize()
.onExternalDrag(
onDragStart = {
isDragging = true
it.availableDragData.get<DragData.Text>()?.also {
component.onExternalTextDraggedIn { it.readText() }
return@onExternalDrag
}
it.availableDragData.get<DragData.FilesList>()?.also {
//Caution FileList::readFiles sometimes throws exception
component.onExternalFilesDraggedIn { it.readFiles() }
return@onExternalDrag
}
.dragAndDropTarget(
shouldStartDragAndDrop = {
it.awtTransferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor) ||
it.awtTransferable.isDataFlavorSupported(DataFlavor.stringFlavor)
},
onDragExit = {
isDragging = false
component.onDragExit()
target = remember {
object : DragAndDropTarget {
override fun onStarted(event: DragAndDropEvent) {
isDragging = true
if (event.awtTransferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
component.onExternalTextDraggedIn { (event.awtTransferable.getTransferData(DataFlavor.stringFlavor) as String) }
return
}
if (event.awtTransferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
component.onExternalFilesDraggedIn {
(event.awtTransferable.getTransferData(DataFlavor.javaFileListFlavor) as List<File>)
}
return
}
}

override fun onEnded(event: DragAndDropEvent) {
isDragging = false
component.onDragExit()
}

override fun onDrop(event: DragAndDropEvent): Boolean {
isDragging = false
component.onDropped()
return true
}
}
}
) {
isDragging = false
component.onDropped()
}
)
) {
Column(
Modifier.alpha(
Expand Down
7 changes: 0 additions & 7 deletions desktop/external-draggable/build.gradle.kts

This file was deleted.

Loading

0 comments on commit ac3e984

Please sign in to comment.