summaryrefslogtreecommitdiff
path: root/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java')
-rw-r--r--python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java b/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
new file mode 100644
index 000000000000..e8c50e49280a
--- /dev/null
+++ b/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
@@ -0,0 +1,127 @@
+package com.jetbrains.python.console;
+
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.SimpleToolWindowPanel;
+import com.intellij.openapi.wm.ToolWindow;
+import com.intellij.openapi.wm.ToolWindowManager;
+import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
+import com.intellij.openapi.wm.ex.ToolWindowManagerListener;
+import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
+import com.intellij.ui.content.Content;
+import com.intellij.ui.content.ContentFactory;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+/**
+ * @author traff
+ */
+public class PythonConsoleToolWindow {
+
+ private final Project myProject;
+
+ private boolean myInitialized = false;
+
+ public PythonConsoleToolWindow(Project project) {
+ myProject = project;
+ }
+
+ public static PythonConsoleToolWindow getInstance(@NotNull Project project) {
+ return project.getComponent(PythonConsoleToolWindow.class);
+ }
+
+
+ public void init(final @NotNull ToolWindow toolWindow, final @NotNull RunContentDescriptor contentDescriptor) {
+ addContent(toolWindow, contentDescriptor);
+
+ if (!myInitialized) {
+ doInit(toolWindow);
+ }
+ }
+
+ private void doInit(final ToolWindow toolWindow) {
+ myInitialized = true;
+
+ toolWindow.setToHideOnEmptyContent(true);
+
+ ((ToolWindowManagerEx)ToolWindowManager.getInstance(myProject)).addToolWindowManagerListener(new ToolWindowManagerListener() {
+ @Override
+ public void toolWindowRegistered(@NotNull String id) {
+ }
+
+ @Override
+ public void stateChanged() {
+ ToolWindow window = getToolWindow();
+ if (window != null) {
+ boolean visible = window.isVisible();
+ if (visible && toolWindow.getContentManager().getContentCount() == 0) {
+ RunPythonConsoleAction.runPythonConsole(myProject, null, toolWindow);
+ }
+ }
+ }
+ });
+ }
+
+ private static void addContent(ToolWindow toolWindow, RunContentDescriptor contentDescriptor) {
+ toolWindow.getComponent().putClientProperty(ToolWindowContentUi.HIDE_ID_LABEL, "true");
+
+ Content content = toolWindow.getContentManager().findContent(contentDescriptor.getDisplayName());
+ if (content == null) {
+ content = createContent(contentDescriptor);
+ toolWindow.getContentManager().addContent(content);
+ }
+ else {
+ SimpleToolWindowPanel panel = new SimpleToolWindowPanel(false, true);
+ resetContent(contentDescriptor, panel, content);
+ }
+
+ toolWindow.getContentManager().setSelectedContent(content);
+ }
+
+ public ToolWindow getToolWindow() {
+ return ToolWindowManager.getInstance(myProject).getToolWindow(PythonConsoleToolWindowFactory.ID);
+ }
+
+ private static Content createContent(final @NotNull RunContentDescriptor contentDescriptor) {
+ SimpleToolWindowPanel panel = new SimpleToolWindowPanel(false, true);
+
+ final Content content = ContentFactory.SERVICE.getInstance().createContent(panel, contentDescriptor.getDisplayName(), false);
+ content.setCloseable(true);
+
+ resetContent(contentDescriptor, panel, content);
+
+ return content;
+ }
+
+ private static void resetContent(RunContentDescriptor contentDescriptor, SimpleToolWindowPanel panel, Content content) {
+ panel.setContent(contentDescriptor.getComponent());
+ //panel.addFocusListener(createFocusListener(toolWindow));
+
+ content.setComponent(panel);
+ content.setPreferredFocusableComponent(contentDescriptor.getComponent());
+ }
+
+ private static FocusListener createFocusListener(final ToolWindow toolWindow) {
+ return new FocusListener() {
+ @Override
+ public void focusGained(FocusEvent e) {
+ JComponent component = getComponentToFocus(toolWindow);
+ if (component != null) {
+ component.requestFocusInWindow();
+ }
+ }
+
+ @Override
+ public void focusLost(FocusEvent e) {
+
+ }
+ };
+ }
+
+ private static JComponent getComponentToFocus(ToolWindow window) {
+ return window.getContentManager().getComponent();
+ }
+}