mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
XDebugger: auto-focusing Console/Frames tabs when necessary (like in Java-debugger)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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}''
|
||||
|
||||
Reference in New Issue
Block a user