IDEA-57743: Double click on breakpoint in breakpoint list should do "Go to"

This commit is contained in:
nik
2010-08-19 11:38:27 +04:00
parent 191da560ea
commit ba36ff65a2
2 changed files with 33 additions and 6 deletions
@@ -18,16 +18,17 @@ package com.intellij.xdebugger.impl.breakpoints.ui;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XBreakpointManager;
import com.intellij.xdebugger.breakpoints.XBreakpointType;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule;
import com.intellij.xdebugger.impl.breakpoints.ui.actions.GoToBreakpointAction;
import com.intellij.xdebugger.impl.breakpoints.ui.actions.RemoveBreakpointAction;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointTypeDialogState;
import com.intellij.xdebugger.impl.breakpoints.ui.actions.GoToBreakpointAction;
import com.intellij.xdebugger.impl.breakpoints.ui.actions.RemoveBreakpointAction;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -67,7 +68,7 @@ public class XBreakpointsPanel<B extends XBreakpoint<?>> extends AbstractBreakpo
myAllGroupingRules = new ArrayList<XBreakpointGroupingRule<B,?>>(myType.getGroupingRules());
mySelectedGroupingRules = getInitialGroupingRules();
myTree = XBreakpointsTree.createTree(myType, mySelectedGroupingRules);
myTree = XBreakpointsTree.createTree(myType, mySelectedGroupingRules, myParentDialog);
myTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(final TreeSelectionEvent e) {
onSelectionChanged();
@@ -220,6 +221,14 @@ public class XBreakpointsPanel<B extends XBreakpoint<?>> extends AbstractBreakpo
fireBreakpointsChanged();
}
@Override
public void ensureSelectionExists() {
final B first = ContainerUtil.getFirstItem(getBreakpoints(), null);
if (first != null) {
selectBreakpoint(first);
}
}
private Collection<? extends B> getBreakpoints() {
return getBreakpointManager().getBreakpoints(myType);
}
@@ -16,7 +16,9 @@
package com.intellij.xdebugger.impl.breakpoints.ui;
import com.intellij.ide.util.treeView.TreeState;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.pom.Navigatable;
import com.intellij.ui.CheckboxTree;
import com.intellij.ui.CheckedTreeNode;
import com.intellij.ui.SimpleTextAttributes;
@@ -41,15 +43,17 @@ import java.util.*;
public class XBreakpointsTree<B extends XBreakpoint<?>> extends CheckboxTree {
private final TreeNodeComparator myComparator;
private final CheckedTreeNode myRoot;
private DialogWrapper myParentDialog;
private final Map<B, BreakpointNode<B>> myNodes = new HashMap<B, BreakpointNode<B>>();
private List<XBreakpointGroupingRule<B, ?>> myGroupingRules;
private final Map<XBreakpointGroup, BreakpointsGroupNode> myGroupNodes = new HashMap<XBreakpointGroup, BreakpointsGroupNode>();
private final MultiValuesMap<XBreakpointGroupingRule<B, ?>, XBreakpointGroup> myGroups = new MultiValuesMap<XBreakpointGroupingRule<B,?>, XBreakpointGroup>();
private XBreakpointsTree(final XBreakpointType<B, ?> type, final CheckedTreeNode root,
Collection<XBreakpointGroupingRule<B, ?>> groupingRules) {
Collection<XBreakpointGroupingRule<B, ?>> groupingRules, DialogWrapper parentDialog) {
super(new BreakpointsTreeCellRenderer(), root);
myRoot = root;
myParentDialog = parentDialog;
myComparator = new TreeNodeComparator<B>(type);
setGroupingRulesInternal(groupingRules);
}
@@ -59,8 +63,10 @@ public class XBreakpointsTree<B extends XBreakpoint<?>> extends CheckboxTree {
setShowsRootHandles(!groupingRules.isEmpty());
}
public static <B extends XBreakpoint<?>> XBreakpointsTree<B> createTree(final XBreakpointType<B, ?> type, final Collection<XBreakpointGroupingRule<B, ?>> groupingRules) {
return new XBreakpointsTree<B>(type, new CheckedTreeNode("root"), groupingRules);
public static <B extends XBreakpoint<?>> XBreakpointsTree<B> createTree(final XBreakpointType<B, ?> type,
final Collection<XBreakpointGroupingRule<B, ?>> groupingRules,
DialogWrapper parentDialog) {
return new XBreakpointsTree<B>(type, new CheckedTreeNode("root"), groupingRules, parentDialog);
}
public void buildTree(@NotNull Collection<? extends B> breakpoints) {
@@ -106,6 +112,17 @@ public class XBreakpointsTree<B extends XBreakpoint<?>> extends CheckboxTree {
return groupNode;
}
@Override
protected void onDoubleClick(CheckedTreeNode node) {
if (node instanceof BreakpointNode<?>) {
final Navigatable navigatable = ((BreakpointNode)node).getBreakpoint().getNavigatable();
if (navigatable != null) {
navigatable.navigate(true);
myParentDialog.close(DialogWrapper.OK_EXIT_CODE);
}
}
}
@Nullable
private <G extends XBreakpointGroup> XBreakpointGroup getGroup(final B breakpoint, final XBreakpointGroupingRule<B, G> groupingRule) {
//noinspection unchecked
@@ -148,6 +165,7 @@ public class XBreakpointsTree<B extends XBreakpoint<?>> extends CheckboxTree {
TreeUtil.traverseDepth((TreeNode)selectionPath.getLastPathComponent(), new TreeUtil.Traverse() {
public boolean accept(final Object node) {
if (node instanceof BreakpointNode) {
//noinspection unchecked
list.add(((BreakpointNode<B>)node).getBreakpoint());
}
return true;