package com.aptana.editor.php.internal.ui.editor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.text.source.Annotation; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.texteditor.IAnnotationImageProvider; import com.aptana.editor.php.internal.ui.PHPPluginImages; /** * Image provider for annotations (based on JDT code). * * @since 3.0 */ public class ScriptAnnotationImageProvider implements IAnnotationImageProvider { private final static int NO_IMAGE = 0; private final static int GRAY_IMAGE = 1; private final static int OVERLAY_IMAGE = 2; private final static int QUICKFIX_IMAGE = 3; private final static int QUICKFIX_ERROR_IMAGE = 4; private static Image fgQuickFixImage; private static Image fgQuickFixErrorImage; private static ImageRegistry fgImageRegistry; private int fCachedImageType; private Image fCachedImage; public ScriptAnnotationImageProvider() { } /* * @see IAnnotationImageProvider#getManagedImage(Annotation) */ public Image getManagedImage(Annotation annotation) { if (annotation instanceof IScriptAnnotation) { IScriptAnnotation javaAnnotation = (IScriptAnnotation) annotation; int imageType = getImageType(javaAnnotation); return getImage(javaAnnotation, imageType, Display.getCurrent()); } return null; } /* * @see IAnnotationImageProvider#getImageDescriptorId(Annotation) */ public String getImageDescriptorId(Annotation annotation) { // unmanaged images are not supported return null; } /* * @see IAnnotationImageProvider#getImageDescriptor(String) */ public ImageDescriptor getImageDescriptor(String symbolicName) { // unmanaged images are not supported return null; } private boolean showQuickFix(IScriptAnnotation annotation) { return false; /* * return annotation.isProblem() && ScriptAnnotationUtils.hasCorrections(annotation); */ } private Image getQuickFixImage() { if (fgQuickFixImage == null) fgQuickFixImage = PHPPluginImages.get(PHPPluginImages.IMG_OBJS_FIXABLE_PROBLEM); return fgQuickFixImage; } private Image getQuickFixErrorImage() { if (fgQuickFixErrorImage == null) fgQuickFixErrorImage = PHPPluginImages.get(PHPPluginImages.IMG_OBJS_FIXABLE_ERROR); return fgQuickFixErrorImage; } private ImageRegistry getImageRegistry(Display display) { if (fgImageRegistry == null) fgImageRegistry = new ImageRegistry(display); return fgImageRegistry; } private int getImageType(IScriptAnnotation annotation) { int imageType = NO_IMAGE; if (annotation.hasOverlay()) imageType = OVERLAY_IMAGE; else if (!annotation.isMarkedDeleted()) { if (showQuickFix(annotation)) imageType = ScriptMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(annotation.getType()) ? QUICKFIX_ERROR_IMAGE : QUICKFIX_IMAGE; } else { imageType = GRAY_IMAGE; } return imageType; } private Image getImage(IScriptAnnotation annotation, int imageType, Display display) { if ((imageType == QUICKFIX_IMAGE || imageType == QUICKFIX_ERROR_IMAGE) && fCachedImageType == imageType) return fCachedImage; Image image = null; switch (imageType) { case OVERLAY_IMAGE: IScriptAnnotation overlay = annotation.getOverlay(); image = getManagedImage((Annotation) overlay); fCachedImageType = -1; break; case QUICKFIX_IMAGE: image = getQuickFixImage(); fCachedImageType = imageType; fCachedImage = image; break; case QUICKFIX_ERROR_IMAGE: image = getQuickFixErrorImage(); fCachedImageType = imageType; fCachedImage = image; break; case GRAY_IMAGE: { ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages(); String annotationType = annotation.getType(); if (ScriptMarkerAnnotation.ERROR_ANNOTATION_TYPE.equals(annotationType)) { image = sharedImages.getImage(ISharedImages.IMG_OBJS_ERROR_TSK); } else if (ScriptMarkerAnnotation.WARNING_ANNOTATION_TYPE.equals(annotationType)) { image = sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK); } else if (ScriptMarkerAnnotation.INFO_ANNOTATION_TYPE.equals(annotationType)) { image = sharedImages.getImage(ISharedImages.IMG_OBJS_INFO_TSK); } if (image != null) { ImageRegistry registry = getImageRegistry(display); String key = Integer.toString(image.hashCode()); Image grayImage = registry.get(key); if (grayImage == null) { grayImage = new Image(display, image, SWT.IMAGE_GRAY); registry.put(key, grayImage); } image = grayImage; } fCachedImageType = -1; break; } } return image; } }