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 / ImageDescriptorRegistry.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/ImageDescriptorRegistry.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
new file mode 100644 (file)
index 0000000..4b3f09b
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package net.sourceforge.phpdt.internal.ui.viewsupport;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import net.sourceforge.phpdt.internal.ui.util.SWTUtil;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+//incastrix
+//import org.eclipse.jface.text.Assert;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * A registry that maps <code>ImageDescriptors</code> to <code>Image</code>.
+ */
+public class ImageDescriptorRegistry {
+
+       private HashMap fRegistry = new HashMap(10);
+
+       private Display fDisplay;
+
+       /**
+        * Creates a new image descriptor registry for the current or default
+        * display, respectively.
+        */
+       public ImageDescriptorRegistry() {
+               this(SWTUtil.getStandardDisplay());
+       }
+
+       /**
+        * Creates a new image descriptor registry for the given display. All images
+        * managed by this registry will be disposed when the display gets disposed.
+        * 
+        * @param diaplay
+        *            the display the images managed by this registry are allocated
+        *            for
+        */
+       public ImageDescriptorRegistry(Display display) {
+               fDisplay = display;
+               Assert.isNotNull(fDisplay);
+               hookDisplay();
+       }
+
+       /**
+        * Returns the image assiciated with the given image descriptor.
+        * 
+        * @param descriptor
+        *            the image descriptor for which the registry manages an image
+        * @return the image associated with the image descriptor or
+        *         <code>null</code> if the image descriptor can't create the
+        *         requested image.
+        */
+       public Image get(ImageDescriptor descriptor) {
+               if (descriptor == null)
+                       descriptor = ImageDescriptor.getMissingImageDescriptor();
+
+               Image result = (Image) fRegistry.get(descriptor);
+               if (result != null)
+                       return result;
+
+               Assert.isTrue(fDisplay == SWTUtil.getStandardDisplay(),
+                               "Allocating image for wrong display."); //$NON-NLS-1$
+               result = descriptor.createImage();
+               if (result != null)
+                       fRegistry.put(descriptor, result);
+               return result;
+       }
+
+       /**
+        * Disposes all images managed by this registry.
+        */
+       public void dispose() {
+               for (Iterator iter = fRegistry.values().iterator(); iter.hasNext();) {
+                       Image image = (Image) iter.next();
+                       image.dispose();
+               }
+               fRegistry.clear();
+       }
+
+       private void hookDisplay() {
+               fDisplay.disposeExec(new Runnable() {
+                       public void run() {
+                               dispose();
+                       }
+               });
+       }
+}