mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-57743: Double click on breakpoint in breakpoint list should do "Go to"
This commit is contained in:
+12
-3
@@ -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);
|
||||
}
|
||||
|
||||
+21
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user