01: /*
02: * uDig - User Friendly Desktop Internet GIS client
03: * http://udig.refractions.net
04: * (C) 2004, Refractions Research Inc.
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation;
09: * version 2.1 of the License.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: */
17: package net.refractions.udig.ui;
18:
19: import org.eclipse.jface.resource.ImageDescriptor;
20: import org.eclipse.swt.graphics.Image;
21:
22: /**
23: * The OverlayCache is works specifically with DecoratorOverlayIcon allowing
24: * decorators while not wasting resources.
25: * <p>
26: * Note this class is limited to working with DecoratorOveralayIcon since it
27: * has a working equals and hashcode implemenation.
28: * </p>
29: */
30: public class OverlayCache {
31:
32: private ImageCache imageCache = new ImageCache(); /*from OverlayIcon to Image*/
33:
34: /**
35: * Returns and caches an image corresponding to the specified icon.
36: * @param icon the icon
37: * @return the image
38: */
39: Image getImageFor(DecoratorOverlayIcon icon) {
40: return imageCache.getImage(icon);
41: }
42:
43: /**
44: * Disposes of all images in the cache.
45: */
46: public void disposeAll() {
47: imageCache.dispose();
48: }
49:
50: /**
51: * Apply the descriptors for the receiver to the supplied image.
52: * <p>
53: * * <p>
54: * Example use:<pre><code>
55: * applyDescriptors( base,
56: * new ImageDescriptor[][]={
57: * null, // TOP_LEFT unsure if we will use this
58: * modified, // TOP_RIGHT indicate content modified (w/ *)
59: * status, // BOTTOM_LEFT called the auxiliary overlay warn, error, success
60: * cached, // BOTTOM_RIGHT not yet defined, recommened cache status...
61: * null, // UNDERLAY not sure if we will use this
62: * }
63: * );
64: * </code></pre>
65: * </p>
66: * </p>
67: * @param source
68: * @param descriptors
69: * @return Image
70: */
71: public Image applyDescriptors(Image source,
72: ImageDescriptor[] descriptors) {
73: DecoratorOverlayIcon icon = new DecoratorOverlayIcon(source,
74: descriptors);
75: return getImageFor(icon);
76: }
77:
78: public Image applyStatus(Image source, ImageDescriptor status) {
79: DecoratorOverlayIcon icon = new DecoratorOverlayIcon(
80: source,
81: new ImageDescriptor[] { null, null, status, null, null });
82: return getImageFor(icon);
83: }
84: }
|