### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.workbench Index: Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java,v retrieving revision 1.1 diff -u -r1.1 ActionElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java 23 Nov 2006 20:51:01 -0000 @@ -26,7 +26,8 @@ private ActionContributionItem item; - /* package */ActionElement(ActionContributionItem item) { + /* package */ActionElement(ActionContributionItem item, ActionProvider actionProvider) { + super(actionProvider); this.item = item; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java,v retrieving revision 1.1 diff -u -r1.1 ActionProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java 23 Nov 2006 20:51:01 -0000 @@ -56,7 +56,7 @@ .toArray(new ActionContributionItem[result.size()]); cachedElements = new AbstractElement[actions.length]; for (int i = 0; i < actions.length; i++) { - ActionElement actionElement = new ActionElement(actions[i]); + ActionElement actionElement = new ActionElement(actions[i], this); cachedElements[i] = actionElement; idToElement.put(actionElement.getId(), actionElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java,v retrieving revision 1.1 diff -u -r1.1 EditorElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java 23 Nov 2006 20:51:01 -0000 @@ -29,7 +29,8 @@ private IEditorReference editorReference; - /* package */EditorElement(IEditorReference editorReference) { + /* package */EditorElement(IEditorReference editorReference, EditorProvider editorProvider) { + super(editorProvider); this.editorReference = editorReference; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java,v retrieving revision 1.1 diff -u -r1.1 EditorProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java 23 Nov 2006 20:51:01 -0000 @@ -42,7 +42,7 @@ IEditorReference[] editors = activePage.getEditorReferences(); cachedElements = new AbstractElement[editors.length]; for (int i = 0; i < editors.length; i++) { - EditorElement editorElement = new EditorElement(editors[i]); + EditorElement editorElement = new EditorElement(editors[i], this); cachedElements[i] = editorElement; idToElement.put(editorElement.getId(), editorElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java,v retrieving revision 1.1 diff -u -r1.1 PreferenceElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java 23 Nov 2006 20:51:01 -0000 @@ -29,7 +29,8 @@ private IPreferenceNode preferenceNode; - /* package */PreferenceElement(IPreferenceNode preferenceNode) { + /* package */PreferenceElement(IPreferenceNode preferenceNode, PreferenceProvider preferenceProvider) { + super(preferenceProvider); this.preferenceNode = preferenceNode; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java,v retrieving revision 1.1 diff -u -r1.1 CommandProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java 23 Nov 2006 20:51:01 -0000 @@ -61,7 +61,7 @@ .toArray(new ParameterizedCommand[commandSet.size()]); cachedElements = new AbstractElement[commands.length]; for (int i = 0; i < commands.length; i++) { - CommandElement commandElement = new CommandElement(commands[i]); + CommandElement commandElement = new CommandElement(commands[i], this); cachedElements[i] = commandElement; idToElement.put(commandElement.getId(), commandElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java,v retrieving revision 1.1 diff -u -r1.1 WizardElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java 23 Nov 2006 20:51:01 -0000 @@ -27,7 +27,8 @@ private IWizardDescriptor wizardDescriptor; - /* package */WizardElement(IWizardDescriptor wizardDescriptor) { + /* package */WizardElement(IWizardDescriptor wizardDescriptor, WizardProvider wizardProvider) { + super(wizardProvider); this.wizardDescriptor = wizardDescriptor; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java,v retrieving revision 1.1 diff -u -r1.1 ViewProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java 23 Nov 2006 20:51:01 -0000 @@ -44,7 +44,7 @@ .getViewRegistry().getViews(); cachedElements = new AbstractElement[views.length]; for (int i = 0; i < views.length; i++) { - ViewElement viewElement = new ViewElement(views[i]); + ViewElement viewElement = new ViewElement(views[i], this); cachedElements[i] = viewElement; idToElement.put(viewElement.getId(), viewElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java,v retrieving revision 1.1 diff -u -r1.1 PerspectiveElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java 23 Nov 2006 20:51:01 -0000 @@ -24,7 +24,8 @@ private final IPerspectiveDescriptor descriptor; - /* package */PerspectiveElement(IPerspectiveDescriptor descriptor) { + /* package */PerspectiveElement(IPerspectiveDescriptor descriptor, PerspectiveProvider perspectiveProvider) { + super(perspectiveProvider); this.descriptor = descriptor; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java,v retrieving revision 1.1 diff -u -r1.1 ViewElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java 23 Nov 2006 20:51:01 -0000 @@ -25,7 +25,8 @@ private final IViewDescriptor viewDescriptor; - /* package */ViewElement(IViewDescriptor viewDescriptor) { + /* package */ViewElement(IViewDescriptor viewDescriptor, ViewProvider viewProvider) { + super(viewProvider); this.viewDescriptor = viewDescriptor; } Index: Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java,v retrieving revision 1.12 diff -u -r1.12 CtrlEAction.java --- Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java 22 Nov 2006 21:43:12 -0000 1.12 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java 23 Nov 2006 20:51:01 -0000 @@ -1,9 +1,9 @@ package org.eclipse.ui.internal.incubator; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedList; import java.util.Map; - import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.jface.dialogs.IDialogSettings; @@ -50,7 +50,18 @@ protected Map reverseMap = new HashMap(); private LinkedList previousPicksList = new LinkedList(); - + + protected AbstractProvider[] providers; + protected PreviousPicksProvider previousPicksProvider; + protected EditorProvider editorProvider; + protected ViewProvider viewProvider; + protected PerspectiveProvider perspectiveProvider; + protected CommandProvider commandProvider; + protected ActionProvider actionProvider; + protected WizardProvider wizardProvider; + protected PreferenceProvider preferenceProvider; + protected Map providerMap; + /** * The constructor. */ @@ -64,11 +75,18 @@ return null; } - AbstractProvider[] providers = { new PreviousPicksProvider(), - new EditorProvider(), new ViewProvider(), - new PerspectiveProvider(), new CommandProvider(), - new ActionProvider(), new WizardProvider(), - new PreferenceProvider() }; + if(providers == null) { + providers = new AbstractProvider[]{ previousPicksProvider = new PreviousPicksProvider(), + editorProvider = new EditorProvider(), viewProvider = new ViewProvider(), + perspectiveProvider = new PerspectiveProvider(), commandProvider = new CommandProvider(), + actionProvider = new ActionProvider(), wizardProvider = new WizardProvider(), + preferenceProvider = new PreferenceProvider() }; + + providerMap = new HashMap(); + for (int i = 0; i < providers.length; i++) { + providerMap.put(providers[i].getId(), providers[i]); + } + } FilteringInfoPopup popup = new MyInfoPopup(ProgressManagerUtil .getDefaultParent(), providers); @@ -153,7 +171,7 @@ } else if (element instanceof AbstractElement) { AbstractElement abstractElement = (AbstractElement) element; return abstractElement.getSortLabel(); - } + } return ""; //$NON-NLS-1$ } @@ -197,26 +215,31 @@ } private void storeDialog(IDialogSettings dialogSettings) { - String[] idArray = new String[previousPicksList.size()]; - String[] textArray = new String[previousPicksList.size()]; - for(int i = 0; i < idArray.length; i++) { - Object element = previousPicksList.get(i); - if(element instanceof AbstractElement) { + String[] idArray = new String[previousPicksMap.size()]; + String[] textArray = new String[previousPicksMap.size()]; + String[] providerArray = new String[previousPicksMap.size()]; + int counter = 0; + for (Iterator iterator = previousPicksList.iterator(); iterator.hasNext();) { + Object element = iterator.next(); + if(element instanceof AbstractElement && reverseMap.containsKey(element) && previousPicksMap.containsValue(element)) { AbstractElement abstractElement = (AbstractElement) element; - idArray[i] = abstractElement.getId(); - textArray[i] = (String) reverseMap.get(element); - } - } + idArray[counter] = abstractElement.getId(); + textArray[counter] = (String) reverseMap.get(element); + providerArray[counter] = abstractElement.getProvider().getId(); + counter++; + } + } dialogSettings.put("idArray", idArray); //$NON-NLS-1$ dialogSettings.put("textArray", textArray); //$NON-NLS-1$ + dialogSettings.put("providerArray", providerArray); //$NON-NLS-1$ } protected void handleElementSelected(Object selectedElement) { - addPreviousPick(selectedElement); - storeDialog(getDialogSettings()); IWorkbenchPage activePage = window.getActivePage(); if (activePage != null) { if (selectedElement instanceof AbstractElement) { + addPreviousPick(selectedElement); + storeDialog(getDialogSettings()); AbstractElement element = (AbstractElement) selectedElement; element.execute(); } @@ -228,18 +251,20 @@ if(dialogSettings != null) { String[] idArray = dialogSettings.getArray("idArray"); //$NON-NLS-1$ String[] textArray = dialogSettings.getArray("textArray"); //$NON-NLS-1$ - if(idArray != null && idArray.length > 0 && textArray != null && textArray.length > 0) { + String[] providerArray = dialogSettings.getArray("providerArray"); //$NON-NLS-1$ + if(idArray != null && idArray.length > 0 && textArray != null && textArray.length > 0 && providerArray != null && providerArray.length > 0) { Map newMap = new HashMap(); Map newReverseMap = new HashMap(); LinkedList newList = new LinkedList(); - for(int i = 0; i < idArray.length; i++) { - for(int j = 0; j < providers.length; j++) { - AbstractElement element = providers[j].getElementForId(idArray[i]); + for(int i = 0; i < providerArray.length; i++) { + AbstractElement element = null; + AbstractProvider provider = (AbstractProvider) providerMap.get(providerArray[i]); + if(provider != null) { + element = provider.getElementForId(idArray[i]); if(element != null) { newList.add(element); newMap.put(textArray[i], element); newReverseMap.put(element, textArray[i]); - break; } } } Index: Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java,v retrieving revision 1.1 diff -u -r1.1 WizardProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java 23 Nov 2006 20:51:01 -0000 @@ -48,7 +48,7 @@ .toArray(new IWizardDescriptor[result.size()]); cachedElements = new AbstractElement[wizards.length]; for (int i = 0; i < wizards.length; i++) { - WizardElement wizardElement = new WizardElement(wizards[i]); + WizardElement wizardElement = new WizardElement(wizards[i], this); cachedElements[i] = wizardElement; idToElement.put(wizardElement.getId(), wizardElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java,v retrieving revision 1.1 diff -u -r1.1 AbstractElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java 23 Nov 2006 20:51:01 -0000 @@ -19,6 +19,16 @@ */ public abstract class AbstractElement { + private AbstractProvider provider; + + /** + * @param provider + */ + public AbstractElement(AbstractProvider provider) { + super(); + this.provider = provider; + } + /** * Returns the label to be displayed to the user. * @@ -54,4 +64,11 @@ public String getSortLabel() { return getLabel(); } + + /** + * @return Returns the provider. + */ + public AbstractProvider getProvider() { + return provider; + } } Index: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java,v retrieving revision 1.1 diff -u -r1.1 PerspectiveProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java 23 Nov 2006 20:51:01 -0000 @@ -45,7 +45,7 @@ cachedElements = new AbstractElement[perspectives.length]; for (int i = 0; i < perspectives.length; i++) { PerspectiveElement perspectiveElement = new PerspectiveElement( - perspectives[i]); + perspectives[i], this); cachedElements[i] = perspectiveElement; idToElement.put(perspectiveElement.getId(), perspectiveElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java,v retrieving revision 1.1 diff -u -r1.1 PreferenceProvider.java --- Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java 23 Nov 2006 20:51:01 -0000 @@ -50,7 +50,7 @@ cachedElements = new AbstractElement[preferences.length]; for (int i = 0; i < preferences.length; i++) { PreferenceElement preferenceElement = new PreferenceElement( - preferences[i]); + preferences[i], this); cachedElements[i] = preferenceElement; idToElement.put(preferenceElement.getId(), preferenceElement); } Index: Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java,v retrieving revision 1.1 diff -u -r1.1 CommandElement.java --- Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java 22 Nov 2006 21:43:12 -0000 1.1 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java 23 Nov 2006 20:51:01 -0000 @@ -32,7 +32,8 @@ private ParameterizedCommand command; - /* package */CommandElement(ParameterizedCommand command) { + /* package */CommandElement(ParameterizedCommand command, CommandProvider commandProvider) { + super(commandProvider); this.command = command; }