diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index e96718282f7..09f2c3a9f3d 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,8 @@ +2003-05-29 Mikhail Khodjaiants + PR 38268: added the image cache for overlay images. + * OverlayImageCache.java: new + * CDTDebugModelPresentation.java + 2003-05-29 Mikhail Khodjaiants Changed the vizualization of arrays and structures. * CDTDebugModelPresentation.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java index 2f2b3216e14..37eff8fabba 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java @@ -100,6 +100,8 @@ public class CDTDebugModelPresentation extends LabelProvider private static CDTDebugModelPresentation fInstance = null; + private OverlayImageCache fImageCache = new OverlayImageCache(); + /** * Constructor for CDTDebugModelPresentation. */ @@ -218,8 +220,7 @@ public class CDTDebugModelPresentation extends LabelProvider break; } } - OverlayImageDescriptor overlayImage = new OverlayImageDescriptor( baseImage, overlays ); - return overlayImage.createImage(); + return fImageCache.getImageFor( new OverlayImageDescriptor( baseImage, overlays ) ); } return null; } @@ -627,8 +628,7 @@ public class CDTDebugModelPresentation extends LabelProvider descriptor = DebugUITools.getImageDescriptor( IDebugUIConstants.IMG_OBJS_BREAKPOINT_DISABLED ); } ; - OverlayImageDescriptor overlayImage = new OverlayImageDescriptor( fDebugImageRegistry.get( descriptor ), computeBreakpointOverlays( breakpoint ) ); - return overlayImage.createImage(); + return fImageCache.getImageFor( new OverlayImageDescriptor( fDebugImageRegistry.get( descriptor ), computeBreakpointOverlays( breakpoint ) ) ); } protected Image getWatchpointImage( ICWatchpoint watchpoint ) throws CoreException @@ -652,8 +652,7 @@ public class CDTDebugModelPresentation extends LabelProvider else descriptor = CDebugImages.DESC_OBJS_WATCHPOINT_DISABLED; } - OverlayImageDescriptor overlayImage = new OverlayImageDescriptor( fDebugImageRegistry.get( descriptor ), computeBreakpointOverlays( watchpoint ) ); - return overlayImage.createImage(); + return fImageCache.getImageFor( new OverlayImageDescriptor( fDebugImageRegistry.get( descriptor ), computeBreakpointOverlays( watchpoint ) ) ); } protected IBreakpoint getBreakpoint( IMarker marker ) @@ -931,4 +930,12 @@ public class CDTDebugModelPresentation extends LabelProvider } return type; } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() + */ + public void dispose() + { + fImageCache.disposeAll(); + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/OverlayImageCache.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/OverlayImageCache.java new file mode 100644 index 00000000000..cd8374870d7 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/OverlayImageCache.java @@ -0,0 +1,53 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ + +package org.eclipse.cdt.debug.internal.ui; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.swt.graphics.Image; + +/** + * Maintains a cache of overlay images. + * + * @since May 30, 2003 + */ +public class OverlayImageCache +{ + private Map cache = new HashMap(); + + /** + * Returns and caches an image corresponding to the specified image descriptor. + * + * @param imageDecsriptor the image descriptor + * @return the image + */ + public Image getImageFor( OverlayImageDescriptor imageDescriptor ) + { + Image image = (Image)cache.get( imageDescriptor ); + if ( image == null ) + { + image = imageDescriptor.createImage(); + cache.put( imageDescriptor, image ); + } + return image; + } + + /** + * Disposes of all images in the cache. + */ + public void disposeAll() + { + for ( Iterator it = cache.values().iterator(); it.hasNext(); ) + { + Image image = (Image)it.next(); + image.dispose(); + } + cache.clear(); + } +}