From 48d0c92cd0167bc99055fbf8024bb9f5dcde92be Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Mon, 23 Nov 2009 17:37:05 +0300 Subject: [PATCH] IDEADEV-38479 Show run configuration's icon in "Run"-window --- .../intellij/debugger/ui/DebuggerPanelsManager.java | 6 +++--- .../com/intellij/debugger/ui/DebuggerSessionTab.java | 6 ++++-- .../src/com/intellij/execution/JavaExecutionUtil.java | 18 +++++++++++++----- .../src/com/intellij/javadoc/JavadocConfiguration.java | 5 +++++ .../execution/configurations/RunConfigurationBase.java | 9 ++++++++- .../intellij/execution/configurations/RunProfile.java | 5 +++++ .../execution/configurations/RuntimeConfiguration.java | 2 ++ .../configurations/UnknownRunConfiguration.java | 6 ++++++ .../intellij/execution/ui/RunContentDescriptor.java | 14 +++++++++++++- .../intellij/execution/runners/RunContentBuilder.java | 2 +- .../intellij/execution/ui/RunContentManagerImpl.java | 18 ++++++++++-------- .../src/com/intellij/tools/ToolRunProfile.java | 6 ++++++ .../intellij/uiDesigner/actions/PreviewFormAction.java | 4 ++++ 13 files changed, 80 insertions(+), 21 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java index 404f77cd6c..99b914cceb 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java @@ -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); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java index 3fc61b33e3..1e155c2326 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java @@ -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; diff --git a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java index c1b77a81db..493d50a78c 100644 --- a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java +++ b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java @@ -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 { diff --git a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java index 06801b1228..aa616ec473 100644 --- a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java +++ b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java @@ -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; diff --git a/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java b/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java index 255ecfaa63..fa4742cdfd 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java @@ -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 myPredefinedLogFiles = new ArrayList(); @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; } diff --git a/platform/lang-api/src/com/intellij/execution/configurations/RunProfile.java b/platform/lang-api/src/com/intellij/execution/configurations/RunProfile.java index ed3d4cf18a..43c2252146 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/RunProfile.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/RunProfile.java @@ -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; } diff --git a/platform/lang-api/src/com/intellij/execution/configurations/RuntimeConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/RuntimeConfiguration.java index ab0a5d7812..cdaa7ecd26 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/RuntimeConfiguration.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/RuntimeConfiguration.java @@ -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); diff --git a/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java index 763a35ad68..47d3c250c2 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java @@ -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; } diff --git a/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java b/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java index 67365ce917..52a6176dc1 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java +++ b/platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java @@ -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() { @@ -67,6 +74,11 @@ public class RunContentDescriptor { } @Nullable + public Icon getIcon() { + return myIcon; + } + + @Nullable public ProcessHandler getProcessHandler() { return myProcessHandler; } diff --git a/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java b/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java index 67acdb0c06..c6102811bb 100644 --- a/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java +++ b/platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java @@ -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; } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java index 2b4305c5aa..0d98f59dd3 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java @@ -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)); } }); } diff --git a/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java b/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java index 1ba20a8ae7..f4e1b2366b 100644 --- a/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java +++ b/platform/lang-impl/src/com/intellij/tools/ToolRunProfile.java @@ -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 { } diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/PreviewFormAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/PreviewFormAction.java index a48421be7f..c89fdb30fd 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/PreviewFormAction.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/PreviewFormAction.java @@ -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() { -- 2.11.4.GIT