package org.lucci.madhoc.gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.border.LineBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import org.lucci.madhoc.simulation.Monitor;
import org.lucci.madhoc.simulation.projection.Projection;
public class ApplicationViewTreeCellRenderer extends JPanel implements TreeCellRenderer
{
private Icon eye;
private JLabel iconLabel = new JLabel();
private JLabel textLabel = new JLabel()
{
public void setText(String s)
{
super.setText(" " + s + " ");
}
};
private JLabel spaceLabel = new JLabel(" ");
public ApplicationViewTreeCellRenderer()
{
eye = new ImageIcon(getClass().getResource("eye.png"));
setLayout(new BorderLayout());
add(BorderLayout.WEST, iconLabel);
add(BorderLayout.CENTER, spaceLabel);
add(BorderLayout.EAST, textLabel);
spaceLabel.setOpaque(false);
iconLabel.setOpaque(false);
setOpaque(false);
textLabel.setOpaque(true);
}
public Component getTreeCellRendererComponent(
JTree tree,
Object node,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus)
{
setBackground(Color.white);
iconLabel.setIcon(null);
Object object = ((DefaultMutableTreeNode) node).getUserObject();
Monitor simulApp = null;
if ( object instanceof Projection )
{
Projection projection = (Projection) object;
textLabel.setText(projection.getName());
iconLabel.setIcon(new ImageIcon(getClass().getResource("simulation.png")));
}
else if ( object instanceof Monitor )
{
simulApp = (Monitor) object;
iconLabel.setIcon(simulApp.getIcon());
textLabel.setText(simulApp.getFriendlyName());
}
else if ( object instanceof MonitorView )
{
MonitorView view = (MonitorView) object;
simulApp = view.getMonitor();
iconLabel.setIcon(eye);
textLabel.setText(view.getName());
}
else
{
throw new IllegalStateException("class not managed: " + object.getClass() + " value=" + object);
}
if (selected)
{
textLabel.setBorder(new LineBorder(Color.black, 1, true));
if (simulApp == null)
{
textLabel.setBackground(Color.lightGray);
}
else
{
textLabel.setBackground(simulApp.getColor());
}
}
else
{
textLabel.setBorder(null);
textLabel.setBackground(Color.white);
}
return this;
}
}