fixed PY-15720 IPython Notebook: add close button for the console

This commit is contained in:
Ekaterina Tuzova
2015-04-30 16:49:14 +03:00
parent 7e9906f6ff
commit 999b0679fa
3 changed files with 21 additions and 67 deletions
@@ -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());
}
}
}
@@ -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();
}
});