/******************************************************************************* * Copyright (c) 2001, 2010 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.sse.ui.internal; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.source.IAnnotationPresentation; 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.MarkerAnnotation; import org.eclipse.wst.sse.ui.internal.reconcile.TemporaryAnnotation; /** * This is overridden to get around the problem of being registered as a * org.eclipse.wst.validation.core.problemmarker rather than a * org.eclipse.core.resource.problemmarker causing all problems to be skipped * in the OverviewRuler */ public class StructuredMarkerAnnotation extends MarkerAnnotation implements IAnnotationPresentation { // controls if icon should be painted gray private boolean fIsGrayed = false; String fAnnotationType = null; StructuredMarkerAnnotation(IMarker marker) { super(marker); } public final String getAnnotationType() { if (fAnnotationType==null){ initAnnotationType(); } return fAnnotationType; } /** * Eventually will have to use IAnnotationPresentation & * IAnnotationExtension * * @see org.eclipse.ui.texteditor.MarkerAnnotation#getImage(org.eclipse.swt.widgets.Display) */ protected Image getImage(Display display) { Image image = null; String annotationType = getAnnotationType(); if (annotationType == TemporaryAnnotation.ANNOT_ERROR) { image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK); } else if (annotationType == TemporaryAnnotation.ANNOT_WARNING) { image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK); } else if (annotationType == TemporaryAnnotation.ANNOT_INFO) { image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_INFO_TSK); } if (image != null && isGrayed()) setImage(getGrayImage(display, image)); else setImage(image); return super.getImage(display); } private Image getGrayImage(Display display, Image image) { if (image != null) { String key = Integer.toString(image.hashCode()); // make sure we cache the gray image Image grayImage = JFaceResources.getImageRegistry().get(key); if (grayImage == null) { grayImage = new Image(display, image, SWT.IMAGE_GRAY); JFaceResources.getImageRegistry().put(key, grayImage); } image = grayImage; } return image; } public final boolean isGrayed() { return fIsGrayed; } public final void setGrayed(boolean grayed) { fIsGrayed = grayed; } /** * Initializes the annotation's icon representation and its drawing layer * based upon the properties of the underlying marker. */ protected void initAnnotationType() { IMarker marker = getMarker(); fAnnotationType = TemporaryAnnotation.ANNOT_UNKNOWN; try { if (marker.exists() && marker.isSubtypeOf(IMarker.PROBLEM)) { int severity = marker.getAttribute(IMarker.SEVERITY, -1); switch (severity) { case IMarker.SEVERITY_ERROR : fAnnotationType = TemporaryAnnotation.ANNOT_ERROR; break; case IMarker.SEVERITY_WARNING : fAnnotationType = TemporaryAnnotation.ANNOT_WARNING; break; case IMarker.SEVERITY_INFO : fAnnotationType = TemporaryAnnotation.ANNOT_INFO; break; } } } catch (CoreException e) { Logger.logException(e); } } }