X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/StorageLabelProvider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/StorageLabelProvider.java new file mode 100644 index 0000000..7ba4287 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/StorageLabelProvider.java @@ -0,0 +1,129 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.viewsupport; + + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.IPath; + +import org.eclipse.swt.graphics.Image; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.LabelProvider; + +import org.eclipse.ui.IEditorRegistry; +import org.eclipse.ui.IFileEditorMapping; +import org.eclipse.ui.PlatformUI; + +/** + * Standard label provider for IStorage objects. + * Use this class when you want to present IStorage objects in a viewer. + */ +public class StorageLabelProvider extends LabelProvider { + + private IEditorRegistry fEditorRegistry= PlatformUI.getWorkbench().getEditorRegistry(); + private Map fJarImageMap= new HashMap(10); + private Image fDefaultImage; + + /* (non-Javadoc) + * @see ILabelProvider#getImage + */ + public Image getImage(Object element) { + if (element instanceof IStorage) + return getImageForJarEntry((IStorage)element); + + return super.getImage(element); + } + + /* (non-Javadoc) + * @see ILabelProvider#getText + */ + public String getText(Object element) { + if (element instanceof IStorage) + return ((IStorage)element).getName(); + + return super.getText(element); + } + + /* (non-Javadoc) + * + * @see IBaseLabelProvider#dispose + */ + public void dispose() { + if (fJarImageMap != null) { + Iterator each= fJarImageMap.values().iterator(); + while (each.hasNext()) { + Image image= (Image)each.next(); + image.dispose(); + } + fJarImageMap= null; + } + if (fDefaultImage != null) + fDefaultImage.dispose(); + fDefaultImage= null; + } + + /* + * Gets and caches an image for a JarEntryFile. + * The image for a JarEntryFile is retrieved from the EditorRegistry. + */ + private Image getImageForJarEntry(IStorage element) { + if (fJarImageMap == null) + return getDefaultImage(); + + if (element == null || element.getName() == null) + return getDefaultImage(); + + // Try to find icon for full name + String name= element.getName(); + Image image= (Image)fJarImageMap.get(name); + if (image != null) + return image; + IFileEditorMapping[] mappings= fEditorRegistry.getFileEditorMappings(); + int i= 0; + while (i < mappings.length) { + if (mappings[i].getLabel().equals(name)) + break; + i++; + } + String key= name; + if (i == mappings.length) { + // Try to find icon for extension + IPath path= element.getFullPath(); + if (path == null) + return getDefaultImage(); + key= path.getFileExtension(); + if (key == null) + return getDefaultImage(); + image= (Image)fJarImageMap.get(key); + if (image != null) + return image; + } + + // Get the image from the editor registry + ImageDescriptor desc= fEditorRegistry.getImageDescriptor(name); + image= desc.createImage(); + + fJarImageMap.put(key, image); + + return image; + } + + private Image getDefaultImage() { + if (fDefaultImage == null) + fDefaultImage= fEditorRegistry.getImageDescriptor((String)null).createImage(); + return fDefaultImage; + } +}