### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.workbench 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.11 diff -u -r1.11 CtrlEAction.java --- Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java 15 Nov 2006 17:18:40 -0000 1.11 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CtrlEAction.java 22 Nov 2006 19:59:32 -0000 @@ -1,41 +1,16 @@ package org.eclipse.ui.internal.incubator; -import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; -import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.Command; import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.NotEnabledException; -import org.eclipse.core.commands.NotHandledException; -import org.eclipse.core.commands.ParameterizedCommand; -import org.eclipse.core.commands.common.NotDefinedException; -import org.eclipse.jface.action.ActionContributionItem; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IContributionItem; -import org.eclipse.jface.action.LegacyActionTools; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.SubContributionItem; -import org.eclipse.jface.bindings.Binding; import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.preference.IPreferenceNode; -import org.eclipse.jface.preference.IPreferencePage; -import org.eclipse.jface.preference.PreferenceManager; -import org.eclipse.jface.preference.PreferenceNode; import org.eclipse.jface.resource.DeviceResourceException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; -import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; @@ -51,26 +26,13 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.internal.IWorkbenchGraphicConstants; import org.eclipse.ui.internal.WorkbenchImages; import org.eclipse.ui.internal.WorkbenchPlugin; -import org.eclipse.ui.internal.WorkbenchWindow; -import org.eclipse.ui.internal.actions.NewWizardShortcutAction; -import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog; -import org.eclipse.ui.internal.keys.BindingService; import org.eclipse.ui.internal.progress.ProgressManagerUtil; -import org.eclipse.ui.keys.IBindingService; -import org.eclipse.ui.views.IViewDescriptor; -import org.eclipse.ui.wizards.IWizardCategory; -import org.eclipse.ui.wizards.IWizardDescriptor; /** * Experimental Action for search-based navigation to UI elements such as @@ -79,13 +41,13 @@ */ public class CtrlEAction extends AbstractHandler { - private static final String DIRTY_MARK = "*"; //$NON-NLS-1$ - private IWorkbenchWindow window; protected String rememberedText; - + protected Map previousPicksMap = new HashMap(); + + protected Map reverseMap = new HashMap(); private LinkedList previousPicksList = new LinkedList(); @@ -98,23 +60,19 @@ public Object execute(ExecutionEvent executionEvent) { // need to get commands here because opening the popup changes which // commands are "handled" - BindingService bindingService = (BindingService) PlatformUI - .getWorkbench().getService(IBindingService.class); - Binding[] bindings = bindingService.getBindings(); - SortedSet commands = new TreeSet(); - for (int i = 0; i < bindings.length; i++) { - Binding binding = bindings[i]; - ParameterizedCommand command = binding.getParameterizedCommand(); - if (command != null && command.getCommand().isHandled()) { - commands.add(command); - } - } + + AbstractProvider[] providers = { new PreviousPicksProvider(), + new EditorProvider(), new ViewProvider(), + new PerspectiveProvider(), new CommandProvider(), + new ActionProvider(), new WizardProvider(), + new PreferenceProvider() }; window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window == null) { return null; } - FilteringInfoPopup popup = new MyInfoPopup(ProgressManagerUtil.getDefaultParent(), commands); + FilteringInfoPopup popup = new MyInfoPopup(ProgressManagerUtil + .getDefaultParent(), providers); popup.setInput(new Object()); TreeItem[] rootItems = ((Tree) popup.getTreeViewer().getControl()) .getItems(); @@ -128,10 +86,10 @@ private final static class QuickAccessTreeSorter extends TreePathViewerSorter { public int compare(Viewer viewer, Object e1, Object e2) { - ILabelProvider labelProvider = (ILabelProvider) ((TreeViewer) viewer) - .getLabelProvider(); - String name1 = stripDirtyIndicator(labelProvider.getText(e1)); - String name2 = stripDirtyIndicator(labelProvider.getText(e2)); + AbstractElement element1 = (AbstractElement) e1; + AbstractElement element2 = (AbstractElement) e2; + String name1 = element1.getSortLabel(); + String name2 = element2.getSortLabel(); return getComparator().compare(name1, name2); } @@ -140,10 +98,9 @@ return; } Object parent = parentPath.getLastSegment(); - if (parent instanceof Node) { - Node node = (Node) parent; - // TODO replace with a proper check - if (node.name.equals(IncubatorMessages.CtrlEAction_Previous)) { + if (parent instanceof AbstractProvider) { + AbstractProvider provider = (AbstractProvider) parent; + if (provider instanceof PreviousPicksProvider) { return; } } @@ -156,18 +113,20 @@ * */ private final class MyInfoPopup extends FilteringInfoPopup { - private SortedSet commands; + AbstractProvider[] providers; + /** * @param shell - * @param commands + * @param providers */ - public MyInfoPopup(Shell shell, SortedSet commands) { + public MyInfoPopup(Shell shell, AbstractProvider[] providers) { super(shell, SWT.RESIZE, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE, false); - MyInfoPopup.this.commands = commands; - getTreeViewer().setContentProvider( - new MyContentProvider(MyInfoPopup.this.commands)); + this.providers = providers; + restoreDialog(); + getTreeViewer() + .setContentProvider(new MyContentProvider(providers)); } protected TreeViewer createTreeViewer(Composite parent, int style) { @@ -176,7 +135,7 @@ viewer.setComparator(new QuickAccessTreeSorter()); return viewer; } - + protected void selectFirstMatch() { String text = getFilterText().getText(); Object element = previousPicksMap.get(text); @@ -187,10 +146,16 @@ } super.selectFirstMatch(); } - + protected String getMatchName(Object element) { - String name = ((ILabelProvider) getTreeViewer().getLabelProvider()).getText(element); - return stripDirtyIndicator(name); + if (element instanceof AbstractProvider) { + AbstractProvider provider = (AbstractProvider) element; + return provider.getName(); + } else if (element instanceof AbstractElement) { + AbstractElement abstractElement = (AbstractElement) element; + return abstractElement.getSortLabel(); + } + return ""; //$NON-NLS-1$ } protected Point getInitialSize() { @@ -232,66 +197,56 @@ return super.close(); } + 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) { + AbstractElement abstractElement = (AbstractElement) element; + idArray[i] = abstractElement.getId(); + textArray[i] = (String) reverseMap.get(element); + } + } + dialogSettings.put("idArray", idArray); //$NON-NLS-1$ + dialogSettings.put("textArray", textArray); //$NON-NLS-1$ + } + protected void handleElementSelected(Object selectedElement) { addPreviousPick(selectedElement); + storeDialog(getDialogSettings()); IWorkbenchPage activePage = window.getActivePage(); if (activePage != null) { - if (selectedElement instanceof IViewDescriptor) { - IViewDescriptor viewDescriptor = (IViewDescriptor) selectedElement; - try { - activePage.showView(viewDescriptor.getId()); - return; - } catch (PartInitException e) { - } - } - if (selectedElement instanceof IPerspectiveDescriptor) { - IPerspectiveDescriptor perspectiveDescriptor = (IPerspectiveDescriptor) selectedElement; - activePage.setPerspective(perspectiveDescriptor); - } - if (selectedElement instanceof IEditorReference) { - IEditorReference editorReference = (IEditorReference) selectedElement; - IWorkbenchPart part = editorReference.getPart(true); - if (part != null) { - activePage.activate(part); - } - return; + if (selectedElement instanceof AbstractElement) { + AbstractElement element = (AbstractElement) selectedElement; + element.execute(); } - if (selectedElement instanceof PreferenceNode) { - PreferenceNode preferenceNode = (PreferenceNode) selectedElement; - WorkbenchPreferenceDialog dialog = WorkbenchPreferenceDialog - .createDialogOn(window.getShell(), preferenceNode - .getId()); - dialog.open(); - return; - } - if (selectedElement instanceof IWizardDescriptor) { - IWizardDescriptor wizardDescriptor = (IWizardDescriptor) selectedElement; - NewWizardShortcutAction wizardAction = new NewWizardShortcutAction( - window, wizardDescriptor); - wizardAction.run(); - return; - } - if (selectedElement instanceof ParameterizedCommand) { - IHandlerService handlerService = (IHandlerService) window - .getWorkbench().getService(IHandlerService.class); - ParameterizedCommand command = (ParameterizedCommand) selectedElement; - try { - handlerService.executeCommand(command, null); - } catch (ExecutionException e) { - e.printStackTrace(); - } catch (NotDefinedException e) { - e.printStackTrace(); - } catch (NotEnabledException e) { - e.printStackTrace(); - } catch (NotHandledException e) { - e.printStackTrace(); + } + } + + public void restoreDialog() { + IDialogSettings dialogSettings = getDialogSettings(); + 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) { + 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]); + if(element != null) { + newList.add(element); + newMap.put(textArray[i], element); + newReverseMap.put(element, textArray[i]); + break; + } + } } - return; - } - if (selectedElement instanceof ActionContributionItem) { - ActionContributionItem item = (ActionContributionItem) selectedElement; - item.getAction().run(); - return; + previousPicksMap = newMap; + reverseMap = newReverseMap; + previousPicksList = newList; } } } @@ -302,131 +257,32 @@ } } - private static class Node { - private String name; - - private String imageId; - - Node(String name, String imageId) { - this.name = name; - this.imageId = imageId; - } - - public String toString() { - return name; - } - - /** - * @return - */ - public String getImageId() { - return imageId; - } - } - private final class MyContentProvider implements ITreeContentProvider { private Object input; - - private Node previousNode = new Node( - IncubatorMessages.CtrlEAction_Previous, IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private Node editorNode = new Node( - IncubatorMessages.CtrlEAction_Editors, IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private Node viewNode = new Node(IncubatorMessages.CtrlEAction_Views, - IWorkbenchGraphicConstants.IMG_VIEW_DEFAULTVIEW_MISC); - - private Node perspectiveNode = new Node( - IncubatorMessages.CtrlEAction_Perspectives, - IWorkbenchGraphicConstants.IMG_ETOOL_DEF_PERSPECTIVE); - - private Node commandNode = new Node( - IncubatorMessages.CtrlEAction_Commands, IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private Node menusNode = new Node(IncubatorMessages.CtrlEAction_Menus, - IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private Node newNode = new Node(IncubatorMessages.CtrlEAction_New, IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private Node preferencesNode = new Node( - IncubatorMessages.CtrlEAction_Preferences, IWorkbenchGraphicConstants.IMG_OBJ_NODE); - - private SortedSet commands; + private final AbstractProvider[] providers; + private HashMap elementMap; /** - * @param commands + * @param providers */ - public MyContentProvider(SortedSet commands) { - MyContentProvider.this.commands = commands; + public MyContentProvider(AbstractProvider[] providers) { + this.providers = providers; + this.elementMap = new HashMap(); + for (int i = 0; i < providers.length; i++) { + elementMap.put(providers[i], providers[i].getElements()); + } } public Object[] getChildren(Object parentElement) { - if (parentElement instanceof Node) { - if (previousNode.equals(parentElement)) { - return getPreviousPicks(); - } else if (editorNode.equals(parentElement)) { - if(window.getActivePage() != null) { - return window.getActivePage().getEditorReferences(); - } - } else if (viewNode.equals(parentElement)) { - return PlatformUI.getWorkbench().getViewRegistry() - .getViews(); - } else if (perspectiveNode.equals(parentElement)) { - return PlatformUI.getWorkbench().getPerspectiveRegistry() - .getPerspectives(); - } else if (commandNode.equals(parentElement)) { - return commands.toArray(); - } else if (preferencesNode.equals(parentElement)) { - List elements = PlatformUI.getWorkbench() - .getPreferenceManager().getElements( - PreferenceManager.PRE_ORDER); - Set uniqueElements = new HashSet(elements); - return uniqueElements.toArray(); - } else if (menusNode.equals(parentElement)) { - MenuManager menu = ((WorkbenchWindow) window) - .getMenuBarManager(); - Set result = new HashSet(); - collectContributions(menu, result); - return result.toArray(); - } else if (newNode.equals(parentElement)) { - IWizardCategory rootCategory = WorkbenchPlugin.getDefault() - .getNewWizardRegistry().getRootCategory(); - List result = new ArrayList(); - collectWizards(rootCategory, result); - return result.toArray(); - } + if (parentElement instanceof AbstractProvider) { + return (Object[]) elementMap.get(parentElement); } if (parentElement == input) { - return new Node[] { previousNode, editorNode, viewNode, - perspectiveNode, commandNode, menusNode, newNode, - preferencesNode }; + return providers; } return new Object[0]; } - private void collectContributions(MenuManager menu, Set result) { - IContributionItem[] items = menu.getItems(); - for (int i = 0; i < items.length; i++) { - IContributionItem item = items[i]; - if (item instanceof SubContributionItem) { - item = ((SubContributionItem) item).getInnerItem(); - } - if (item instanceof MenuManager) { - collectContributions((MenuManager) item, result); - } else if (item instanceof ActionContributionItem) { - result.add(item); - } - } - } - - private void collectWizards(IWizardCategory category, List result) { - result.addAll(Arrays.asList(category.getWizards())); - IWizardCategory[] childCategories = category.getCategories(); - for (int i = 0; i < childCategories.length; i++) { - collectWizards(childCategories[i], result); - } - } - public Object getParent(Object element) { return null; } @@ -453,34 +309,16 @@ public Image getImage(Object element) { Image image = null; - if (element instanceof Node) { - Node node = (Node) element; - image = findOrCreateImage(WorkbenchImages - .getImageDescriptor(node.getImageId())); - } - else if (element instanceof IEditorReference) { - IEditorReference editorReference = (IEditorReference) element; - image = editorReference.getTitleImage(); - } - else if (element instanceof IViewDescriptor) { - IViewDescriptor viewDescriptor = (IViewDescriptor) element; - image = findOrCreateImage(viewDescriptor.getImageDescriptor()); - } - else if (element instanceof IPerspectiveDescriptor) { - IPerspectiveDescriptor perspectiveDescriptor = (IPerspectiveDescriptor) element; - image = findOrCreateImage(perspectiveDescriptor + if (element instanceof AbstractProvider) { + AbstractProvider provider = (AbstractProvider) element; + image = findOrCreateImage(provider.getImageDescriptor()); + } else if (element instanceof AbstractElement) { + image = findOrCreateImage(((AbstractElement) element) .getImageDescriptor()); } - else if (element instanceof IPreferenceNode) { - IPreferenceNode preferenceNode = (IPreferenceNode) element; - image = preferenceNode.getLabelImage(); - } - else if (element instanceof IWizardDescriptor) { - IWizardDescriptor wizardDescriptor = (IWizardDescriptor) element; - image = findOrCreateImage(wizardDescriptor.getDescriptionImage()); - } if (image == null) { - image = WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_OBJ_ELEMENT); + image = WorkbenchImages + .getImage(IWorkbenchGraphicConstants.IMG_OBJ_ELEMENT); } return image; } @@ -512,92 +350,59 @@ } public String getText(Object element) { - String separator = " - "; //$NON-NLS-1$ - if (element instanceof IEditorReference) { - IEditorReference editorReference = (IEditorReference) element; - StringBuffer result = new StringBuffer(); - if (editorReference.isDirty()) { - result.append(DIRTY_MARK); - } - result.append(editorReference.getName()); - result.append(separator); - result.append(editorReference.getTitleToolTip()); - return result.toString(); - } - if (element instanceof IViewDescriptor) { - IViewDescriptor viewDescriptor = (IViewDescriptor) element; - return viewDescriptor.getLabel(); - } - if (element instanceof IPerspectiveDescriptor) { - IPerspectiveDescriptor perspectiveDescriptor = (IPerspectiveDescriptor) element; - return perspectiveDescriptor.getLabel(); - } - if (element instanceof IPreferenceNode) { - IPreferenceNode preferenceNode = (IPreferenceNode) element; - IPreferencePage page = preferenceNode.getPage(); - if (page != null && page.getDescription() != null - && page.getDescription().length() != 0) { - return preferenceNode.getLabelText() + separator - + page.getDescription(); - } - return preferenceNode.getLabelText(); - } - if (element instanceof IWizardDescriptor) { - IWizardDescriptor wizardDescriptor = (IWizardDescriptor) element; - return wizardDescriptor.getLabel() + separator - + wizardDescriptor.getDescription(); - } - if (element instanceof ActionContributionItem) { - ActionContributionItem item = (ActionContributionItem) element; - IAction action = item.getAction(); - if (action.getToolTipText() != null - && action.getToolTipText().length() != 0) { - return LegacyActionTools.removeMnemonics(action.getText()) - + separator + action.getToolTipText(); - } - return LegacyActionTools.removeMnemonics(action.getText()); - } - if (element instanceof ParameterizedCommand) { - ParameterizedCommand command = (ParameterizedCommand) element; - try { - Command nestedCommand = command.getCommand(); - if (nestedCommand != null - && nestedCommand.getDescription() != null - && nestedCommand.getDescription().length() != 0) { - return command.getName() + separator - + nestedCommand.getDescription(); - } - return command.getName(); - } catch (NotDefinedException e) { - return command.toString(); - } + if (element instanceof AbstractProvider) { + AbstractProvider provider = (AbstractProvider) element; + return provider.getName(); + } else if (element instanceof AbstractElement) { + AbstractElement abstractElement = (AbstractElement) element; + return abstractElement.getLabel(); } return super.getText(element); } } - + /** * @param element */ private void addPreviousPick(Object element) { previousPicksList.remove(element); previousPicksList.addFirst(element); + String text = (String) reverseMap.put(element, rememberedText); + if(text != null) { + previousPicksMap.remove(text); + } previousPicksMap.put(rememberedText, element); } /** * @return */ - private Object[] getPreviousPicks() { - return previousPicksList.toArray(); + private AbstractElement[] getPreviousPicks() { + return (AbstractElement[]) previousPicksList + .toArray(new AbstractElement[previousPicksList.size()]); } - private static String stripDirtyIndicator(String elementName) { - if (elementName.startsWith(DIRTY_MARK)) { - elementName = elementName.substring(1); + private class PreviousPicksProvider extends AbstractProvider { + + public AbstractElement getElementForId(String id) { + return null; + } + + public AbstractElement[] getElements() { + return getPreviousPicks(); } - return elementName; - } + public String getId() { + return "org.eclipse.ui.previousPicks"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + public String getName() { + return IncubatorMessages.CtrlEAction_Previous; + } + } } \ No newline at end of file Index: Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ActionProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.SubContributionItem; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; +import org.eclipse.ui.internal.WorkbenchWindow; + +/** + * @since 3.3 + * + */ +public class ActionProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public String getId() { + return "org.eclipse.ui.actions"; //$NON-NLS-1$ + } + + public AbstractElement getElementForId(String id) { + getElements(); + return (ActionElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + WorkbenchWindow window = (WorkbenchWindow) PlatformUI + .getWorkbench().getActiveWorkbenchWindow(); + if (window != null) { + MenuManager menu = window.getMenuManager(); + Set result = new HashSet(); + collectContributions(menu, result); + ActionContributionItem[] actions = (ActionContributionItem[]) result + .toArray(new ActionContributionItem[result.size()]); + cachedElements = new AbstractElement[actions.length]; + for (int i = 0; i < actions.length; i++) { + ActionElement actionElement = new ActionElement(actions[i]); + cachedElements[i] = actionElement; + idToElement.put(actionElement.getId(), actionElement); + } + } + } + return cachedElements; + } + + private void collectContributions(MenuManager menu, Set result) { + IContributionItem[] items = menu.getItems(); + for (int i = 0; i < items.length; i++) { + IContributionItem item = items[i]; + if (item instanceof SubContributionItem) { + item = ((SubContributionItem) item).getInnerItem(); + } + if (item instanceof MenuManager) { + collectContributions((MenuManager) item, result); + } else if (item instanceof ActionContributionItem) { + result.add(item); + } + } + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Menus; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/WizardProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; +import org.eclipse.ui.internal.WorkbenchPlugin; +import org.eclipse.ui.wizards.IWizardCategory; +import org.eclipse.ui.wizards.IWizardDescriptor; + +/** + * @since 3.3 + * + */ +public class WizardProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public AbstractElement getElementForId(String id) { + getElements(); + return (WizardElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + IWizardCategory rootCategory = WorkbenchPlugin.getDefault() + .getNewWizardRegistry().getRootCategory(); + List result = new ArrayList(); + collectWizards(rootCategory, result); + IWizardDescriptor[] wizards = (IWizardDescriptor[]) result + .toArray(new IWizardDescriptor[result.size()]); + cachedElements = new AbstractElement[wizards.length]; + for (int i = 0; i < wizards.length; i++) { + WizardElement wizardElement = new WizardElement(wizards[i]); + cachedElements[i] = wizardElement; + idToElement.put(wizardElement.getId(), wizardElement); + } + } + return cachedElements; + } + + private void collectWizards(IWizardCategory category, List result) { + result.addAll(Arrays.asList(category.getWizards())); + IWizardCategory[] childCategories = category.getCategories(); + for (int i = 0; i < childCategories.length; i++) { + collectWizards(childCategories[i], result); + } + } + + public String getId() { + return "org.eclipse.ui.wizards"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_New; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; + +/** + * @since 3.3 + * + */ +public class PerspectiveProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public String getId() { + return "org.eclipse.ui.perspectives"; //$NON-NLS-1$ + } + + public AbstractElement getElementForId(String id) { + getElements(); + return (PerspectiveElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + IPerspectiveDescriptor[] perspectives = PlatformUI.getWorkbench() + .getPerspectiveRegistry().getPerspectives(); + cachedElements = new AbstractElement[perspectives.length]; + for (int i = 0; i < perspectives.length; i++) { + PerspectiveElement perspectiveElement = new PerspectiveElement( + perspectives[i]); + cachedElements[i] = perspectiveElement; + idToElement.put(perspectiveElement.getId(), perspectiveElement); + } + } + return cachedElements; + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_DEF_PERSPECTIVE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Perspectives; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/AbstractProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/AbstractProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/AbstractProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/AbstractProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * @since 3.3 + * + */ +public abstract class AbstractProvider { + + public abstract String getId(); + + public abstract String getName(); + + public abstract ImageDescriptor getImageDescriptor(); + + public abstract AbstractElement[] getElements(); + + public abstract AbstractElement getElementForId(String id); +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/WizardElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.actions.NewWizardShortcutAction; +import org.eclipse.ui.wizards.IWizardDescriptor; + +/** + * @since 3.3 + * + */ +public class WizardElement extends AbstractElement { + + private static final String separator = " - "; //$NON-NLS-1$ + + private IWizardDescriptor wizardDescriptor; + + public WizardElement(IWizardDescriptor wizardDescriptor) { + this.wizardDescriptor = wizardDescriptor; + } + + public void execute() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if(window != null) { + NewWizardShortcutAction wizardAction = new NewWizardShortcutAction(window, wizardDescriptor); + wizardAction.run(); + } + } + + public String getId() { + return wizardDescriptor.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return wizardDescriptor.getImageDescriptor(); + } + + public String getLabel() { + return wizardDescriptor.getLabel() + separator + + wizardDescriptor.getDescription(); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime + * result + + ((wizardDescriptor == null) ? 0 : wizardDescriptor.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final WizardElement other = (WizardElement) obj; + if (wizardDescriptor == null) { + if (other.wizardDescriptor != null) + return false; + } else if (!wizardDescriptor.equals(other.wizardDescriptor)) + return false; + return true; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CommandElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,103 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.core.commands.Command; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.NotEnabledException; +import org.eclipse.core.commands.NotHandledException; +import org.eclipse.core.commands.ParameterizedCommand; +import org.eclipse.core.commands.common.NotDefinedException; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.handlers.IHandlerService; + +/** + * @since 3.3 + * + */ +public class CommandElement extends AbstractElement { + + private static final String separator = " - "; //$NON-NLS-1$ + + private ParameterizedCommand command; + + public CommandElement(ParameterizedCommand command) { + this.command = command; + } + + public void execute() { + IWorkbenchWindow window = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow(); + if (window != null) { + IHandlerService handlerService = (IHandlerService) window + .getWorkbench().getService(IHandlerService.class); + try { + handlerService.executeCommand(command, null); + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (NotDefinedException e) { + e.printStackTrace(); + } catch (NotEnabledException e) { + e.printStackTrace(); + } catch (NotHandledException e) { + e.printStackTrace(); + } + } + } + + public String getId() { + return command.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return null; + } + + public String getLabel() { + try { + Command nestedCommand = command.getCommand(); + if (nestedCommand != null + && nestedCommand.getDescription() != null + && nestedCommand.getDescription().length() != 0) { + return command.getName() + separator + nestedCommand.getDescription(); + } + return command.getName(); + } catch (NotDefinedException e) { + return command.toString(); + } + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((command == null) ? 0 : command.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final CommandElement other = (CommandElement) obj; + if (command == null) { + if (other.command != null) + return false; + } else if (!command.equals(other.command)) + return false; + return true; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/EditorElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.PlatformUI; + +/** + * @since 3.3 + * + */ +public class EditorElement extends AbstractElement { + + private static final String DIRTY_MARK = "*"; //$NON-NLS-1$ + + private static final String separator = " - "; //$NON-NLS-1$ + + private IEditorReference editorReference; + + public EditorElement(IEditorReference editorReference) { + this.editorReference = editorReference; + } + + public void execute() { + IWorkbenchPart part = editorReference.getPart(true); + if (part != null) { + IWorkbenchPage activePage = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + if (activePage != null) { + activePage.activate(part); + } + } + } + + public String getId() { + return editorReference.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return ImageDescriptor.createFromImage(editorReference.getTitleImage()); + } + + public String getLabel() { + boolean dirty = editorReference.isDirty(); + return (dirty ? DIRTY_MARK : "") + editorReference.getName() + separator + editorReference.getTitleToolTip(); //$NON-NLS-1$ + } + + public String getSortLabel() { + return editorReference.getTitle(); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((editorReference == null) ? 0 : editorReference.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final EditorElement other = (EditorElement) obj; + if (editorReference == null) { + if (other.editorReference != null) + return false; + } else if (!editorReference.equals(other.editorReference)) + return false; + return true; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashSet; +import java.util.List; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.eclipse.jface.preference.IPreferenceNode; +import org.eclipse.jface.preference.PreferenceManager; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; + +/** + * @since 3.3 + * + */ +public class PreferenceProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public String getId() { + return "org.eclipse.ui.preferences"; //$NON-NLS-1$ + } + + public AbstractElement getElementForId(String id) { + getElements(); + return (PreferenceElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + List list = PlatformUI.getWorkbench().getPreferenceManager().getElements(PreferenceManager.PRE_ORDER); + Set uniqueElements = new HashSet(list); + IPreferenceNode[] preferences = (IPreferenceNode[]) uniqueElements.toArray(new IPreferenceNode[uniqueElements.size()]); + cachedElements = new AbstractElement[preferences.length]; + for (int i = 0; i < preferences.length; i++) { + PreferenceElement preferenceElement = new PreferenceElement( + preferences[i]); + cachedElements[i] = preferenceElement; + idToElement.put(preferenceElement.getId(), preferenceElement); + } + } + return cachedElements; + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Preferences; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PreferenceElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.preference.IPreferenceNode; +import org.eclipse.jface.preference.IPreferencePage; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog; + +/** + * @since 3.3 + * + */ +public class PreferenceElement extends AbstractElement { + + private static final String separator = " - "; //$NON-NLS-1$ + + private IPreferenceNode preferenceNode; + + public PreferenceElement(IPreferenceNode preferenceNode) { + this.preferenceNode = preferenceNode; + } + + public void execute() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if(window != null) { + WorkbenchPreferenceDialog dialog = WorkbenchPreferenceDialog + .createDialogOn(window.getShell(), preferenceNode + .getId()); + dialog.open(); + } + } + + public String getId() { + return preferenceNode.getId(); + } + + public ImageDescriptor getImageDescriptor() { + Image image = preferenceNode.getLabelImage(); + if(image != null) { + ImageDescriptor descriptor = ImageDescriptor.createFromImage(image); + return descriptor; + } + return null; + } + + public String getLabel() { + IPreferencePage page = preferenceNode.getPage(); + if (page != null && page.getDescription() != null + && page.getDescription().length() != 0) { + return preferenceNode.getLabelText() + separator + + page.getDescription(); + } + return preferenceNode.getLabelText(); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((preferenceNode == null) ? 0 : preferenceNode.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final PreferenceElement other = (PreferenceElement) obj; + if (preferenceNode == null) { + if (other.preferenceNode != null) + return false; + } else if (!preferenceNode.equals(other.preferenceNode)) + return false; + return true; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/CommandProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashMap; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.eclipse.core.commands.ParameterizedCommand; +import org.eclipse.jface.bindings.Binding; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; +import org.eclipse.ui.internal.keys.BindingService; +import org.eclipse.ui.keys.IBindingService; + +/** + * @since 3.3 + * + */ +public class CommandProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public String getId() { + return "org.eclipse.ui.commands"; //$NON-NLS-1$ + } + + public AbstractElement getElementForId(String id) { + getElements(); + return (CommandElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + BindingService bindingService = (BindingService) PlatformUI + .getWorkbench().getService(IBindingService.class); + Binding[] bindings = bindingService.getBindings(); + SortedSet commandSet = new TreeSet(); + for (int i = 0; i < bindings.length; i++) { + Binding binding = bindings[i]; + ParameterizedCommand command = binding + .getParameterizedCommand(); + if (command != null && command.getCommand().isHandled()) { + commandSet.add(command); + } + } + ParameterizedCommand[] commands = (ParameterizedCommand[]) commandSet + .toArray(new ParameterizedCommand[commandSet.size()]); + cachedElements = new AbstractElement[commands.length]; + for (int i = 0; i < commands.length; i++) { + CommandElement commandElement = new CommandElement(commands[i]); + cachedElements[i] = commandElement; + idToElement.put(commandElement.getId(), commandElement); + } + } + return cachedElements; + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Commands; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/PerspectiveElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IPerspectiveDescriptor; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; + +/** + * @since 3.3 + * + */ +public class PerspectiveElement extends AbstractElement { + + private final IPerspectiveDescriptor descriptor; + + public PerspectiveElement(IPerspectiveDescriptor descriptor) { + this.descriptor = descriptor; + } + + public void execute() { + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if(activePage != null) { + activePage.setPerspective(descriptor); + } + } + + public String getId() { + return descriptor.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return descriptor.getImageDescriptor(); + } + + public String getLabel() { + return descriptor.getLabel(); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((descriptor == null) ? 0 : descriptor.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final PerspectiveElement other = (PerspectiveElement) obj; + if (descriptor == null) { + if (other.descriptor != null) + return false; + } else if (!descriptor.equals(other.descriptor)) + return false; + return true; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/AbstractElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * @since 3.3 + * + */ +public abstract class AbstractElement { + + public abstract String getLabel(); + + public abstract ImageDescriptor getImageDescriptor(); + + public abstract String getId(); + + public abstract void execute(); + + public String getSortLabel() { + return getLabel(); + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/EditorProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; + +/** + * @since 3.3 + * + */ +public class EditorProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public AbstractElement getElementForId(String id) { + getElements(); + return (EditorElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + IWorkbenchPage activePage = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + IEditorReference[] editors = activePage.getEditorReferences(); + cachedElements = new AbstractElement[editors.length]; + for (int i = 0; i < editors.length; i++) { + EditorElement editorElement = new EditorElement(editors[i]); + cachedElements[i] = editorElement; + idToElement.put(editorElement.getId(), editorElement); + } + } + return cachedElements; + } + + public String getId() { + return "org.eclipse.ui.editors"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Editors; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ViewProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.IWorkbenchGraphicConstants; +import org.eclipse.ui.internal.WorkbenchImages; +import org.eclipse.ui.views.IViewDescriptor; + +/** + * @since 3.3 + * + */ +public class ViewProvider extends AbstractProvider { + + private AbstractElement[] cachedElements; + private Map idToElement = new HashMap(); + + public String getId() { + return "org.eclipse.ui.views"; //$NON-NLS-1$ + } + + public AbstractElement getElementForId(String id) { + getElements(); + return (ViewElement) idToElement.get(id); + } + + public AbstractElement[] getElements() { + if (cachedElements == null) { + IViewDescriptor[] views = PlatformUI.getWorkbench() + .getViewRegistry().getViews(); + cachedElements = new AbstractElement[views.length]; + for (int i = 0; i < views.length; i++) { + ViewElement viewElement = new ViewElement(views[i]); + cachedElements[i] = viewElement; + idToElement.put(viewElement.getId(), viewElement); + } + } + return cachedElements; + } + + public ImageDescriptor getImageDescriptor() { + return WorkbenchImages + .getImageDescriptor(IWorkbenchGraphicConstants.IMG_VIEW_DEFAULTVIEW_MISC); + } + + public String getName() { + return IncubatorMessages.CtrlEAction_Views; + } +} Index: Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ActionElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.LegacyActionTools; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * @since 3.3 + * + */ +public class ActionElement extends AbstractElement { + + private static final String separator = " - "; //$NON-NLS-1$ + + private ActionContributionItem item; + + public ActionElement(ActionContributionItem item) { + this.item = item; + } + + public void execute() { + item.getAction().run(); + } + + public String getId() { + return item.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return item.getAction().getImageDescriptor(); + } + + public String getLabel() { + IAction action = item.getAction(); + if (action.getToolTipText() != null + && action.getToolTipText().length() != 0) { + return LegacyActionTools.removeMnemonics(action.getText()) + + separator + action.getToolTipText(); + } + return LegacyActionTools.removeMnemonics(action.getText()); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((item == null) ? 0 : item.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final ActionElement other = (ActionElement) obj; + if (item == null) { + if (other.item != null) + return false; + } else if (!item.equals(other.item)) + return false; + return true; + } +} + + + Index: Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java =================================================================== RCS file: Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java diff -N Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Eclipse UI/org/eclipse/ui/internal/incubator/ViewElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.internal.incubator; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.views.IViewDescriptor; + +/** + * @since 3.3 + * + */ +public class ViewElement extends AbstractElement { + + private final IViewDescriptor viewDescriptor; + + public ViewElement(IViewDescriptor viewDescriptor) { + this.viewDescriptor = viewDescriptor; + } + + public void execute() { + IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if(activePage != null) { + try { + activePage.showView(viewDescriptor.getId()); + } catch (PartInitException e) { + } + } + } + + public String getId() { + return viewDescriptor.getId(); + } + + public ImageDescriptor getImageDescriptor() { + return viewDescriptor.getImageDescriptor(); + } + + public String getLabel() { + return viewDescriptor.getLabel(); + } + + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((viewDescriptor == null) ? 0 : viewDescriptor.hashCode()); + return result; + } + + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final ViewElement other = (ViewElement) obj; + if (viewDescriptor == null) { + if (other.viewDescriptor != null) + return false; + } else if (!viewDescriptor.equals(other.viewDescriptor)) + return false; + return true; + } +}