X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/phpeditor/JavaAnnotationImageProvider.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/phpeditor/JavaAnnotationImageProvider.java new file mode 100644 index 0000000..ae92cf6 --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/phpeditor/JavaAnnotationImageProvider.java @@ -0,0 +1,178 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpeclipse.phpeditor; + +import net.sourceforge.phpdt.internal.ui.PHPUiImages; +import net.sourceforge.phpdt.ui.PreferenceConstants; + +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; + +/** + * Image provider for annotations based on Java problem markers. + * + * @since 3.0 + */ +public class JavaAnnotationImageProvider 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 boolean fShowQuickFixIcon; + + private int fCachedImageType; + + private Image fCachedImage; + + public JavaAnnotationImageProvider() { + fShowQuickFixIcon = PreferenceConstants.getPreferenceStore() + .getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION); + } + + /* + * @see org.eclipse.jface.text.source.IAnnotationImageProvider#getManagedImage(org.eclipse.jface.text.source.Annotation) + */ + public Image getManagedImage(Annotation annotation) { + if (annotation instanceof IJavaAnnotation) { + IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation; + int imageType = getImageType(javaAnnotation); + return getImage(javaAnnotation, imageType, Display.getCurrent()); + } + return null; + } + + /* + * @see org.eclipse.jface.text.source.IAnnotationImageProvider#getImageDescriptorId(org.eclipse.jface.text.source.Annotation) + */ + public String getImageDescriptorId(Annotation annotation) { + // unmanaged images are not supported + return null; + } + + /* + * @see org.eclipse.jface.text.source.IAnnotationImageProvider#getImageDescriptor(java.lang.String) + */ + public ImageDescriptor getImageDescriptor(String symbolicName) { + // unmanaged images are not supported + return null; + } + + private boolean showQuickFix(IJavaAnnotation annotation) { + // return fShowQuickFixIcon && annotation.isProblem() && + // JavaCorrectionProcessor.hasCorrections(annotation); + return false; + } + + private Image getQuickFixImage() { + if (fgQuickFixImage == null) + fgQuickFixImage = PHPUiImages + .get(PHPUiImages.IMG_OBJS_FIXABLE_PROBLEM); + return fgQuickFixImage; + } + + private Image getQuickFixErrorImage() { + if (fgQuickFixErrorImage == null) + fgQuickFixErrorImage = PHPUiImages + .get(PHPUiImages.IMG_OBJS_FIXABLE_ERROR); + return fgQuickFixErrorImage; + } + + private ImageRegistry getImageRegistry(Display display) { + if (fgImageRegistry == null) + fgImageRegistry = new ImageRegistry(display); + return fgImageRegistry; + } + + private int getImageType(IJavaAnnotation annotation) { + int imageType = NO_IMAGE; + if (annotation.hasOverlay()) + imageType = OVERLAY_IMAGE; + else if (!annotation.isMarkedDeleted()) { + if (showQuickFix(annotation)) + imageType = JavaMarkerAnnotation.ERROR_ANNOTATION_TYPE + .equals(annotation.getType()) ? QUICKFIX_ERROR_IMAGE + : QUICKFIX_IMAGE; + } else { + imageType = GRAY_IMAGE; + } + return imageType; + } + + private Image getImage(IJavaAnnotation annotation, int imageType, + Display display) { + if (fCachedImageType == imageType) + return fCachedImage; + + Image image = null; + switch (imageType) { + case OVERLAY_IMAGE: + IJavaAnnotation overlay = annotation.getOverlay(); + image = overlay.getImage(display); + break; + case QUICKFIX_IMAGE: + image = getQuickFixImage(); + break; + case QUICKFIX_ERROR_IMAGE: + image = getQuickFixErrorImage(); + break; + case GRAY_IMAGE: { + ISharedImages sharedImages = PlatformUI.getWorkbench() + .getSharedImages(); + String annotationType = annotation.getType(); + if (JavaMarkerAnnotation.ERROR_ANNOTATION_TYPE + .equals(annotationType)) { + image = sharedImages.getImage(ISharedImages.IMG_OBJS_ERROR_TSK); + } else if (JavaMarkerAnnotation.WARNING_ANNOTATION_TYPE + .equals(annotationType)) { + image = sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK); + } else if (JavaMarkerAnnotation.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; + } + break; + } + } + + fCachedImageType = imageType; + fCachedImage = image; + return fCachedImage; + } +}