IDEADEV-38479 Show run configuration's icon in "Run"-window

This commit is contained in:
Alexey Pegov
2009-11-23 17:37:05 +03:00
parent 603f41b08d
commit 48d0c92cd0
13 changed files with 80 additions and 21 deletions
@@ -33,11 +33,12 @@ import com.intellij.execution.configurations.RemoteState;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.RunContentListener;
import com.intellij.execution.ui.RunContentManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.colors.EditorColorsListener;
@@ -45,7 +46,6 @@ import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.Disposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -121,7 +121,7 @@ public class DebuggerPanelsManager implements ProjectComponent {
debugProcess.putUserData(BatchEvaluator.REMOTE_SESSION_KEY, Boolean.TRUE);
}
final DebuggerSessionTab sessionTab = new DebuggerSessionTab(myProject, debuggerSession.getSessionName());
final DebuggerSessionTab sessionTab = new DebuggerSessionTab(myProject, debuggerSession.getSessionName(), environment.getRunProfile().getIcon());
Disposer.register(myProject, sessionTab);
RunContentDescriptor runContentDescriptor =
sessionTab.attachToSession(debuggerSession, runner, environment);
@@ -99,10 +99,12 @@ public class DebuggerSessionTab extends DebuggerLogConsoleManagerBase implements
public static final String BREAKPOINT_CONDITION = "breakpoint";
private final ThreadsPanel myThreadsPanel;
private static final String THREAD_DUMP_CONTENT_PREFIX = "Dump";
private Icon myIcon;
public DebuggerSessionTab(Project project, String sessionName) {
public DebuggerSessionTab(final Project project, final String sessionName, @Nullable final Icon icon) {
super(project);
myIcon = icon;
myUi = RunnerLayoutUi.Factory.getInstance(project).create("JavaDebugger", DebuggerBundle.message("title.generic.debug.dialog"), sessionName, this);
@@ -253,7 +255,7 @@ public class DebuggerSessionTab extends DebuggerLogConsoleManagerBase implements
private RunContentDescriptor initUI(ExecutionResult executionResult) {
myConsole = executionResult.getExecutionConsole();
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName());
myRunContentDescriptor = new RunContentDescriptor(myConsole, executionResult.getProcessHandler(), myUi.getComponent(), getSessionName(), myIcon);
if (ApplicationManager.getApplication().isUnitTestMode()) {
return myRunContentDescriptor;
@@ -34,6 +34,8 @@ import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* @author spleaner
*/
@@ -41,14 +43,14 @@ public class JavaExecutionUtil {
private JavaExecutionUtil() {
}
public static boolean executeRun(@NotNull final Project project, String contentName,
public static boolean executeRun(@NotNull final Project project, String contentName, Icon icon,
final DataContext dataContext) throws ExecutionException {
return executeRun(project, contentName, dataContext, null);
return executeRun(project, contentName, icon, dataContext, null);
}
public static boolean executeRun(@NotNull final Project project, String contentName, DataContext dataContext, Filter[] filters) throws ExecutionException {
public static boolean executeRun(@NotNull final Project project, String contentName, Icon icon, DataContext dataContext, Filter[] filters) throws ExecutionException {
final JavaParameters cmdLine = JavaParameters.JAVA_PARAMETERS.getData(dataContext);
final DefaultRunProfile profile = new DefaultRunProfile(project, cmdLine, contentName, filters);
final DefaultRunProfile profile = new DefaultRunProfile(project, cmdLine, contentName, icon, filters);
final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(DefaultRunExecutor.EXECUTOR_ID, profile);
if (runner != null) {
runner.execute(DefaultRunExecutor.getRunExecutorInstance(), new ExecutionEnvironment(profile, dataContext));
@@ -63,12 +65,18 @@ public class JavaExecutionUtil {
private final String myContentName;
private final Filter[] myFilters;
private final Project myProject;
private Icon myIcon;
public DefaultRunProfile(final Project project, final JavaParameters parameters, String contentName, Filter[] filters) {
public DefaultRunProfile(final Project project, final JavaParameters parameters, final String contentName, final Icon icon, Filter[] filters) {
myProject = project;
myParameters = parameters;
myContentName = contentName;
myFilters = filters;
myIcon = icon;
}
public Icon getIcon() {
return myIcon;
}
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
@@ -49,6 +49,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
@@ -117,6 +118,10 @@ public class JavadocConfiguration implements ModuleRunProfile, JDOMExternalizabl
return new JavadocConfigurable(this);
}
public Icon getIcon() {
return null;
}
@NotNull
public Module[] getModules() {
return Module.EMPTY_ARRAY;
@@ -27,6 +27,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
@@ -42,11 +43,13 @@ public abstract class RunConfigurationBase extends UserDataHolderBase implements
private ArrayList<PredefinedLogFile> myPredefinedLogFiles = new ArrayList<PredefinedLogFile>();
@NonNls private static final String LOG_FILE = "log_file";
@NonNls private static final String PREDEFINED_LOG_FILE_ELEMENT = "predefined_log_file";
private Icon myIcon;
protected RunConfigurationBase(Project project, ConfigurationFactory factory, String name) {
protected RunConfigurationBase(final Project project, final ConfigurationFactory factory, final String name) {
myProject = project;
myFactory = factory;
myName = name;
myIcon = factory.getIcon();
}
public int getUniqueID() {
@@ -70,6 +73,10 @@ public abstract class RunConfigurationBase extends UserDataHolderBase implements
return myFactory.getType();
}
public Icon getIcon() {
return myIcon;
}
public final String getName() {
return myName;
}
@@ -21,6 +21,8 @@ import com.intellij.execution.runners.ExecutionEnvironment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public interface RunProfile {
/**
* todo - javadoc
@@ -30,6 +32,9 @@ public interface RunProfile {
String getName();
@Nullable
Icon getIcon();
void checkConfiguration() throws RuntimeConfigurationException;
}
@@ -24,6 +24,8 @@ import com.intellij.openapi.util.JDOMExternalizable;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public abstract class RuntimeConfiguration extends RunConfigurationBase implements LocatableConfiguration, Cloneable, ModuleRunConfiguration {
protected RuntimeConfiguration(final String name, final Project project, final ConfigurationFactory factory) {
super(project, factory, name);
@@ -29,6 +29,7 @@ import com.intellij.openapi.util.WriteExternalException;
import org.jdom.Attribute;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.List;
@@ -55,6 +56,11 @@ public class UnknownRunConfiguration implements RunConfiguration {
myDoNotStore = b;
}
@Nullable
public Icon getIcon() {
return null;
}
public boolean isDoNotStore() {
return myDoNotStore;
}
@@ -34,18 +34,21 @@ public class RunContentDescriptor {
private final ProcessHandler myProcessHandler;
private final JComponent myComponent;
private final String myDisplayName;
private final Icon myIcon;
/**
* Used to hack {@link com.intellij.execution.runners.RestartAction}
*/
private Content myContent;
public RunContentDescriptor(final ExecutionConsole executionConsole,
final ProcessHandler processHandler, final JComponent component, final String displayName) {
final ProcessHandler processHandler, final JComponent component, final String displayName, final Icon icon) {
LOG.assertTrue(executionConsole != null || ApplicationManager.getApplication().isUnitTestMode());
myExecutionConsole = executionConsole;
myProcessHandler = processHandler;
myComponent = component;
myDisplayName = displayName;
myIcon = icon;
myComponent.putClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER, new DataProvider() {
public Object getData(@NonNls final String dataId) {
@@ -55,7 +58,11 @@ public class RunContentDescriptor {
return null;
}
});
}
public RunContentDescriptor(final ExecutionConsole executionConsole,
final ProcessHandler processHandler, final JComponent component, final String displayName) {
this(executionConsole, processHandler, component, displayName, null);
}
public ExecutionConsole getExecutionConsole() {
@@ -66,6 +73,11 @@ public class RunContentDescriptor {
Disposer.dispose(myExecutionConsole);
}
@Nullable
public Icon getIcon() {
return myIcon;
}
@Nullable
public ProcessHandler getProcessHandler() {
return myProcessHandler;
@@ -276,7 +276,7 @@ public class RunContentBuilder implements LogConsoleManager, Disposable {
private final Disposable[] myAdditionalDisposables;
public MyRunContentDescriptor(final RunProfile profile, final ExecutionResult executionResult, final boolean reuseProhibited, final JComponent component, final Disposable... additionalDisposables) {
super(executionResult.getExecutionConsole(), executionResult.getProcessHandler(), component, profile.getName());
super(executionResult.getExecutionConsole(), executionResult.getProcessHandler(), component, profile.getName(), profile.getIcon());
myReuseProhibited = reuseProhibited;
myAdditionalDisposables = additionalDisposables;
}
@@ -15,10 +15,7 @@
*/
package com.intellij.execution.ui;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.Executor;
import com.intellij.execution.ExecutorRegistry;
import com.intellij.execution.TerminateRemoteProcessDialog;
import com.intellij.execution.*;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
@@ -39,6 +36,7 @@ import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ProjectManagerListener;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
@@ -47,6 +45,7 @@ import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
import com.intellij.ui.content.*;
import com.intellij.util.EventDispatcher;
import com.intellij.util.IconUtil;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NotNull;
@@ -249,7 +248,7 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
public void showRunContent(@NotNull final Executor executor, final RunContentDescriptor descriptor) {
if(ApplicationManager.getApplication().isUnitTestMode()) return;
final ContentManager contentManager = getContentManagerForRunner(executor);
final ContentManager contentManager = getContentManagerForRunner(executor);
RunContentDescriptor oldDescriptor = chooseReuseContentForDescriptor(contentManager, descriptor);
final Content content;
@@ -261,7 +260,8 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
}
else {
content = createNewContent(contentManager, descriptor, executor.getToolWindowId());
content.setIcon(executor.getToolWindowIcon());
final Icon icon = descriptor.getIcon();
content.setIcon(icon == null ? executor.getToolWindowIcon() : icon);
}
content.setComponent(descriptor.getComponent());
@@ -272,7 +272,8 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
public void startNotified(final ProcessEvent event) {
LaterInvocator.invokeLater(new Runnable() {
public void run() {
content.setIcon(executor.getToolWindowIcon());
final Icon icon = descriptor.getIcon();
content.setIcon(icon == null ? executor.getToolWindowIcon() : icon);
}
});
}
@@ -280,7 +281,8 @@ public class RunContentManagerImpl implements RunContentManager, Disposable {
public void processTerminated(final ProcessEvent event) {
LaterInvocator.invokeLater(new Runnable() {
public void run() {
content.setIcon(executor.getDisabledIcon());
final Icon icon = descriptor.getIcon();
content.setIcon(icon == null ? executor.getDisabledIcon() : IconLoader.getTransparentIcon(icon));
}
});
}
@@ -35,6 +35,8 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* @author Eugene Zhuravlev
* Date: Mar 30, 2005
@@ -57,6 +59,10 @@ public class ToolRunProfile implements ModuleRunProfile{
return myTool.getName();
}
public Icon getIcon() {
return null;
}
public void checkConfiguration() throws RuntimeConfigurationException {
}
@@ -321,6 +321,10 @@ public final class PreviewFormAction extends AnAction{
myStatusbarMessage = statusbarMessage;
}
public Icon getIcon() {
return null;
}
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
final JavaCommandLineState state = new JavaCommandLineState(env) {
protected JavaParameters createJavaParameters() {