### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.ide Index: extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java,v retrieving revision 1.18 diff -u -r1.18 FilteredResourcesSelectionDialog.java --- extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java 24 Mar 2008 19:13:35 -0000 1.18 +++ extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java 7 May 2008 07:58:44 -0000 @@ -10,8 +10,6 @@ *******************************************************************************/ package org.eclipse.ui.dialogs; -import com.ibm.icu.text.Collator; - import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; @@ -20,25 +18,18 @@ import java.util.Comparator; import java.util.List; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.ListenerList; -import org.eclipse.core.runtime.Status; - import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceProxy; import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.ListenerList; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; @@ -52,9 +43,15 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.LabelProviderChangedEvent; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; - +import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; +import org.eclipse.jface.viewers.StyledString.Styler; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IMemento; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; @@ -73,6 +70,8 @@ import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.statushandlers.StatusManager; +import com.ibm.icu.text.Collator; + /** * Shows a list of resources to the user with a text entry field for a string * pattern used to filter the list of resources. @@ -474,7 +473,7 @@ * decorator for providing extra resource info. */ private class ResourceItemLabelProvider extends LabelProvider implements - ILabelProviderListener { + ILabelProviderListener, IStyledLabelProvider { // Need to keep our own list of listeners private ListenerList listeners = new ListenerList(); @@ -531,6 +530,47 @@ return decorator.decorateText(str, res); } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object) + */ + public StyledString getStyledText(Object element) { + if (!(element instanceof IResource)) { + return new StyledString(super.getText(element)); + } + + IResource res = (IResource) element; + + StyledString str = new StyledString(res.getName()); + + // extra info for duplicates + if (isDuplicateElement(element)) { + str.append(" - ", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$ + str.append(res.getParent().getFullPath().makeRelative().toString(), StyledString.QUALIFIER_STYLER); + } + String decorated= decorator.decorateText(str.getString(), res); + return decorateStyledString(str, decorated, StyledString.DECORATIONS_STYLER); + } + + /* + * Should make this method API, for example in StyledString + */ + private StyledString decorateStyledString(StyledString string, String decorated, Styler color) { + String label= string.getString(); + int originalStart= decorated.indexOf(label); + if (originalStart == -1) { + return new StyledString(decorated); // the decorator did something wild + } + if (originalStart > 0) { + StyledString newString= new StyledString(decorated.substring(0, originalStart), color); + newString.append(string); + string= newString; + } + if (decorated.length() > originalStart + label.length()) { // decorator appended something + return string.append(decorated.substring(originalStart + label.length()), color); + } + return string; // no change + } /* * (non-Javadoc)