Move Debug console view related stuff to an appropriate class
[idea/community.git] / python / src / com / jetbrains / python / console / PythonDebugLanguageConsoleView.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.python.console;
17
18 import com.intellij.execution.console.DuplexConsoleView;
19 import com.intellij.execution.filters.TextConsoleBuilderFactory;
20 import com.intellij.execution.impl.ConsoleViewImpl;
21 import com.intellij.execution.process.ProcessOutputTypes;
22 import com.intellij.execution.ui.ConsoleView;
23 import com.intellij.openapi.editor.Editor;
24 import com.intellij.openapi.project.Project;
25 import com.intellij.openapi.projectRoots.Sdk;
26 import com.intellij.openapi.wm.IdeFocusManager;
27 import com.jetbrains.python.PyBundle;
28 import icons.PythonIcons;
29 import org.jetbrains.annotations.NotNull;
30 import org.jetbrains.annotations.Nullable;
31
32 /**
33  * @author traff
34  */
35 public class PythonDebugLanguageConsoleView extends DuplexConsoleView<ConsoleView, PythonConsoleView> implements PyCodeExecutor {
36
37   public static final String DEBUG_CONSOLE_START_COMMAND = "import sys; print('Python %s on %s' % (sys.version, sys.platform))";
38   private boolean myDebugConsoleInitialized = false;
39
40   public PythonDebugLanguageConsoleView(final Project project, Sdk sdk, ConsoleView consoleView) {
41     super(consoleView, new PythonConsoleView(project, "Python Console", sdk));
42
43     enableConsole(!PyConsoleOptions.getInstance(project).isShowDebugConsoleByDefault());
44
45     getSwitchConsoleActionPresentation().setIcon(PythonIcons.Python.Debug.CommandLine);
46     getSwitchConsoleActionPresentation().setText(PyBundle.message("run.configuration.show.command.line.action.name"));
47   }
48
49   public PythonDebugLanguageConsoleView(final Project project, Sdk sdk) {
50     this(project, sdk, TextConsoleBuilderFactory.getInstance().createBuilder(project).getConsole());
51   }
52
53   @Override
54   public void executeCode(@NotNull String code, @Nullable Editor e) {
55     enableConsole(false);
56     getPydevConsoleView().executeCode(code, e);
57   }
58
59   @NotNull
60   public PythonConsoleView getPydevConsoleView() {
61     return getSecondaryConsoleView();
62   }
63
64   public ConsoleViewImpl getTextConsole() {
65     ConsoleView consoleView = getPrimaryConsoleView();
66     if (consoleView instanceof ConsoleViewImpl) {
67       return (ConsoleViewImpl)consoleView;
68     }
69     return null;
70   }
71
72   public void showStartMessageForFirstExecution(String startCommand, PythonConsoleView console) {
73     console.setPrompt("");
74     console.executeStatement(startCommand + "\n", ProcessOutputTypes.SYSTEM);
75   }
76
77   @Override
78   public void enableConsole(boolean primary) {
79     super.enableConsole(primary);
80
81     if (!primary && !isPrimaryConsoleEnabled()) {
82       PythonConsoleView console = getPydevConsoleView();
83       if (!myDebugConsoleInitialized && console.getExecuteActionHandler() != null) {
84         console.addConsoleFolding(true);
85         showStartMessageForFirstExecution(DEBUG_CONSOLE_START_COMMAND, console);
86         myDebugConsoleInitialized = true;
87       }
88
89       IdeFocusManager.findInstance().requestFocus(console.getConsoleEditor().getContentComponent(), true);
90     }
91   }
92 }