// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.ui.decorators;
import net.sf.eclipsefp.haskell.core.util.ResourceUtil;
import net.sf.eclipsefp.haskell.ui.util.HaskellUIImages;
import net.sf.eclipsefp.haskell.ui.util.IImageNames;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
/** <p>decorates project folders in Haskell projects.</p>
*
* @author Leif Frenzel
*/
public class ProjectFoldersDecorator extends LabelProvider
implements ILabelDecorator {
// interface methods of ILabelDecorator
///////////////////////////////////////
@Override
public Image decorateImage( final Image baseImage, final Object element ) {
// if it remains null, this means no special decoration
Image result = null;
IFolder folder = getFolder( element );
if( folder != null ) {
IProject project = folder.getProject();
if( ResourceUtil.hasHaskellNature( project )) {
result = decorate( folder,baseImage );
}
}
return result;
}
@Override
public String decorateText( final String text, final Object element ) {
// no special text decorations
return text;
}
// helping methods
//////////////////
private IFolder getFolder( final Object element ) {
IFolder result = null;
if( element instanceof IFolder ) {
result = ( IFolder )element;
} else if( element instanceof IAdaptable ) {
Object adapter = ( ( IAdaptable )element ).getAdapter( IFolder.class );
if( adapter instanceof IFolder ) {
result = ( IFolder )adapter;
}
}
return result;
}
private Image decorate( final IFolder folder,
final Image baseImage ) {
Image result = null;
if( ResourceUtil.isSourceFolder( folder ) ) {
result = getImage( baseImage, IImageNames.SRC_FOLDER_DECORATOR );
}
return result;
}
private Image getImage( final Image baseImage, final String name ) {
ImageData data = getImageData( name );
DecoratorImageDescriptor did = new DecoratorImageDescriptor( baseImage,
data );
return did.createImage();
}
private ImageData getImageData( final String name ) {
return HaskellUIImages.getImageDescriptor( name ).getImageData();
}
}