package splar.core.fm;
import java.awt.BorderLayout;
import java.awt.Color;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class NodeRenderer implements IFNodeRenderer {
private static final Color trueNodeColor = new Color(50,160,50);
private static final Color falseNodeColor = new Color(140, 140, 160);
private ImageIcon imageIcon = null;
private String imgPath = null;
private JLabel nodeDescriptionLabel = null;
private JLabel nodeValueLabel = null;
private JLabel nodeImageLabel = null;
private JPanel nodeDescriptionPanel = null;
private JPanel nodeValuePanel = null;
private JPanel nodeImagePanel = null;
private JPanel panel = null;
private Color bgDefaultColor = Color.WHITE;
private Color fgDefaultColor = Color.BLACK;
private Color bgColor = bgDefaultColor;
private Color fgColor = fgDefaultColor;
private boolean displayTruthValue;
public NodeRenderer( String imgPath, String imgFile, String description, boolean displayTruthValue) {
this.imgPath = imgPath;
this.displayTruthValue = displayTruthValue;
panel = new JPanel(new BorderLayout());
// imageIcon = createImageIcon(imgPath+imgFile, description);
if ( displayTruthValue ) {
nodeValueLabel = new JLabel( "", JLabel.LEFT );
nodeValuePanel = new JPanel(new BorderLayout());
nodeValuePanel.add(nodeValueLabel, BorderLayout.CENTER);
}
nodeDescriptionLabel = new JLabel( "", JLabel.LEFT );
nodeImageLabel = new JLabel( "", imageIcon, JLabel.LEFT );
nodeDescriptionPanel = new JPanel(new BorderLayout());
nodeDescriptionPanel.add(nodeDescriptionLabel,BorderLayout.CENTER);
nodeImagePanel = new JPanel(new BorderLayout());
nodeImagePanel.add(nodeImageLabel,BorderLayout.CENTER);
nodeImagePanel.setBackground(Color.white);
JPanel nodePanel = new JPanel(new BorderLayout(3,3));
nodePanel.setBackground(Color.white);
nodePanel.add(nodeImagePanel, BorderLayout.WEST);
if (displayTruthValue) {
nodePanel.add(nodeValuePanel, BorderLayout.CENTER);
nodePanel.add(nodeDescriptionPanel, BorderLayout.EAST);
}
else {
nodePanel.add(nodeDescriptionPanel, BorderLayout.CENTER);
}
panel.add(nodePanel, BorderLayout.CENTER);
}
public void setBackgroundColor(Color bgColor) {
this.bgColor = bgColor;
}
public void setForegroundColor(Color fgColor) {
this.fgColor = fgColor;
}
public Color getBackgroundColor() {
return bgColor;
}
public Color getForegroundColor() {
return fgColor;
}
public void resetDefaults() {
bgColor = bgDefaultColor;
fgColor = fgDefaultColor;
nodeValueLabel.setForeground(fgColor);
nodeValueLabel.setBackground(bgColor);
nodeDescriptionLabel.setForeground(fgColor);
nodeDescriptionLabel.setBackground(bgColor);
}
protected static ImageIcon createImageIcon(String path, String description) {
try {
java.net.URL imgURL = new URL(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public JComponent getRenderedComponent(FeatureTreeNode node) {
if ( displayTruthValue ) {
// nodeValueLabel.setText((node.getValue() == FeatureTreeNode.UNKNOWN ? "(?)" : (node.getValue() == FeatureTreeNode.SELECTED ? "(T)" : "(F)")));
ImageIcon valueIcon = null;
if (node.getValue() == FeatureTreeNode.UNKNOWN ) {
valueIcon = createImageIcon(imgPath+"unknown.jpg", "");
nodeValuePanel.setBackground(bgColor);
nodeValueLabel.setIcon(valueIcon);
}
else if (node.getValue() == FeatureTreeNode.SELECTED ) {
valueIcon = createImageIcon(imgPath+"true.jpg", "");
nodeDescriptionLabel.setForeground(trueNodeColor);
}
else if (node.getValue() == FeatureTreeNode.DESELECTED ) {
valueIcon = createImageIcon(imgPath+"false.jpg", "");
nodeDescriptionLabel.setForeground(falseNodeColor);
}
nodeValueLabel.setIcon(valueIcon);
}
nodeDescriptionLabel.setText(node.getDescription());
nodeDescriptionPanel.setBackground(bgColor);
panel.setBackground(bgColor);
return panel;
}
}