/******************************************************************************* * Copyright (c) 2011 Subgraph. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.ui.httpviewer; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.plugin.AbstractUIPlugin; public class ImageCache { private final String pluginId; private final Map<ImageDescriptor, Image> imageMap = new HashMap<ImageDescriptor, Image>(); private final Map<String, Image> disabledMap = new HashMap<String, Image>(); public ImageCache(String pluginId) { this.pluginId = pluginId; } public Image get(String key) { return get(getDescriptor(key)); } public Image getDisabled(String key) { synchronized (disabledMap) { final Image image = disabledMap.get(key); if(image == null) return getDisabledImageAndCache(key); else return image; } } private Image getDisabledImageAndCache(String key) { final Image originalImage = get(key); if(originalImage == null) return null; final Image newImage = new Image(originalImage.getDevice(), originalImage, SWT.IMAGE_GRAY); disabledMap.put(key, newImage); return newImage; } public Image get(ImageDescriptor descriptor) { if(descriptor == null) return null; synchronized (imageMap) { final Image image = imageMap.get(descriptor); if(image == null) return getImageAndCache(descriptor); return image; } } private ImageDescriptor getDescriptor(String key) { return AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, key); } private Image getImageAndCache(ImageDescriptor descriptor) { final Image image = descriptor.createImage(); imageMap.put(descriptor, image); return image; } public void dispose() { synchronized (imageMap) { for(Image image: imageMap.values()) image.dispose(); } imageMap.clear(); synchronized (disabledMap) { for(Image image: disabledMap.values()) image.dispose(); } disabledMap.clear(); } }