diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/XBreakpointGroup.java b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/XBreakpointGroup.java index 3b519c177252..ffa9c892f209 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/XBreakpointGroup.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/XBreakpointGroup.java @@ -35,4 +35,14 @@ public abstract class XBreakpointGroup implements Comparable { public int compareTo(final XBreakpointGroup o) { return getName().compareTo(o.getName()); } + + @Override + public boolean equals(Object obj) { + return obj instanceof XBreakpointGroup && compareTo((XBreakpointGroup)obj) == 0; + } + + @Override + public int hashCode() { + return getName().hashCode(); + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/AddBreakpointAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/AddBreakpointAction.java index 3f781d4f51e6..6d6e2076c1a3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/AddBreakpointAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/AddBreakpointAction.java @@ -34,8 +34,8 @@ public class AddBreakpointAction> extends XBreakpointPa return true; } - public void perform(@NotNull final Collection breakpoints, final JComponent parentComponent) { - B b = myBreakpointsPanel.getType().addBreakpoint(myBreakpointsPanel.getProject(), parentComponent); + public void perform(@NotNull final Collection breakpoints) { + B b = myBreakpointsPanel.getType().addBreakpoint(myBreakpointsPanel.getProject(), myBreakpointsPanel.getTree()); if (b != null) { myBreakpointsPanel.resetBreakpoints(); myBreakpointsPanel.selectBreakpoint(b); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointPanelAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointPanelAction.java index ba84f7ef1f64..2b37d793ad4e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointPanelAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XBreakpointPanelAction.java @@ -18,13 +18,15 @@ package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.xdebugger.breakpoints.XBreakpoint; import org.jetbrains.annotations.NotNull; -import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.Collection; +import java.util.List; /** * @author nik */ -public abstract class XBreakpointPanelAction> { +public abstract class XBreakpointPanelAction> implements ActionListener { protected final XBreakpointsPanel myBreakpointsPanel; private final String myName; @@ -39,6 +41,11 @@ public abstract class XBreakpointPanelAction> { public abstract boolean isEnabled(@NotNull Collection breakpoints); - public abstract void perform(@NotNull Collection breakpoints, final JComponent parentComponent); + public abstract void perform(@NotNull Collection breakpoints); + @Override + public void actionPerformed(ActionEvent e) { + List list = myBreakpointsPanel.getTree().getSelectedBreakpoints(); + perform(list); + } } 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 7d75b2d0a3b6..14611203d51d 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 @@ -178,12 +178,7 @@ public class XBreakpointsPanel> extends AbstractBreakpo private JButton createButton(final XBreakpointPanelAction action) { final JButton button = new JButton(action.getName()); - button.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - List list = myTree.getSelectedBreakpoints(); - action.perform(list, button); - } - }); + button.addActionListener(action); return button; } @@ -241,6 +236,10 @@ public class XBreakpointsPanel> extends AbstractBreakpo return myType; } + public XBreakpointsTree getTree() { + return myTree; + } + public boolean canSelectBreakpoint(final XBreakpoint breakpoint) { return breakpoint.getType().equals(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 411d2410bed9..35e8de23639a 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 @@ -15,6 +15,7 @@ */ package com.intellij.xdebugger.impl.breakpoints.ui; +import com.intellij.ide.util.treeView.TreeState; import com.intellij.openapi.util.MultiValuesMap; import com.intellij.ui.CheckboxTree; import com.intellij.ui.CheckedTreeNode; @@ -59,10 +60,11 @@ public class XBreakpointsTree> extends CheckboxTree { } public static > XBreakpointsTree createTree(final XBreakpointType type, final Collection> groupingRules) { - return new XBreakpointsTree(type, new CheckedTreeNode(null), groupingRules); + return new XBreakpointsTree(type, new CheckedTreeNode("root"), groupingRules); } public void buildTree(@NotNull Collection breakpoints) { + final TreeState state = TreeState.createOn(this, myRoot); myRoot.removeAllChildren(); myNodes.clear(); myGroupNodes.clear(); @@ -76,6 +78,7 @@ public class XBreakpointsTree> extends CheckboxTree { TreeUtil.sort(myRoot, myComparator); ((DefaultTreeModel)getModel()).nodeStructureChanged(myRoot); expandPath(new TreePath(myRoot)); + state.applyTo(this, myRoot); } @@ -185,7 +188,7 @@ public class XBreakpointsTree> extends CheckboxTree { private final int myLevel; private BreakpointsGroupNode(G group, int level) { - super(null); + super(group); myLevel = level; setChecked(false); myGroup = group; @@ -204,7 +207,7 @@ public class XBreakpointsTree> extends CheckboxTree { private final B myBreakpoint; private BreakpointNode(final B breakpoint) { - super(null); + super(breakpoint); myBreakpoint = breakpoint; setChecked(breakpoint.isEnabled()); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/GoToBreakpointAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/GoToBreakpointAction.java index a84b703c079c..bb377338a56e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/GoToBreakpointAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/GoToBreakpointAction.java @@ -15,14 +15,13 @@ */ package com.intellij.xdebugger.impl.breakpoints.ui.actions; +import com.intellij.openapi.ui.DialogWrapper; import com.intellij.pom.Navigatable; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.impl.breakpoints.ui.XBreakpointPanelAction; import com.intellij.xdebugger.impl.breakpoints.ui.XBreakpointsPanel; -import com.intellij.openapi.ui.DialogWrapper; import org.jetbrains.annotations.NotNull; -import javax.swing.*; import java.util.Collection; /** @@ -45,7 +44,7 @@ public class GoToBreakpointAction> extends XBreakpointP return navigatable != null && navigatable.canNavigateToSource(); } - public void perform(@NotNull final Collection breakpoints, final JComponent parentComponent) { + public void perform(@NotNull final Collection breakpoints) { B b = breakpoints.iterator().next(); Navigatable navigatable = b.getNavigatable(); if (navigatable != null) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/RemoveBreakpointAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/RemoveBreakpointAction.java index 12bf719c031f..13661e228a47 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/RemoveBreakpointAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/actions/RemoveBreakpointAction.java @@ -25,6 +25,7 @@ import com.intellij.openapi.application.Result; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.awt.event.KeyEvent; import java.util.Collection; /** @@ -33,13 +34,14 @@ import java.util.Collection; public class RemoveBreakpointAction> extends XBreakpointPanelAction { public RemoveBreakpointAction(final XBreakpointsPanel panel) { super(panel, XDebuggerBundle.message("xbreakpoints.dialog.button.remove")); + panel.getTree().registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); } public boolean isEnabled(@NotNull final Collection breakpoints) { return !breakpoints.isEmpty(); } - public void perform(@NotNull final Collection breakpoints, final JComponent parentComponent) { + public void perform(@NotNull final Collection breakpoints) { final XBreakpointManager breakpointManager = myBreakpointsPanel.getBreakpointManager(); new WriteAction() { protected void run(final Result result) {