IDEA-88111 Before Run->Another configuration: do not reuse tool window's content or allow switching between them somehow

This commit is contained in:
Vassiliy Kudryashov
2012-10-08 23:18:18 +04:00
parent cc791386cc
commit 82ec82a4f9
4 changed files with 22 additions and 7 deletions
@@ -21,6 +21,7 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.ui.content.Content;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
@@ -28,6 +29,7 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class RunContentDescriptor implements Disposable {
public static final Key<Boolean> REUSE_CONTENT_PROHIBITED = Key.create("ReuseContentProhibited");
private static final Logger LOG = Logger.getInstance("#com.intellij.execution.ui.RunContentDescriptor");
private ExecutionConsole myExecutionConsole;
@@ -133,7 +133,13 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
public void run() {
for (BeforeRunTask task : activeTasks) {
BeforeRunTaskProvider<BeforeRunTask> provider = BeforeRunTaskProvider.getProvider(myProject, task.getProviderId());
if (provider != null && !provider.executeTask(dataContext, runConfiguration, env, task)) {
if (provider == null) {
LOG.warn("Cannot find BeforeRunTaskProvider for id='" + task.getProviderId()+"'");
continue;
}
ExecutionEnvironment taskEnvironment = new ExecutionEnvironment(env.getRunProfile(), env.getProject(), null, null, null, null);
taskEnvironment.putUserData(RunContentDescriptor.REUSE_CONTENT_PROHIBITED, RunConfigurationBeforeRunProvider.ID.equals(provider.getId()));
if (!provider.executeTask(dataContext, runConfiguration, taskEnvironment, task)) {
if (onCancelRunnable != null) {
SwingUtilities.invokeLater(onCancelRunnable);
}
@@ -46,6 +46,7 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -165,6 +166,7 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
if (runner == null)
return false;
final ExecutionEnvironment environment = new ExecutionEnvironment(runner, settings, myProject);
environment.putUserData(RunContentDescriptor.REUSE_CONTENT_PROHIBITED, env.getUserData(RunContentDescriptor.REUSE_CONTENT_PROHIBITED));
if (!ExecutionTargetManager.canRun(settings, env.getExecutionTarget())) {
return false;
}
@@ -309,6 +311,13 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
mySettings = settings;
init();
myJBList.setSelectedValue(mySelectedSettings, true);
FontMetrics fontMetrics = myJBList.getFontMetrics(myJBList.getFont());
int maxWidth = fontMetrics.stringWidth("m") * 30;
for (RunnerAndConfigurationSettings setting : settings) {
maxWidth = Math.max(fontMetrics.stringWidth(setting.getConfiguration().getName()), maxWidth);
}
maxWidth += 24;//icon and gap
myJBList.setPreferredSize(new Dimension(maxWidth, myJBList.getPreferredSize().height));
}
@Override
@@ -347,7 +356,7 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
@Nullable
RunnerAndConfigurationSettings getSelectedSettings() {
return mySelectedSettings;
return isOK() ? mySelectedSettings : null;
}
}
}
@@ -18,10 +18,7 @@ package com.intellij.execution.runners;
import com.intellij.diagnostic.logging.LogConsoleManagerBase;
import com.intellij.diagnostic.logging.LogFilesManager;
import com.intellij.diagnostic.logging.OutputFileUtil;
import com.intellij.execution.DefaultExecutionResult;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.Executor;
import com.intellij.execution.*;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.impl.ConsoleViewImpl;
@@ -53,7 +50,7 @@ public class RunContentBuilder extends LogConsoleManagerBase {
private final ProgramRunner myRunner;
private final ArrayList<AnAction> myRunnerActions = new ArrayList<AnAction>();
private final boolean myReuseProhibited = false;
private boolean myReuseProhibited = false;
private ExecutionResult myExecutionResult;
private final LogFilesManager myManager;
@@ -82,6 +79,7 @@ public class RunContentBuilder extends LogConsoleManagerBase {
if (profile instanceof RunConfigurationBase) {
myManager.registerFileMatcher((RunConfigurationBase)profile);
}
myReuseProhibited = Boolean.TRUE.equals(env.getUserData(RunContentDescriptor.REUSE_CONTENT_PROHIBITED));
}
public void addAction(@NotNull final AnAction action) {