mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed PY-15720 IPython Notebook: add close button for the console
This commit is contained in:
@@ -105,7 +105,7 @@ public class RunContentExecutor implements Disposable {
|
||||
final JComponent consolePanel = createConsolePanel(console, actions);
|
||||
RunContentDescriptor descriptor = new RunContentDescriptor(console, myProcess, consolePanel, myTitle);
|
||||
|
||||
Disposer.register(this, descriptor);
|
||||
Disposer.register(console, descriptor);
|
||||
|
||||
actions.add(new RerunAction(consolePanel));
|
||||
actions.add(new StopAction());
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
package org.jetbrains.plugins.ipnb;
|
||||
|
||||
import com.intellij.execution.ExecutionManager;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.execution.impl.ConsoleViewImpl;
|
||||
import com.intellij.execution.process.KillableColoredProcessHandler;
|
||||
import com.intellij.execution.process.UnixProcessManager;
|
||||
import com.intellij.execution.ui.RunContentDescriptor;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class IpnbConsole extends ConsoleViewImpl {
|
||||
private final KillableColoredProcessHandler myProcess;
|
||||
|
||||
public IpnbConsole(@NotNull final Project project, @NotNull final KillableColoredProcessHandler processHandler) {
|
||||
super(project, false);
|
||||
myProcess = processHandler;
|
||||
|
||||
final Executor executor = DefaultRunExecutor.getRunExecutorInstance();
|
||||
final DefaultActionGroup actions = new DefaultActionGroup();
|
||||
|
||||
final JComponent consolePanel = createConsolePanel(actions);
|
||||
final RunContentDescriptor descriptor = new RunContentDescriptor(this, myProcess, consolePanel, "IPython Notebook");
|
||||
|
||||
Disposer.register(this, descriptor);
|
||||
actions.add(new StopAction());
|
||||
ExecutionManager.getInstance(getProject()).getContentManager().showRunContent(executor, descriptor);
|
||||
}
|
||||
|
||||
private JComponent createConsolePanel(ActionGroup actions) {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BorderLayout());
|
||||
panel.add(getComponent(), BorderLayout.CENTER);
|
||||
panel.add(ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, actions, false).getComponent(), BorderLayout.WEST);
|
||||
return panel;
|
||||
}
|
||||
|
||||
private class StopAction extends AnAction implements DumbAware {
|
||||
public StopAction() {
|
||||
super("Stop", "Stop", AllIcons.Actions.Suspend);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
if (myProcess.isProcessTerminated()) return;
|
||||
myProcess.destroyProcess();
|
||||
UnixProcessManager.sendSigIntToProcessTree(myProcess.getProcess());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
e.getPresentation().setVisible(true);
|
||||
e.getPresentation().setEnabled(!myProcess.isProcessTerminated());
|
||||
}
|
||||
}
|
||||
}
|
||||
+20
-2
@@ -21,6 +21,7 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.popup.Balloon;
|
||||
import com.intellij.openapi.ui.popup.BalloonBuilder;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -33,7 +34,6 @@ import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.ipnb.IpnbConsole;
|
||||
import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor;
|
||||
import org.jetbrains.plugins.ipnb.editor.panels.code.IpnbCodePanel;
|
||||
import org.jetbrains.plugins.ipnb.format.cells.output.IpnbOutputCell;
|
||||
@@ -302,7 +302,25 @@ public final class IpnbConnectionManager implements ProjectComponent {
|
||||
@Override
|
||||
public void run() {
|
||||
new RunContentExecutor(myProject, processHandler)
|
||||
.withConsole(new IpnbConsole(myProject, processHandler))
|
||||
.withTitle("IPython Notebook")
|
||||
.withStop(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
processHandler.destroyProcess();
|
||||
UnixProcessManager.sendSigIntToProcessTree(processHandler.getProcess());
|
||||
}
|
||||
}, new Computable<Boolean>() {
|
||||
@Override
|
||||
public Boolean compute() {
|
||||
return !processHandler.isProcessTerminated();
|
||||
}
|
||||
})
|
||||
.withRerun(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
startIpythonServer(url, fileEditor);
|
||||
}
|
||||
})
|
||||
.run();
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user