package net.sourceforge.pmd.eclipse.util;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import net.sourceforge.pmd.eclipse.ui.Shape;
import net.sourceforge.pmd.eclipse.ui.ShapePainter;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleFieldAccessor;
import net.sourceforge.pmd.util.StringUtil;
public class TextAsColourShapeBuilder extends AbstractCellPainterBuilder {
private final int width;
private final int height;
private final Shape shapeId;
public TextAsColourShapeBuilder(int theWidth, int theHeight, Shape theShapeId) {
width = theWidth;
height = theHeight;
shapeId = theShapeId;
}
private String getterTextIn(TreeItem tItem, RuleFieldAccessor getter) {
String text = (String) valueFor(tItem, getter);
return StringUtil.isEmpty(text) ? null : text;
}
public void addPainterFor(final Tree tree, final int columnIndex, final RuleFieldAccessor getter, Map<Integer, List<Listener>> listenersByEventCode) {
Listener paintListener = new Listener() {
public void handleEvent(Event event) {
if (event.index != columnIndex) return;
String text = getterTextIn((TreeItem)event.item, getter);
if (text == null) return;
Color original = event.gc.getBackground();
Color clr = colorManager().colourFor(text);
event.gc.setBackground(clr);
ShapePainter.drawShape(width, height, shapeId, event.gc, event.x, event.y, null);
event.gc.setBackground(original);
}
};
Listener measureListener = new Listener() {
public void handleEvent(Event e) {
if (e.index != columnIndex) return;
e.width = width + 2;
e.height = height + 2;
}
};
addListener(tree, SWT.PaintItem, paintListener, listenersByEventCode);
addListener(tree, SWT.MeasureItem, measureListener, listenersByEventCode);
}
}