From ba36ff65a2c666742744a3ccd9577b65b75d782c Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 19 Aug 2010 11:38:27 +0400 Subject: [PATCH] IDEA-57743: Double click on breakpoint in breakpoint list should do "Go to" --- .../breakpoints/ui/XBreakpointsPanel.java | 15 +++++++++--- .../impl/breakpoints/ui/XBreakpointsTree.java | 24 ++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsPanel.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsPanel.java index 14611203d51d..a3fa5c761943 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsPanel.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsPanel.java @@ -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> extends AbstractBreakpo myAllGroupingRules = new ArrayList>(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> extends AbstractBreakpo fireBreakpointsChanged(); } + @Override + public void ensureSelectionExists() { + final B first = ContainerUtil.getFirstItem(getBreakpoints(), null); + if (first != null) { + selectBreakpoint(first); + } + } + private Collection getBreakpoints() { return getBreakpointManager().getBreakpoints(myType); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsTree.java index 35e8de23639a..f940a4ba7243 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointsTree.java @@ -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> extends CheckboxTree { private final TreeNodeComparator myComparator; private final CheckedTreeNode myRoot; + private DialogWrapper myParentDialog; private final Map> myNodes = new HashMap>(); private List> myGroupingRules; private final Map myGroupNodes = new HashMap(); private final MultiValuesMap, XBreakpointGroup> myGroups = new MultiValuesMap, XBreakpointGroup>(); private XBreakpointsTree(final XBreakpointType type, final CheckedTreeNode root, - Collection> groupingRules) { + Collection> groupingRules, DialogWrapper parentDialog) { super(new BreakpointsTreeCellRenderer(), root); myRoot = root; + myParentDialog = parentDialog; myComparator = new TreeNodeComparator(type); setGroupingRulesInternal(groupingRules); } @@ -59,8 +63,10 @@ public class XBreakpointsTree> extends CheckboxTree { setShowsRootHandles(!groupingRules.isEmpty()); } - public static > XBreakpointsTree createTree(final XBreakpointType type, final Collection> groupingRules) { - return new XBreakpointsTree(type, new CheckedTreeNode("root"), groupingRules); + public static > XBreakpointsTree createTree(final XBreakpointType type, + final Collection> groupingRules, + DialogWrapper parentDialog) { + return new XBreakpointsTree(type, new CheckedTreeNode("root"), groupingRules, parentDialog); } public void buildTree(@NotNull Collection breakpoints) { @@ -106,6 +112,17 @@ public class XBreakpointsTree> 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 XBreakpointGroup getGroup(final B breakpoint, final XBreakpointGroupingRule groupingRule) { //noinspection unchecked @@ -148,6 +165,7 @@ public class XBreakpointsTree> 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)node).getBreakpoint()); } return true;