diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java index a95baf60fdf6..16775fddc8f3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java @@ -94,7 +94,6 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos private ExecutionEnvironment myEnvironment; private RunProfile myConfiguration; - public static final String BREAKPOINT_CONDITION = "breakpoint"; private final ThreadsPanel myThreadsPanel; private static final String THREAD_DUMP_CONTENT_PREFIX = "Dump"; private final Icon myIcon; @@ -104,10 +103,10 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos myIcon = icon; - myUi = RunnerLayoutUi.Factory.getInstance(project).create("JavaDebugger", DebuggerBundle.message("title.generic.debug.dialog"), sessionName, this); + myUi = RunnerLayoutUi.Factory.getInstance(project).create("JavaDebugger", XDebuggerBundle.message("xdebugger.default.content.title"), sessionName, this); - myUi.getDefaults().initTabDefaults(0, "Debugger", null). - initFocusContent(DebuggerContentInfo.FRAME_CONTENT, BREAKPOINT_CONDITION). + myUi.getDefaults().initTabDefaults(0, XDebuggerBundle.message("xdebugger.debugger.tab.title"), null). + initFocusContent(DebuggerContentInfo.FRAME_CONTENT, LayoutViewOptions.BREAKPOINT_CONDITION). initFocusContent(DebuggerContentInfo.CONSOLE_CONTENT, LayoutViewOptions.STARTUP, new LayoutAttractionPolicy.FocusOnce(false)); final DefaultActionGroup focus = new DefaultActionGroup(); @@ -479,9 +478,9 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos private void attractFramesOnPause(final int event) { if (DebuggerSession.EVENT_PAUSE == event) { - myUi.attractBy(BREAKPOINT_CONDITION); + myUi.attractBy(LayoutViewOptions.BREAKPOINT_CONDITION); } else if (DebuggerSession.EVENT_RESUME == event) { - myUi.clearAttractionBy(BREAKPOINT_CONDITION); + myUi.clearAttractionBy(LayoutViewOptions.BREAKPOINT_CONDITION); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/actions/FocusOnBreakpointAction.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/actions/FocusOnBreakpointAction.java index 74c2b60220ed..d248c4a0db9e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/actions/FocusOnBreakpointAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/actions/FocusOnBreakpointAction.java @@ -16,10 +16,10 @@ package com.intellij.debugger.ui.breakpoints.actions; import com.intellij.execution.ui.actions.AbstractFocusOnAction; -import com.intellij.debugger.ui.DebuggerSessionTab; +import com.intellij.execution.ui.layout.LayoutViewOptions; public class FocusOnBreakpointAction extends AbstractFocusOnAction { public FocusOnBreakpointAction() { - super(DebuggerSessionTab.BREAKPOINT_CONDITION); + super(LayoutViewOptions.BREAKPOINT_CONDITION); } } \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java b/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java index d312a3186ab4..a71581ba1170 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java +++ b/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java @@ -16,6 +16,7 @@ package com.intellij.execution.ui.layout; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.intellij.openapi.actionSystem.ActionGroup; @@ -25,6 +26,7 @@ import com.intellij.ui.content.Content; public interface LayoutViewOptions { String STARTUP = "startup"; + String BREAKPOINT_CONDITION = "breakpoint"; @NotNull LayoutViewOptions setTopToolbar(@NotNull ActionGroup actions, @NotNull String place); diff --git a/platform/platform-resources-en/src/messages/XDebuggerBundle.properties b/platform/platform-resources-en/src/messages/XDebuggerBundle.properties index 1a348fb16065..3d8a4ddef3a1 100644 --- a/platform/platform-resources-en/src/messages/XDebuggerBundle.properties +++ b/platform/platform-resources-en/src/messages/XDebuggerBundle.properties @@ -2,6 +2,9 @@ xdebugger.colors.page.name=Debugger debugger.configurable.display.name=Debugger +xdebugger.default.content.title=Debug +xdebugger.debugger.tab.title=Debugger + xdebugger.remove.line.breakpoint.action.text=Remove xdebugger.disable.breakpoint.action.text=Disable xdebugger.enable.breakpoint.action.text=Enable diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java index 86453dbf60be..00b5143ce45a 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java @@ -19,6 +19,7 @@ package com.intellij.xdebugger; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.ui.ConsoleView; import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.execution.ui.RunnerLayoutUi; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.xdebugger.breakpoints.XBreakpoint; @@ -135,4 +136,6 @@ public interface XDebugSession extends AbstractDebuggerSession { void updateExecutionPosition(); ConsoleView getConsoleView(); + + RunnerLayoutUi getUI(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index 14da42c4b621..c4f81befec53 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -28,6 +28,8 @@ import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.ui.ConsoleView; import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.execution.ui.RunnerLayoutUi; +import com.intellij.execution.ui.layout.LayoutViewOptions; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.Result; import com.intellij.openapi.diagnostic.Logger; @@ -217,6 +219,11 @@ public class XDebugSessionImpl implements XDebugSession { return mySessionTab; } + @Override + public RunnerLayoutUi getUI() { + return mySessionTab.getUi(); + } + private void initSessionTab() { mySessionTab = new XDebugSessionTab(myProject, mySessionName); if (myEnvironment != null) { @@ -408,6 +415,12 @@ public class XDebugSessionImpl implements XDebugSession { myCurrentStackFrame = null; myCurrentPosition = null; myPaused = false; + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + mySessionTab.getUi().clearAttractionBy(LayoutViewOptions.BREAKPOINT_CONDITION); + } + }); myDispatcher.getMulticaster().sessionResumed(); } @@ -574,6 +587,7 @@ public class XDebugSessionImpl implements XDebugSession { showSessionTab(); } mySessionTab.toFront(); + mySessionTab.getUi().attractBy(LayoutViewOptions.BREAKPOINT_CONDITION); } }); myDispatcher.getMulticaster().sessionPaused(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index 3f2b06d4a977..d29928bca354 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -29,6 +29,8 @@ import com.intellij.execution.ui.ExecutionConsole; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.execution.ui.RunnerLayoutUi; import com.intellij.execution.ui.actions.CloseAction; +import com.intellij.execution.ui.layout.LayoutAttractionPolicy; +import com.intellij.execution.ui.layout.LayoutViewOptions; import com.intellij.execution.ui.layout.PlaceInGrid; import com.intellij.ide.CommonActionsManager; import com.intellij.ide.actions.ContextHelpAction; @@ -68,7 +70,10 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { mySessionName = sessionName; myUi = RunnerLayoutUi.Factory.getInstance(project).create("Debug", "unknown!", sessionName, this); - myUi.getDefaults().initTabDefaults(0, "Debug", null); + myUi.getDefaults() + .initTabDefaults(0, XDebuggerBundle.message("xdebugger.debugger.tab.title"), null) + .initFocusContent(DebuggerContentInfo.FRAME_CONTENT, LayoutViewOptions.BREAKPOINT_CONDITION) + .initFocusContent(DebuggerContentInfo.CONSOLE_CONTENT, LayoutViewOptions.STARTUP, new LayoutAttractionPolicy.FocusOnce(false)); } private static ActionGroup getActionGroup(final String id) { @@ -201,71 +206,6 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { return myRunContentDescriptor; } - private RunContentDescriptor initUI(final @NotNull XDebugSession session, final @NotNull XDebugSessionData sessionData, - final @Nullable ExecutionEnvironment environment, - final @Nullable ProgramRunner runner, - ConsoleView consoleView) { - final XDebugProcess debugProcess = session.getDebugProcess(); - ProcessHandler processHandler = debugProcess.getProcessHandler(); - myConsole = consoleView; - myRunContentDescriptor = new RunContentDescriptor(myConsole, processHandler, myUi.getComponent(), mySessionName); - - myUi.addContent(createFramesContent(session), 0, PlaceInGrid.left, false); - myUi.addContent(createVariablesContent(session), 0, PlaceInGrid.center, false); - myUi.addContent(createWatchesContent(session, sessionData), 0, PlaceInGrid.right, false); - final Content consoleContent = createConsoleContent(); - myUi.addContent(consoleContent, 1, PlaceInGrid.bottom, false); - attachNotificationTo(consoleContent); - - session.getDebugProcess().registerAdditionalContent(myUi); - RunContentBuilder.addAdditionalConsoleEditorActions(myConsole, consoleContent); - myUi.addContent(consoleContent, 0, PlaceInGrid.bottom, false); - - if (ApplicationManager.getApplication().isUnitTestMode()) { - return myRunContentDescriptor; - } - - DefaultActionGroup leftToolbar = new DefaultActionGroup(); - final Executor executor = DefaultDebugExecutor.getDebugExecutorInstance(); - if (runner != null && environment != null) { - RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor.getProcessHandler(), XDebuggerUIConstants.DEBUG_AGAIN_ICON, - myRunContentDescriptor, environment); - leftToolbar.add(restartAction); - restartAction.registerShortcut(myUi.getComponent()); - } - - leftToolbar.addAll(getActionGroup(XDebuggerActions.TOOL_WINDOW_LEFT_TOOLBAR_GROUP)); - - //group.addSeparator(); - //addAction(group, DebuggerActions.EXPORT_THREADS); - leftToolbar.addSeparator(); - - leftToolbar.add(myUi.getOptions().getLayoutActions()); - - leftToolbar.addSeparator(); - - leftToolbar.add(PinToolwindowTabAction.getPinAction()); - leftToolbar.add(new CloseAction(executor, myRunContentDescriptor, getProject())); - leftToolbar.add(new ContextHelpAction(executor.getHelpId())); - - DefaultActionGroup topToolbar = new DefaultActionGroup(); - topToolbar.addAll(getActionGroup(XDebuggerActions.TOOL_WINDOW_TOP_TOOLBAR_GROUP)); - - session.getDebugProcess().registerAdditionalActions(leftToolbar, topToolbar); - myUi.getOptions().setLeftToolbar(leftToolbar, ActionPlaces.DEBUGGER_TOOLBAR); - myUi.getOptions().setTopToolbar(topToolbar, ActionPlaces.DEBUGGER_TOOLBAR); - - if (environment != null) { - final RunProfile runConfiguration = environment.getRunProfile(); - registerFileMatcher(runConfiguration); - initLogConsoles(runConfiguration, myRunContentDescriptor.getProcessHandler()); - } - - rebuildViews(); - - return myRunContentDescriptor; - } - public RunnerLayoutUi getUi() { return myUi; } diff --git a/resources-en/src/messages/DebuggerBundle.properties b/resources-en/src/messages/DebuggerBundle.properties index 9239dd87a967..d0acc93f0c4c 100644 --- a/resources-en/src/messages/DebuggerBundle.properties +++ b/resources-en/src/messages/DebuggerBundle.properties @@ -69,7 +69,6 @@ error.vm.disconnected=VM disconnected. Target virtual machine closed connection error.unknown.host=Cannot connect to remote process, host is unknown error.cannot.open.debugger.port=Unable to open debugger port error.exception.while.connecting=Error connecting to remote process.\nException occurred: {0}\nException message: {1} -title.generic.debug.dialog=Debug status.waiting.attach=Debugger is waiting for application to start; debug address: ''{0}''; transport: ''{1}'' status.listening=Listening to the connection, address: ''{0}'', transport: ''{1}'' status.connecting=Connecting to the target VM, address: ''{0}'', transport: ''{1}''