/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view.tool.timeFields;

import java.awt.Dimension;
import java.util.Calendar;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import view.Vue;

/**
 *
 * @author alexis
 */
public class TimeField extends Vue implements ChangeListener{
    /**
	 * 
	 */
	private static final long serialVersionUID = 3694410007164638466L;
	private JSpinner hourSpin;
    private JSpinner minSpin;
    private Calendar cal;
    
    /**
     * constructor
     * @param _cal
     */
    private TimeField(Calendar _cal){      
        initComponents(_cal);
    }
    
    /**
     * @return TimeField with current time
     */
    public static TimeField TimeFieldWithCurrentTime(){
        return new TimeField(Calendar.getInstance());
    }

    /**
     * @param _cal
     * @return TimeField with specific time
     */
    public static TimeField TimeFieldWithTime(Calendar _cal){
        return new TimeField(_cal);
    }
    
    /**
     * initialise components
     * @param _cal
     */
    private void initComponents(Calendar _cal){
        cal = _cal;
        hourSpin = new JSpinner();
        
        hourSpin = new JSpinner(new SpinnerNumberModel(cal.get(Calendar.HOUR_OF_DAY),0, 23, 1));
        hourSpin.setPreferredSize(new Dimension(36, 20));
        hourSpin.setName("Hour");
        hourSpin.setEditor(new JSpinner.NumberEditor(hourSpin, "00"));
        ((DefaultEditor) hourSpin.getEditor()).getTextField().setEditable(false);
        
        hourSpin.addChangeListener(this);
        add(hourSpin);
        
        add(new JLabel("h:"));
        
        minSpin = new JSpinner();
        
        minSpin = new JSpinner(new SpinnerNumberModel(cal.get(Calendar.MINUTE),0, 59, 1));
        minSpin.setPreferredSize(new Dimension(36, 20));
        minSpin.setName("Minute");
        minSpin.setEditor(new JSpinner.NumberEditor(minSpin, "00"));
        ((DefaultEditor) minSpin.getEditor()).getTextField().setEditable(false);
        
        minSpin.addChangeListener(this);
        add(minSpin);
        
        add(new JLabel("m"));
    }
    
    /**
     * set calendar
     * @param _cal
     */
    public void setCalendar(Calendar _cal){
        cal = _cal;
        hourSpin.getModel().setValue(_cal.get(Calendar.HOUR_OF_DAY));
        minSpin.getModel().setValue(_cal.get(Calendar.MINUTE));
    }
    
    /**
     * get calendar
     * @return calendar
     */
    public Calendar getCalendar(){
        return cal;
    }

    @Override
    public void stateChanged(ChangeEvent arg0) {
        this.getObservable().notifyObservers(null);
    }
}