X-Git-Url: http://secure.phpeclipse.com 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 index 0000000..4b3f09b --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/ImageDescriptorRegistry.java @@ -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 ImageDescriptors to Image. + */ +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 + * null 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(); + } + }); + } +}