package org.xtest.ui.internal; import java.net.URL; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DecorationOverlayIcon; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.swt.graphics.Image; import org.eclipse.xtext.diagnostics.Severity; import org.eclipse.xtext.ui.IImageHelper; import com.google.inject.Inject; import com.google.inject.Singleton; /** * Registry of Xtest images * * @author Michael Barry */ @Singleton public class XtestPluginImages { /** Error overlay image descriptor */ public static final ImageDescriptor ERROR_OVERLAY = create("err_ovr.gif"); /** OK overlay image descriptor */ public static final ImageDescriptor OK_OVERLAY = create("ok_ovr.gif"); /** Test case image descriptor */ public static final ImageDescriptor TEST_CASE = create("test.gif"); /** Test suite image descriptor */ public static final ImageDescriptor TEST_SUITE = create("tsuite.gif"); /** Warn overlay image descriptor */ public static final ImageDescriptor WARN_OVERLAY = create("warn_ovr.gif"); private static ImageDescriptor create(String name) { return ImageDescriptor.createFromURL(makeImageURL(name)); } private static URL makeImageURL(String name) { String path = "icons/" + name; return FileLocator.find(XTestActivator.getInstance().getBundle(), new Path(path), null); } @Inject private IImageHelper imageHelper; /** * Get the test suite image with no overlay * * @return The test suite image with no overlay */ public Image getSuiteImage() { return imageHelper.getImage(TEST_SUITE); } /** * Get the test suite image with an overlay for the specified severity * * @param severity * The severity * @return The test suite image with an overlay for the specified severity */ public Image getSuiteImage(Severity severity) { return getOverlayedImage(TEST_SUITE, severity); } /** * Get the test case image with no overlay * * @return The test case image with no overlay */ public Image getTestImage() { return imageHelper.getImage(TEST_CASE); } /** * Get the test case image with an overlay for the specified severity * * @param severity * The severity * @return The test case image with an overlay for the specified severity */ public Image getTestImage(Severity severity) { return getOverlayedImage(TEST_CASE, severity); } private Image getOverlayedImage(ImageDescriptor main, Severity severity) { ImageDescriptor descriptor; Image decoratedImage = imageHelper.getImage(main); if (Severity.ERROR == severity) { descriptor = ERROR_OVERLAY; } else if (Severity.WARNING == severity) { descriptor = WARN_OVERLAY; } else { descriptor = OK_OVERLAY; } DecorationOverlayIcon decorationOverlayIcon = new DecorationOverlayIcon(decoratedImage, descriptor, IDecoration.BOTTOM_LEFT); decoratedImage = imageHelper.getImage(decorationOverlayIcon); return decoratedImage; } }