--- ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java.fix 2007-02-21 15:11:53.000000000 -0500 +++ ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java 2007-02-21 15:16:17.000000000 -0500 @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - initial API and implementation + * Red Hat Inc. - multiple build console support *******************************************************************************/ package org.eclipse.cdt.internal.ui.buildconsole; @@ -52,11 +53,14 @@ public class BuildConsoleManager impleme private Map fConsoleMap = new HashMap(); Color infoColor, outputColor, errorColor; BuildConsoleStream infoStream, outputStream, errorStream; + String fName, fSubMenuId, fContextMenuId; static public final int BUILD_STREAM_TYPE_INFO = 0; static public final int BUILD_STREAM_TYPE_OUTPUT = 1; static public final int BUILD_STREAM_TYPE_ERROR = 2; private IProject fLastProject; + + static public final String DEFAULT_CONTEXT_MENU_ID = CUIPlugin.PLUGIN_ID + ".CBuildConole"; //$NON-NLS-1$ public BuildConsoleManager() { } @@ -168,10 +172,12 @@ public class BuildConsoleManager impleme } } - public void startup() { + public void startup(String name, String id) { infoStream = new BuildConsoleStream(); outputStream = new BuildConsoleStream(); errorStream = new BuildConsoleStream(); + fName = name; + fContextMenuId = id; runUI(new Runnable() { @@ -182,7 +188,7 @@ public class BuildConsoleManager impleme */ public void run() { // install colors - fConsole = new BuildConsole(BuildConsoleManager.this); + fConsole = new BuildConsole(BuildConsoleManager.this, fName, fContextMenuId); ConsolePlugin.getDefault().getConsoleManager().addConsoles(new org.eclipse.ui.console.IConsole[]{fConsole}); infoStream.setConsole(fConsole); infoColor = createColor(CUIPlugin.getStandardDisplay(), BuildConsolePreferencePage.PREF_BUILDCONSOLE_INFO_COLOR); @@ -199,6 +205,7 @@ public class BuildConsoleManager impleme CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); } + /* * (non-Javadoc) * --- ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsole.java.fix 2007-02-21 15:12:09.000000000 -0500 +++ ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsole.java 2007-02-21 15:16:17.000000000 -0500 @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - Initial API and implementation + * Red Hat Inc. - Multiple build console support *******************************************************************************/ package org.eclipse.cdt.internal.ui.buildconsole; @@ -26,18 +27,22 @@ public class BuildConsole extends Abstra public static final String P_STREAM_COLOR = CUIPlugin.PLUGIN_ID + ".CONSOLE_P_STREAM_COLOR"; //$NON-NLS-1$ private IBuildConsoleManager fConsoleManager; + private String fConsoleName; + private String fConsoleId; - public BuildConsole(IBuildConsoleManager manager) { - super(ConsoleMessages.getString("BuildConsole.buildConsole"), CPluginImages.DESC_BUILD_CONSOLE); //$NON-NLS-1$ + public BuildConsole(IBuildConsoleManager manager, String name, String id) { + super(name, CPluginImages.DESC_BUILD_CONSOLE); fConsoleManager = manager; + fConsoleName = name; + fConsoleId = id; } public IPageBookViewPage createPage(IConsoleView view) { - return new BuildConsolePage(view, this); + return new BuildConsolePage(view, this, fConsoleId); } public void setTitle(IProject project) { - String title = ConsoleMessages.getString("BuildConsole.buildConsole"); //$NON-NLS-1$ + String title = fConsoleName; if (project != null) { title += " [" + project.getName() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } --- ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java.fix 2007-02-21 15:12:28.000000000 -0500 +++ ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java 2007-02-21 15:16:17.000000000 -0500 @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - initial API and implementation + * Red Hat Inc. - multiple build console support *******************************************************************************/ package org.eclipse.cdt.internal.ui.buildconsole; @@ -85,6 +86,7 @@ public class BuildConsolePage extends Pa private BuildConsole fConsole; private IConsoleView fConsoleView; + private String fContextMenuId; private BuildConsoleViewer fViewer; private IProject fProject; @@ -109,10 +111,13 @@ public class BuildConsolePage extends Pa /** * @param view * @param console + * @param contextId */ - public BuildConsolePage(IConsoleView view, BuildConsole console) { + public BuildConsolePage(IConsoleView view, BuildConsole console, + String contextId) { fConsole = console; fConsoleView = view; + fContextMenuId = contextId; } protected void setProject(IProject project) { @@ -187,7 +192,7 @@ public class BuildConsolePage extends Pa fMenu = manager.createContextMenu(getControl()); getControl().setMenu(fMenu); IPageSite site = getSite(); - site.registerContextMenu(CUIPlugin.PLUGIN_ID + ".CBuildConole", manager, getViewer()); //$NON-NLS-1$ + site.registerContextMenu(CUIPlugin.PLUGIN_ID + "." + fContextMenuId, manager, getViewer()); //$NON-NLS-1$ site.setSelectionProvider(getViewer()); createActions(); configureToolBar(site.getActionBars().getToolBarManager()); --- ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java.fix 2007-02-21 15:15:37.000000000 -0500 +++ ./results/plugins/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java 2007-02-21 15:16:17.000000000 -0500 @@ -14,8 +14,10 @@ package org.eclipse.cdt.ui; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Set; @@ -32,6 +34,7 @@ import org.eclipse.cdt.internal.ui.ICSta import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.ResourceAdapterFactory; import org.eclipse.cdt.internal.ui.buildconsole.BuildConsoleManager; +import org.eclipse.cdt.internal.ui.buildconsole.ConsoleMessages; import org.eclipse.cdt.internal.ui.editor.CDocumentProvider; import org.eclipse.cdt.internal.ui.editor.CustomBufferFactory; import org.eclipse.cdt.internal.ui.editor.ExternalSearchDocumentProvider; @@ -336,7 +339,7 @@ public class CUIPlugin extends AbstractU private CTextTools fTextTools; private AsmTextTools fAsmTextTools; private ProblemMarkerManager fProblemMarkerManager; - private BuildConsoleManager fBuildConsoleManager; + private Map fBuildConsoleManagers; private ResourceAdapterFactory fResourceAdapterFactory; private CElementAdapterFactory fCElementAdapterFactory; @@ -356,7 +359,8 @@ public class CUIPlugin extends AbstractU public CUIPlugin() { fgCPlugin = this; fDocumentProvider = null; - fTextTools = null; + fTextTools = null; + fBuildConsoleManagers = new HashMap(); } /** @@ -408,12 +412,28 @@ public class CUIPlugin extends AbstractU return fAsmTextTools; } + /** + * Return the default console manager. + * @return IBuildConsoleManager + */ public IBuildConsoleManager getConsoleManager() { - if ( fBuildConsoleManager == null ) { - fBuildConsoleManager = new BuildConsoleManager(); - fBuildConsoleManager.startup(); + return getConsoleManager(ConsoleMessages.getString("BuildConsole.buildConsole"), BuildConsoleManager.DEFAULT_CONTEXT_MENU_ID); //$NON-NLS-1$ + } + + /** + * Return a console manager specified by id. + * @param name console name + * @param id console id + * @return IBuildConsoleManager + */ + public IBuildConsoleManager getConsoleManager(String name, String id) { + BuildConsoleManager manager = (BuildConsoleManager)fBuildConsoleManagers.get(id); + if (manager == null ) { + manager = new BuildConsoleManager(); + fBuildConsoleManagers.put(id, manager); + manager.startup(name, id); } - return fBuildConsoleManager; + return manager; } /* (non-Javadoc) @@ -443,9 +463,15 @@ public class CUIPlugin extends AbstractU } if (fImageDescriptorRegistry != null) fImageDescriptorRegistry.dispose(); - if ( fBuildConsoleManager != null ) { - fBuildConsoleManager.shutdown(); - fBuildConsoleManager = null; + + if (fBuildConsoleManagers != null ) { + Object[] bcm = fBuildConsoleManagers.values().toArray(); + for (int i = 0; i < bcm.length; ++i) { + BuildConsoleManager m = (BuildConsoleManager)bcm[i]; + if (m != null) + m.shutdown(); + } + fBuildConsoleManagers.clear(); } unregisterAdapters();