[vcs]: IDEA-163332 toggle repos from related commits selection

This commit is contained in:
Nadya Zabrodina
2016-11-03 19:21:37 +03:00
parent 82c233b9b4
commit 3214522190
2 changed files with 26 additions and 9 deletions
@@ -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<CommitNode> getSelectedCommitNodes() {
List<DefaultMutableTreeNode> selectedNodes = getSelectedTreeNodes();
return selectedNodes.isEmpty() ? Collections.emptyList() : collectSelectedCommitNodes(selectedNodes);
}
@NotNull
private List<DefaultMutableTreeNode> getSelectedTreeNodes() {
int[] rows = myTree.getSelectionRows();
if (rows != null && rows.length != 0) {
List<DefaultMutableTreeNode> 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<CheckedTreeNode> 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
@@ -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;
}