Fix Execute selection in console for toolwindow.

This commit is contained in:
Dmitry Trofimov
2014-08-11 11:28:20 +02:00
parent a044b8da5f
commit 1e83b27d15
6 changed files with 52 additions and 24 deletions
+2 -2
View File
@@ -26,7 +26,7 @@
<project-components>
<component>
<implementation-class>com.jetbrains.python.PythonConsoleToolWindow</implementation-class>
<implementation-class>com.jetbrains.python.console.PythonConsoleToolWindow</implementation-class>
</component>
</project-components>
@@ -84,7 +84,7 @@
<!-- Console -->
<toolWindow id="Python Console" anchor="bottom" icon="PythonIcons.Python.PythonConsoleToolWindow"
factoryClass="com.jetbrains.python.PythonConsoleToolWindowFactory" secondary="false"/>
factoryClass="com.jetbrains.python.console.PythonConsoleToolWindowFactory" secondary="false"/>
</extensions>
<actions>
+1 -1
View File
@@ -654,7 +654,7 @@
<action id="ExecuteInPyConsoleAction"
class="com.jetbrains.python.actions.ExecuteInConsoleAction"
class="com.jetbrains.python.actions.PyExecuteSelectionAction"
text="Execute selection in console"
description="Executes selected code fragment in Python/Django console">
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CompareClipboardWithSelection"/>
@@ -15,7 +15,12 @@
*/
package com.jetbrains.python.actions;
import com.google.common.base.Function;
import com.google.common.base.Predicates;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
import com.intellij.execution.ExecutionHelper;
import com.intellij.execution.console.LanguageConsoleView;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.actionSystem.*;
@@ -25,22 +30,28 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.ui.content.Content;
import com.intellij.util.Consumer;
import com.intellij.util.NotNullFunction;
import com.jetbrains.python.console.PyCodeExecutor;
import com.jetbrains.python.console.PydevConsoleRunner;
import com.jetbrains.python.console.PythonConsoleToolWindow;
import com.jetbrains.python.console.PythonConsoleToolWindowFactory;
import com.jetbrains.python.psi.PyFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
public class ExecuteInConsoleAction extends AnAction {
public class PyExecuteSelectionAction extends AnAction {
public static final String EXECUTE_SELECTION_IN_CONSOLE = "Execute Selection in Console";
public ExecuteInConsoleAction() {
public PyExecuteSelectionAction() {
super(EXECUTE_SELECTION_IN_CONSOLE);
}
@@ -183,6 +194,21 @@ public class ExecuteInConsoleAction extends AnAction {
}
private static Collection<RunContentDescriptor> getConsoles(Project project) {
PythonConsoleToolWindow toolWindow = PythonConsoleToolWindow.getInstance(project);
if (toolWindow != null) {
ToolWindow tw = toolWindow.getToolWindow();
return FluentIterable.from(Lists.newArrayList(tw.getContentManager().getContents()))
.transform(new Function<Content, RunContentDescriptor>() {
@Override
public RunContentDescriptor apply(@Nullable Content input) {
return input != null ? input.getUserData(PythonConsoleToolWindow.CONTENT_DESCRIPTOR) : null;
}
}).filter(
Predicates.notNull()).toList();
}
return ExecutionHelper.findRunningConsole(project, new NotNullFunction<RunContentDescriptor, Boolean>() {
@NotNull
@Override
@@ -211,16 +237,20 @@ public class ExecuteInConsoleAction extends AnAction {
private static void startConsole(final Project project,
final Consumer<PyCodeExecutor> consumer,
Module context) {
//TODO
//PydevConsoleRunner runner = PydevConsoleRunner.runPythonConsole(project, context);
//runner.addConsoleListener(new PydevConsoleRunner.ConsoleListener() {
// @Override
// public void handleConsoleInitialized(LanguageConsoleView consoleView) {
// if (consoleView instanceof PyCodeExecutor) {
// consumer.consume((PyCodeExecutor)consoleView);
// }
// }
//});
ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(PythonConsoleToolWindowFactory.ID);
PydevConsoleRunner runner = PydevConsoleRunner.runPythonConsole(project, context, toolWindow != null ? PythonConsoleToolWindow
.toolWindowConsole(toolWindow)
: PydevConsoleRunner.factory());
runner.addConsoleListener(new PydevConsoleRunner.ConsoleListener() {
@Override
public void handleConsoleInitialized(LanguageConsoleView consoleView) {
if (consoleView instanceof PyCodeExecutor) {
consumer.consume((PyCodeExecutor)consoleView);
}
}
});
}
private static boolean canFindConsole(AnActionEvent e) {
@@ -1,9 +1,10 @@
package com.jetbrains.python;
package com.jetbrains.python.console;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.ui.SimpleToolWindowPanel;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
@@ -11,8 +12,6 @@ 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 com.jetbrains.python.console.PyConsoleType;
import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -25,6 +24,7 @@ import java.util.Map;
* @author traff
*/
public class PythonConsoleToolWindow {
public static final Key<RunContentDescriptor> CONTENT_DESCRIPTOR = Key.create("CONTENT_DESCRIPTOR");
private final Project myProject;
@@ -119,10 +119,11 @@ public class PythonConsoleToolWindow {
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());
content.putUserData(CONTENT_DESCRIPTOR, contentDescriptor);
}
private static FocusListener createFocusListener(final ToolWindow toolWindow) {
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python;
package com.jetbrains.python.console;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
/**
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python;
package com.jetbrains.python.console;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -26,8 +26,6 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.ui.content.Content;
import com.jetbrains.python.console.PyConsoleType;
import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;