--- /dev/null
+/*******************************************************************************
+ * 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;
+ }
+}