IDEA-122662 Breakpoints dialog: on new breakpoint adding it should get focus

This commit is contained in:
Egor.Ushakov
2014-03-26 14:04:17 +04:00
parent 1eddec2f2e
commit f3a4990602
4 changed files with 37 additions and 38 deletions
@@ -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<Breakpoint> {
//private final List<MyBreakpointManagerListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
@Override
public AnAction[] getAddBreakpointActions(@NotNull Project project) {
//List<AnAction> result = new ArrayList<AnAction>();
//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<XBreakpointGroupingRule> rules) {
//rules.add(new XBreakpointGroupingByCategoryRule());
@@ -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<XBreakpoin
return null;
}
@Override
public AnAction[] getAddBreakpointActions(@NotNull Project project) {
List<AnAction> result = new ArrayList<AnAction>();
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) {
}
@@ -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<B> {
@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<BreakpointItem> items);
@@ -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<BreakpointItem> 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;
}
}