Java tutorial
/******************************************************************************* * Copyright (c) 2014-2015 Synflow SAS. * 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: * Matthieu Wipliez - initial API and implementation and/or initial documentation *******************************************************************************/ package com.synflow.cx.ui.labeling; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.ListenerList; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import com.synflow.core.SynflowCore; import com.synflow.core.layout.ITreeElement; /** * This class defines a label decorator that doesn't do much at the moment. * * @author Matthieu Wipliez * */ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabelDecorator { private ListenerList fListeners; @Override public void addListener(ILabelProviderListener listener) { if (fListeners == null) { fListeners = new ListenerList(); } fListeners.add(listener); } @Override public void decorate(Object element, IDecoration decoration) { } @Override public Image decorateImage(Image image, Object obj) { int severity = findSeverity(obj); if (severity > 0) { Rectangle bounds = image.getBounds(); Point size = new Point(bounds.width, bounds.height); return new CxImageDescriptor(image, severity, size).createImage(); } return image; } @Override public String decorateText(String text, Object element) { return text; } @Override public void dispose() { } private int findSeverity(Object obj) { int severity = -1; IResource resource; if (obj instanceof IResource) { resource = (IResource) obj; } else if (obj instanceof ITreeElement) { ITreeElement element = (ITreeElement) obj; resource = element.getResource(); } else { return severity; } if (!resource.isAccessible()) { return severity; } try { severity = resource.findMaxProblemSeverity(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); } catch (CoreException e) { SynflowCore.log(e); } return severity; } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { if (fListeners != null) { fListeners.remove(listener); } } }