Skip to content

Commit 3ed41ef

Browse files
johannes-mannertobiasdiez
authored andcommitted
Adds a delay to the group expansion (#4838)
* Adds a delay to the group expansion * Also collapses the item after 1 second * Renamed handler class and method signature
1 parent 1c1a6a4 commit 3ed41ef

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/main/java/org/jabref/gui/groups/GroupTreeView.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public class GroupTreeView {
7171
private GroupTreeViewModel viewModel;
7272
private CustomLocalDragboard localDragboard;
7373

74+
private DragExpansionHandler dragExpansionHandler;
75+
7476
private static void removePseudoClasses(TreeTableRow<GroupNodeViewModel> row, PseudoClass... pseudoClasses) {
7577
for (PseudoClass pseudoClass : pseudoClasses) {
7678
row.pseudoClassStateChanged(pseudoClass, false);
@@ -84,6 +86,7 @@ public void initialize() {
8486

8587
// Set-up groups tree
8688
groupTree.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
89+
dragExpansionHandler = new DragExpansionHandler();
8790

8891
// Set-up bindings
8992
Consumer<ObservableList<GroupNodeViewModel>> updateSelectedGroups =
@@ -220,7 +223,7 @@ public void initialize() {
220223
event.acceptTransferModes(TransferMode.MOVE, TransferMode.LINK);
221224

222225
//expand node and all children on drag over
223-
row.getTreeItem().setExpanded(true);
226+
dragExpansionHandler.expandGroup(row.getTreeItem());
224227

225228
removePseudoClasses(row, dragOverBottom, dragOverCenter, dragOverTop);
226229
switch (getDroppingMouseLocation(row, event)) {
@@ -399,4 +402,28 @@ private DroppingMouseLocation getDroppingMouseLocation(TreeTableRow<GroupNodeVie
399402
return DroppingMouseLocation.CENTER;
400403
}
401404
}
405+
406+
private class DragExpansionHandler {
407+
private static final long DRAG_TIME_BEFORE_EXPANDING_MS = 1000;
408+
private TreeItem<GroupNodeViewModel> draggedItem;
409+
private long dragStarted;
410+
411+
public void expandGroup(TreeItem<GroupNodeViewModel> treeItem) {
412+
if (!treeItem.equals(draggedItem)) {
413+
this.draggedItem = treeItem;
414+
this.dragStarted = System.currentTimeMillis();
415+
this.draggedItem.setExpanded(this.draggedItem.isExpanded());
416+
return;
417+
}
418+
419+
if (System.currentTimeMillis() - this.dragStarted > DRAG_TIME_BEFORE_EXPANDING_MS) {
420+
// expand or collapse the tree item and reset the time
421+
this.dragStarted = System.currentTimeMillis();
422+
this.draggedItem.setExpanded(!this.draggedItem.isExpanded());
423+
} else {
424+
// leave the expansion state of the tree item as it is
425+
this.draggedItem.setExpanded(this.draggedItem.isExpanded());
426+
}
427+
}
428+
}
402429
}

0 commit comments

Comments
 (0)