package de.javasoft.synthetica.democenter.examples.tips.table;

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableCellRenderer;

import de.javasoft.synthetica.addons.SyntheticaAddonsUtilities;


/**
 * A simple TabeCellRenderer to demonstrate how to add padding.  
 */
@SuppressWarnings("serial")
public class PaddingTableCellRenderer extends JFrame
{
  Object[] columns = {"Planet", "Temperatur", "Monde", "Ringe"};    
  Object[][] data = 
  {
    {"Merkur", "-170C...+350C", new Integer(0), new Integer(0)},
    {"Venus", "+475C", new Integer(0), new Integer(0)},
    {"Erde", "+22C", new Integer(1), new Integer(0)},
    {"Mars", "-23C", new Integer(2), new Integer(0)},
    {"Jupiter", "-123C", new Integer(16), new Integer(1)},
    {"Saturn", "-18C", new Integer(23), "---"},
    {"Uranus", "-218C", new Integer(18), new Integer(10)},
    {"Neptun", "-228C", new Integer(8), new Integer(3)},
    {"Neptun", "-230C", new Integer(1), new Integer(0)}
  };

  public PaddingTableCellRenderer()
  {
    super("PaddingTableCellRenderer");
    JTable table = new JTable(data, columns);
    table.getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer()
    {
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int columnIndex)
      {
        JComponent c = new JLabel(value.toString());
        //add padding by EmptyBorder - MatteBorder is used to emulate grid
        Border border = new CompoundBorder(new MatteBorder(0, 0, 0, 1, UIManager.getColor("Synthetica.tableHeader.gridColor")), new EmptyBorder(5, 10, 5, 10));
        c.setBorder(border);
        c.setFont(table.getTableHeader().getFont());
        c.setForeground(table.getTableHeader().getForeground());
        return c;
      }
    });

//@highlight
    table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
    {
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int columnIndex)
      {
        JComponent c = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, rowIndex, columnIndex);
        c.setBorder(new EmptyBorder(0, 10, 0, 10));
        if (!isSelected)
        {
          //for dark themes we define a different colors
          boolean dark = SyntheticaAddonsUtilities.isDefaultTextBackgroundDark();
          if (rowIndex % 2 > 0)
            c.setBackground(dark ? new Color(0x2C3747) : new Color(0xE0F0FF));
          else
            c.setBackground(dark ? new Color(0x472C2C) : new Color(0xFFFFE0));
        }
        return c;
      }
    });
//@/highlight
    getContentPane().add(new JScrollPane(table));
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(640, 480);
    setLocationRelativeTo(null);        //center
    setVisible(true);
  }
  
  /**
   * Static main method for application startup. 
   */
  public static void main(String[] args)
  {
    EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        try
        {
          UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel");
          new PaddingTableCellRenderer();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }

}
