From 321452219072f1cdda204f1039a74f09f85452f1 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Thu, 3 Nov 2016 18:24:57 +0300 Subject: [PATCH] [vcs]: IDEA-163332 toggle repos from related commits selection --- .../com/intellij/dvcs/push/ui/PushLog.java | 33 ++++++++++++++----- .../com/intellij/ui/CheckboxTreeHelper.java | 2 +- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java index 5c78d6aced04..c2794f84c698 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java @@ -53,11 +53,12 @@ import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.util.Collection; -import java.util.Collections; -import java.util.EventObject; +import java.util.*; import java.util.List; +import static com.intellij.util.containers.ContainerUtil.emptyList; +import static java.util.stream.Collectors.toCollection; + public class PushLog extends JPanel implements DataProvider { private static final String CONTEXT_MENU = "Vcs.Push.ContextMenu"; @@ -414,12 +415,14 @@ public class PushLog extends JPanel implements DataProvider { @NotNull private List getSelectedCommitNodes() { + List selectedNodes = getSelectedTreeNodes(); + return selectedNodes.isEmpty() ? Collections.emptyList() : collectSelectedCommitNodes(selectedNodes); + } + + @NotNull + private List getSelectedTreeNodes() { int[] rows = myTree.getSelectionRows(); - if (rows != null && rows.length != 0) { - List selectedNodes = getNodesForRows(getSortedRows(rows)); - return collectSelectedCommitNodes(selectedNodes); - } - return ContainerUtil.emptyList(); + return (rows != null && rows.length != 0) ? getNodesForRows(getSortedRows(rows)) : emptyList(); } @NotNull @@ -453,9 +456,23 @@ public class PushLog extends JPanel implements DataProvider { startSyncEditing(); return true; } + if (CheckboxTreeHelper.isToggleEvent(e, myTree) && pressed) { + toggleRepositoriesFromCommits(); + return true; + } return super.processKeyBinding(ks, e, condition, pressed); } + private void toggleRepositoriesFromCommits() { + LinkedHashSet checkedNodes = + getSelectedTreeNodes().stream().map(n -> n instanceof CommitNode ? n.getParent() : n).filter(CheckedTreeNode.class::isInstance) + .map(CheckedTreeNode.class::cast).collect(toCollection(LinkedHashSet::new)); + if (checkedNodes.isEmpty()) return; + // use new state from first lead node; + boolean newState = !checkedNodes.iterator().next().isChecked(); + checkedNodes.forEach(n -> myTree.setNodeState(n, newState)); + } + @Nullable private DefaultMutableTreeNode getFirstNodeToEdit() { // start edit last selected component if editable diff --git a/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java b/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java index 852fa46dcf0e..fc036d85762e 100644 --- a/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java +++ b/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java @@ -162,7 +162,7 @@ public class CheckboxTreeHelper { }); } - private static boolean isToggleEvent(KeyEvent e, JComponent mainComponent) { + public static boolean isToggleEvent(KeyEvent e, JComponent mainComponent) { return e.getKeyCode() == KeyEvent.VK_SPACE && SpeedSearchSupply.getSupply(mainComponent) == null; }