/*
 * @(#)DateChooserDemo.java 2/12/2005
 *
 * Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
 */

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.jidesoft.combobox.DateChooserPanel;
import com.jidesoft.combobox.DateComboBox;
import com.jidesoft.combobox.DefaultDateModel;
import com.jidesoft.converter.ObjectConverterManager;
import com.jidesoft.plaf.LookAndFeelFactory;
import com.jidesoft.swing.JideSwingUtilities;

/**
 * Demoed Component: {@link DateComboBox}, {@link DateChooserPanel} <br> Required jar files: jide-common.jar,
 * jide-grids.jar <br> Required L&F: Jide L&F extension required
 */
public class DateComboBoxDemo {

    private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
    private static final DateFormat GMT_FORMAT = new SimpleDateFormat("d MMM yyyy HH:mm:ss z");
    static {
        GMT_FORMAT.setTimeZone(GMT);
    }
    
    private DateComboBox _dateComboBox;
    public JLabel _valueLabel;

    public DateComboBoxDemo() {
    }

    public String getName() {
        return "DateComboBox Demo";
    }

    public Component getDemoPanel() {
        JPanel panel = new JPanel(new GridLayout(2, 0, 2, 2));
        _dateComboBox = createDateComboBox();

        _valueLabel = new JLabel();
        _dateComboBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    _valueLabel.setText("Date selected: " + ObjectConverterManager.toString(e.getItem()));
                }
            }
        });

        panel.add(_dateComboBox);
        panel.add(_valueLabel);
        return JideSwingUtilities.createTopPanel(panel);
    }

    public static void main(String[] args) {
        LookAndFeelFactory.installDefaultLookAndFeelAndExtension();
        JFrame frame = new JFrame();
        final DateComboBoxDemo demo = new DateComboBoxDemo();
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(demo.getDemoPanel());
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private DateComboBox createDateComboBox() {
        DefaultDateModel model = new DefaultDateModel();
        model.setTimeZone(TimeZone.getTimeZone("GMT"));

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.YEAR, 2020);
        calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
        model.setMaxDate(calendar);

        calendar.set(Calendar.YEAR, 1980);
        calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMinimum(Calendar.DAY_OF_YEAR));
        model.setMinDate(calendar);

        final DateComboBox dateComboBox = new DateComboBox(model);

        Calendar prototypeValue = Calendar.getInstance();
        prototypeValue.set(Calendar.YEAR, 2000);
        prototypeValue.set(Calendar.MONDAY, 8);
        prototypeValue.set(Calendar.DAY_OF_MONTH, 30);
        dateComboBox.setPrototypeDisplayValue(prototypeValue);
        Calendar currentDate = Calendar.getInstance(GMT);
        dateComboBox.setCalendar(currentDate);

        dateComboBox.setLocale(Locale.getDefault());
        dateComboBox.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(dateComboBox.getSelectedItem());
            }
        });
        dateComboBox.setTimeDisplayed(true);
        
        
        dateComboBox.setFormat(GMT_FORMAT);
        return dateComboBox;
    }

}