package de.javasoft.synthetica.democenter.examples.jypropertytable;

import java.awt.Container;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

import de.javasoft.swing.JYPropertyTable;
import de.javasoft.swing.table.CheckBoxTableCellEditor;
import de.javasoft.swing.table.CheckBoxTableCellRenderer;
import de.javasoft.swing.table.SliderTableCellEditor;
import de.javasoft.swing.table.SliderTableCellRenderer;
import de.javasoft.swing.table.SpinnerTableCellEditor;
import de.javasoft.swing.table.SpinnerTableCellRenderer;

/**
 * Demonstrates how to install property related renderers/editors 
 * in a JYPropertyTable.
 */
@SuppressWarnings("serial")
public class PropertyRelatedRendererEditor extends JFrame
{
  public PropertyRelatedRendererEditor()
  {
    super("Property related renderers/editors");
    createAndAddComponents(getContentPane());

    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(400,300);
    setLocationRelativeTo(null);
    setVisible(true);
  }

  /**
   * Create components and add them to the container.
   */
  private void createAndAddComponents(final Container container)
  {
//@highlight
    JYPropertyTable table = new JYPropertyTable();
    initTable(table);
//@/highlight
    container.add(new JScrollPane(table));    
  }

  private void initTable(JYPropertyTable table)
  {
    Object propertyKey = null;
    TableCellRenderer defaultRenderer = table.getDefaultRenderer();
    TableCellEditor defaultEditor = table.getDefaultEditor();
    
    table.addProperty("Integer A", 10);
    table.addProperty("Integer B", 20);
    
    propertyKey = "Integer C";
    table.addProperty(propertyKey, 25);
//@highlight
    table.setPropertyRenderer(propertyKey, new SpinnerTableCellRenderer(defaultRenderer));
    SpinnerTableCellEditor editor = new SpinnerTableCellEditor(defaultEditor);
    editor.getEditorComponent().setModel(new SpinnerNumberModel(25, -100, 100, 5));
    table.setPropertyEditor(propertyKey, editor);
//@/highlight

    propertyKey = "Integer D";
    table.addProperty(propertyKey, 50);
//@highlight
    table.setPropertyRenderer(propertyKey, new SliderTableCellRenderer(defaultRenderer));
    table.setPropertyEditor(propertyKey, new SliderTableCellEditor(defaultEditor));
//@/highlight
        
    table.addSeparator();    
    table.addProperty("Boolean A", false);
    
    propertyKey = "Boolean B";
    table.addProperty(propertyKey, true);
//@highlight
    table.setPropertyRenderer(propertyKey, new CheckBoxTableCellRenderer(defaultRenderer));
    table.setPropertyEditor(propertyKey, new CheckBoxTableCellEditor(defaultEditor));
//@/highlight
  }
  
  /**
   * 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 PropertyRelatedRendererEditor();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }  
}
