/*******************************************************************************
* Copyright 2005-2007, CHISEL Group, University of Victoria, Victoria, BC, Canada
* and IBM Corporation. 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:
* The Chisel Group, University of Victoria
*******************************************************************************/
package net.sourceforge.tagsea.resources.sharing.ui;
import java.util.HashMap;
import net.sourceforge.tagsea.core.IWaypoint;
import net.sourceforge.tagsea.resources.ResourceWaypointPlugin;
import net.sourceforge.tagsea.resources.ui.ISharedImages;
import net.sourceforge.tagsea.resources.ui.OverlayImageDescriptor;
import net.sourceforge.tagsea.resources.waypoints.IResourceWaypointDescriptor;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
/**
* Decorates an image to add a waypoint flag.
* @author Del Myers
*
*/
public class ResourceWaypointLabelDecorator implements ILabelDecorator {
HashMap<Image, Image> imageRegistry;
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object)
*/
public Image decorateImage(Image image, Object element) {
if (!(element instanceof IResourceWaypointDescriptor)) {
Object adapted = null;
if (element instanceof IAdaptable) {
adapted = ((IAdaptable)element).getAdapter(IWaypoint.class);
}
if (adapted == null) return image;
}
if (imageRegistry == null) {
imageRegistry = new HashMap<Image, Image>();
}
if (image != null) {
Image result = imageRegistry.get(image);
if (result == null) {
ImageDescriptor overlay = ResourceWaypointPlugin.getDefault().getImageRegistry().getDescriptor(ISharedImages.IMG_OVERLAY);
OverlayImageDescriptor desc = new OverlayImageDescriptor(ImageDescriptor.createFromImage(image), overlay, OverlayImageDescriptor.LEFT, OverlayImageDescriptor.TOP);
result = desc.createImage();
imageRegistry.put(image, result);
}
if (result != null) {
return result;
}
}
return image;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object)
*/
public String decorateText(String text, Object element) {
return text;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void addListener(ILabelProviderListener listener) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose() {
if (imageRegistry == null) return;
for (Image value : imageRegistry.values()) {
if (!value.isDisposed()) {
value.dispose();
}
}
imageRegistry = null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
*/
public boolean isLabelProperty(Object element, String property) {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener listener) {
}
}