package agg.gui.treeview;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import agg.xt_basis.agt.MultiRule;
import agg.gui.IconResource;
import agg.gui.icons.NestedACIcon;
import agg.gui.icons.NewConclusionIcon;
import agg.gui.icons.TextIcon;
import agg.gui.treeview.nodedata.GraGraTreeNodeData;
/**
* @author $Author: olga $
* @version $Id: GraGraTreeCellRenderer.java,v 1.10 2010/09/23 08:22:47 olga Exp $
*/
@SuppressWarnings("serial")
public class GraGraTreeCellRenderer extends JLabel implements TreeCellRenderer {
/** Whether or not the item that was last configured is selected. */
protected boolean selected;
/** Whether or not the item that is a rule is not applicable. */
protected boolean notApplicable;
/** Whether or not the item that is a rule is a trigger rule of a layer. */
protected boolean isTriggerRule = false;
protected boolean isKernelRule = false;
protected boolean isFormula = false;
/** Color to use for the background when selected. */
static protected final Color SelectedColor = new Color(153, 153,
255);
/** Color to use for the background when a rule is not applicable. */
static protected final Color NotApplicableColor = Color.LIGHT_GRAY;
/**
* Color to use for the background when a rule is a trigger rule of its
* layer.
*/
static protected final Color TriggerRuleColor = Color.RED;
static protected final Color RuleFormulaColor = Color.BLUE;
public GraGraTreeCellRenderer() {
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
String stringValue = tree.convertValueToText(value, sel, expanded,
leaf, row, hasFocus);
/* Set the text. */
setText(stringValue);
setIconTextGap(5);
GraGraTreeNodeData userObject = (GraGraTreeNodeData) ((DefaultMutableTreeNode) value)
.getUserObject();
this.notApplicable = false;
this.isTriggerRule = false;
this.isKernelRule = false;
this.isFormula = false;
if (userObject.isGraGra()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLGraGra()));
setToolTipText(userObject.getToolTipText());
}
// check first if it is a type graph, because
// a type graph is also a graph
else if (userObject.isTypeGraph()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLTypeGraph()));
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isGraph()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLGraph()));
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isRuleScheme()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLRuleScheme()));
this.notApplicable = !userObject.getRuleScheme().getKernelRule().isApplicable();
// isTrigger = userObject.getRule().getBasisRule().isTriggerOfLayer();
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isKernelRule()) {
this.isKernelRule = true;
setIcon(IconResource.getIconFromURL(IconResource.getURLRule()));
this.notApplicable = !userObject.getKernelRule().isApplicable();
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isMultiRule()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLRule()));
this.notApplicable = !((MultiRule)userObject.getMultiRule().getBasisRule()).getRuleScheme().isApplicable();
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isAmalgamatedRule()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLRule()));
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isRule()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLRule()));
this.notApplicable = false;
if (!userObject.getRule().isApplicable())
this.notApplicable = true;
this.isTriggerRule = userObject.getRule().getBasisRule().isTriggerOfLayer();
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isNestedAC()) {
final NestedACIcon icon = new NestedACIcon(Color.blue);
setIcon(icon);
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getNestedAC().getRule().isApplicable();
}
else if (userObject.isNAC()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLNAC()));
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getNAC().getRule().isApplicable();
}
else if (userObject.isPAC()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLPAC()));
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getPAC().getRule().isApplicable();
}
else if (userObject.isAttrCondition()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLAttrCondition()));
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getAttrCondition().second.isApplicable();
}
else if (userObject.isAtomic()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLAtomic()));
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isConclusion()) {
NewConclusionIcon icon = new NewConclusionIcon(Color.blue);
icon.setEnabled(true);
setIcon(icon);
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isConstraint()) {
// setIcon(IconResource.getIconFromURL(IconResource.getURLFormula()));
setIcon(IconResource.getIconFromURL(IconResource.getURLConstraint()));
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isRuleConstraint()) {
setIcon(IconResource.getIconFromURL(IconResource.getURLPost()));
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getRuleConstraint().getRule().isApplicable();
}
else if (userObject.isAtomApplCond()) {
setIcon(IconResource
.getIconFromURL(IconResource.getURLAtomConstr()));
setToolTipText(userObject.getToolTipText());
this.notApplicable = !userObject.getAtomApplCond().getRule().isApplicable();
}
else if (userObject.isRuleSequence()) {
setIcon(null);
setToolTipText(userObject.getToolTipText());
}
else if (userObject.isApplFormula()) {
TextIcon icon = new TextIcon("F", true);
icon.setColor(Color.red);
setIcon(icon);
setToolTipText(userObject.getToolTipText());
this.isFormula = true;
}
else {
setIcon(null);
setToolTipText("");
}
this.selected = sel;
return this;
}
public void paintComponent(Graphics g) {
Color bColor = Color.WHITE;
Color fColor = Color.BLACK;
// Icon currentI = getIcon();
if (this.selected)
bColor = SelectedColor;
else if (this.notApplicable)
fColor = NotApplicableColor;
else if (this.isTriggerRule || this.isKernelRule)
fColor = TriggerRuleColor;
else if (this.isFormula)
fColor = RuleFormulaColor;
else if (getParent() != null) {
/*
* Pick background color up from parent (which will come from the
* JTree we're contained in).
*/
bColor = getParent().getBackground();
} else
bColor = getBackground();
g.setColor(bColor);
setForeground(fColor);
g.fillRect(0, 0, getWidth(), getHeight());
// if (currentI != null && getText() != null) {
// int offset = (currentI.getIconWidth() + getIconTextGap());
// g.fillRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
// } else
// g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
super.paintComponent(g);
}
}