diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index 4481fe5e18..c63df05065 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -382,7 +382,7 @@ public class org/jetbrains/jewel/foundation/lazy/tree/DefaultSelectableLazyColum public fun <init> ()V public fun handlePointerEventPress (Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V public fun onExtendSelectionToKey (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V - public fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V } public class org/jetbrains/jewel/foundation/lazy/tree/DefaultSelectableLazyColumnKeyActions : org/jetbrains/jewel/foundation/lazy/tree/KeyActions { @@ -470,7 +470,7 @@ public final class org/jetbrains/jewel/foundation/lazy/tree/KeyActionsKt { public abstract interface class org/jetbrains/jewel/foundation/lazy/tree/PointerEventActions { public abstract fun handlePointerEventPress (Landroidx/compose/ui/input/pointer/PointerEvent;Lorg/jetbrains/jewel/foundation/lazy/SelectableColumnKeybindings;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;Ljava/util/List;Ljava/lang/Object;)V public abstract fun onExtendSelectionToKey (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V - public abstract fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;)V + public abstract fun toggleKeySelection (Ljava/lang/Object;Ljava/util/List;Lorg/jetbrains/jewel/foundation/lazy/SelectableLazyListState;Lorg/jetbrains/jewel/foundation/lazy/SelectionMode;)V } public final class org/jetbrains/jewel/foundation/lazy/tree/Tree { diff --git a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt index a1b0842f5a..ec1555976b 100644 --- a/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt +++ b/foundation/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/tree/KeyActions.kt @@ -46,6 +46,7 @@ public interface PointerEventActions { key: Any, allKeys: List<SelectableLazyListKey>, selectableLazyListState: SelectableLazyListState, + selectionMode: SelectionMode, ) public fun onExtendSelectionToKey( @@ -78,7 +79,7 @@ public open class DefaultSelectableLazyColumnEventAction : PointerEventActions { } pointerEvent.keyboardModifiers.isMultiSelectionKeyPressed -> { - toggleKeySelection(key, allKeys, selectableLazyListState) + toggleKeySelection(key, allKeys, selectableLazyListState, selectionMode) } else -> { @@ -93,11 +94,21 @@ public open class DefaultSelectableLazyColumnEventAction : PointerEventActions { key: Any, allKeys: List<SelectableLazyListKey>, selectableLazyListState: SelectableLazyListState, + selectionMode: SelectionMode, ) { - selectableLazyListState.selectedKeys = if (selectableLazyListState.selectedKeys.contains(key)) { - selectableLazyListState.selectedKeys - key - } else { - selectableLazyListState.selectedKeys + key + when (selectionMode) { + SelectionMode.None -> return + SelectionMode.Single -> { + selectableLazyListState.selectedKeys = setOf(key) + } + + SelectionMode.Multiple -> { + if (selectableLazyListState.selectedKeys.contains(key)) { + selectableLazyListState.selectedKeys -= key + } else { + selectableLazyListState.selectedKeys += key + } + } } selectableLazyListState.lastActiveItemIndex = allKeys.indexOfFirst { it == key } } @@ -161,8 +172,9 @@ public class DefaultTreeViewPointerEventAction( pointerEvent.keyboardModifiers.isMultiSelectionKeyPressed -> { selectableLazyListState.lastKeyEventUsedMouse = false - super.toggleKeySelection(key, allKeys, selectableLazyListState) + super.toggleKeySelection(key, allKeys, selectableLazyListState, selectionMode) } + else -> { selectableLazyListState.selectedKeys = setOf(key) } diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/component/ChipsAndTree.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/component/ChipsAndTree.kt index 1acd4141f5..c29564e3d2 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/component/ChipsAndTree.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/view/component/ChipsAndTree.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn +import org.jetbrains.jewel.foundation.lazy.SelectionMode import org.jetbrains.jewel.foundation.lazy.rememberSelectableLazyListState import org.jetbrains.jewel.foundation.lazy.tree.buildTree import org.jetbrains.jewel.foundation.theme.JewelTheme @@ -70,6 +71,7 @@ fun SelectableLazyColumnSample() { modifier = Modifier.size(200.dp, 200.dp), ) { SelectableLazyColumn( + selectionMode = SelectionMode.Multiple, modifier = Modifier.focusable(interactionSource = interactionSource), state = state, content = { diff --git a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Link.kt b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Link.kt index 072620e5d4..ad42917dbe 100644 --- a/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Link.kt +++ b/ui/src/main/kotlin/org/jetbrains/jewel/ui/component/Link.kt @@ -260,7 +260,6 @@ private fun LinkImpl( .clickable( onClick = { linkState = linkState.copy(visited = true) - println("clicked Link") onClick() }, enabled = enabled,