1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / viewsupport / StorageLabelProvider.java
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 (file)
index 0000000..a5d86bc
--- /dev/null
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * 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.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+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;
+       }
+}