package net.sourceforge.pmd.eclipse.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.CellPainterBuilder;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleCollection;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleFieldAccessor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
/**
*
* @author Brian Remedios
*/
public abstract class AbstractCellPainterBuilder implements CellPainterBuilder {
private Font standardFont;
private Font hasIssueFont;
private static ColourManager colourManager;
private static final int IssueFontStyle = SWT.ITALIC;
public static void addListener(Control control, int eventType, Listener listener, Map<Integer, List<Listener>> listenersByEventCode) {
Integer eventCode = Integer.valueOf(eventType);
control.addListener(eventType, listener);
if (!listenersByEventCode.containsKey(eventCode)) {
listenersByEventCode.put(eventCode, new ArrayList<Listener>());
}
listenersByEventCode.get(eventCode).add(listener);
}
protected static ColourManager colorManager() {
if (colourManager != null) return colourManager;
colourManager = ColourManager.managerFor(Display.getCurrent());
return colourManager;
}
public void dispose() {
colorManager().dispose();
}
protected int widthOf(int columnIndex, Tree tree) {
return tree.getColumn(columnIndex).getWidth();
}
protected static Font deriveHasIssueFontFrom(Font sourceFont, Display display) {
FontData fd = sourceFont.getFontData()[0];
return new Font(display, new FontData( fd.getName(), fd.getHeight(), IssueFontStyle));
}
protected void setFontsFrom(Control control) {
standardFont = control.getFont();
hasIssueFont = deriveHasIssueFontFrom(standardFont, control.getDisplay());
}
protected Font fontFor(Control control, Rule rule) {
if (standardFont == null) setFontsFrom(control);
return rule.dysfunctionReason() != null ?
hasIssueFont :
standardFont;
}
protected Rule ruleFrom(TreeItem tItem) {
Object item = tItem.getData();
return item instanceof Rule ? (Rule)item : null;
}
protected Object valueFor(TreeItem tItem, RuleFieldAccessor getter) {
Object item = tItem.getData();
if (item instanceof Rule) {
return getter.valueFor((Rule) item);
}
if (item instanceof RuleCollection) {
return getter.valueFor((RuleCollection)item);
}
return null;
}
protected String textFor(TreeItem tItem, RuleFieldAccessor getter) {
Object item = tItem.getData();
if (item instanceof Rule) {
return getter.labelFor((Rule) item);
}
if (item instanceof RuleCollection) {
return String.valueOf(
getter.valueFor((RuleCollection)item)
);
}
return null;
}
}