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;
    }

}