From f3a4990602448ff12a9277df29c4f80b0cddd192 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 26 Mar 2014 14:03:14 +0400 Subject: [PATCH] IDEA-122662 Breakpoints dialog: on new breakpoint adding it should get focus --- .../debugger/ui/JavaDebuggerSupport.java | 12 ----- .../breakpoints/XBreakpointPanelProvider.java | 12 ----- .../ui/BreakpointPanelProvider.java | 3 -- .../breakpoints/ui/BreakpointsDialog.java | 48 ++++++++++++++----- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java index a121530cbbb6..27b922ce789e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java @@ -22,7 +22,6 @@ import com.intellij.debugger.settings.*; import com.intellij.debugger.ui.breakpoints.Breakpoint; import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; -import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.editor.Document; @@ -208,17 +207,6 @@ public class JavaDebuggerSupport extends DebuggerSupport { private static class JavaBreakpointPanelProvider extends BreakpointPanelProvider { //private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - @Override - public AnAction[] getAddBreakpointActions(@NotNull Project project) { - //List result = new ArrayList(); - //BreakpointFactory[] breakpointFactories = BreakpointFactory.getBreakpointFactories(); - //for (BreakpointFactory breakpointFactory : breakpointFactories) { - // result.add(new AddJavaBreakpointAction(breakpointFactory)); - //} - //return result.toArray(new AnAction[result.size()]); - return AnAction.EMPTY_ARRAY; - } - @Override public void createBreakpointsGroupingRules(Collection rules) { //rules.add(new XBreakpointGroupingByCategoryRule()); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java index 361b2f916ba1..c4d452965435 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java @@ -37,7 +37,6 @@ import com.intellij.xdebugger.impl.breakpoints.ui.grouping.XBreakpointGroupingBy import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -113,17 +112,6 @@ public class XBreakpointPanelProvider extends BreakpointPanelProvider result = new ArrayList(); - for (XBreakpointType type : XBreakpointUtil.getBreakpointTypes()) { - if (type.isAddBreakpointButtonVisible()) { - result.add(new AddXBreakpointAction(type)); - } - } - return result.toArray(new AnAction[result.size()]); - } - public void onDialogClosed(final Project project) { } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointPanelProvider.java index d8c0548a8e93..c8587b620596 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointPanelProvider.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointPanelProvider.java @@ -16,7 +16,6 @@ package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.openapi.Disposable; -import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.project.Project; @@ -49,8 +48,6 @@ public abstract class BreakpointPanelProvider { @Nullable public abstract GutterIconRenderer getBreakpointGutterIconRenderer(Object breakpoint); - public abstract AnAction[] getAddBreakpointActions(@NotNull Project project); - public abstract void onDialogClosed(final Project project); public abstract void provideBreakpointItems(Project project, Collection items); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java index 67b0ece2f5ac..1f8430c66806 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointsDialog.java @@ -32,8 +32,11 @@ import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import com.intellij.xdebugger.XDebuggerManager; +import com.intellij.xdebugger.breakpoints.XBreakpoint; +import com.intellij.xdebugger.breakpoints.XBreakpointType; import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule; import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl; +import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil; import com.intellij.xdebugger.impl.breakpoints.XBreakpointsDialogState; import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointItemNode; import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointItemsTreeController; @@ -144,15 +147,7 @@ public class BreakpointsDialog extends DialogWrapper { } void initSelection(Collection breakpoints) { - boolean found = false; - for (BreakpointItem breakpoint : breakpoints) { - if (breakpoint.getBreakpoint() == myInitialBreakpoint) { - myTreeController.selectBreakpointItem(breakpoint, null); - found = true; - break; - } - } - + boolean found = selectBreakpoint(myInitialBreakpoint); if (!found && !breakpoints.isEmpty()) { myTreeController.selectFirstBreakpointItem(); } @@ -245,8 +240,10 @@ public class BreakpointsDialog extends DialogWrapper { }.registerCustomShortcutSet(ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getShortcutSet(), tree); final DefaultActionGroup breakpointTypes = new DefaultActionGroup(); - for (BreakpointPanelProvider provider : myBreakpointsPanelProviders) { - breakpointTypes.addAll(provider.getAddBreakpointActions(myProject)); + for (XBreakpointType type : XBreakpointUtil.getBreakpointTypes()) { + if (type.isAddBreakpointButtonVisible()) { + breakpointTypes.addAll(new AddXBreakpointAction(type)); + } } ToolbarDecorator decorator = ToolbarDecorator.createDecorator(tree). @@ -392,4 +389,33 @@ public class BreakpointsDialog extends DialogWrapper { ((BreakpointItem)item).saveState(); } } + + private class AddXBreakpointAction extends AnAction { + private final XBreakpointType myType; + + public AddXBreakpointAction(XBreakpointType type) { + myType = type; + getTemplatePresentation().setIcon(type.getEnabledIcon()); + getTemplatePresentation().setText(type.getTitle()); + } + + @Override + public void actionPerformed(AnActionEvent e) { + saveCurrentItem(); + XBreakpoint breakpoint = myType.addBreakpoint(myProject, null); + if (breakpoint != null) { + selectBreakpoint(breakpoint); + } + } + } + + private boolean selectBreakpoint(Object breakpoint) { + for (BreakpointItem item : myBreakpointItems) { + if (item.getBreakpoint() == breakpoint) { + myTreeController.selectBreakpointItem(item, null); + return true; + } + } + return false; + } }