/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package usda.weru.mcrew;

import com.klg.jclass.cell.JCCellEditor;
import com.klg.jclass.cell.JCCellEditorListener;
import com.klg.jclass.cell.JCCellEditorSupport;
import com.klg.jclass.cell.JCCellInfo;
import com.klg.jclass.cell.JCKeyModifier;
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import usda.weru.weps.fuel.Fuel;
import usda.weru.weps.fuel.FuelChooser;

/**
 *
 * @author josephalevin
 */
public class FuelComboBoxEditor extends FuelChooser implements JCCellEditor{
    private static final long serialVersionUID = 1L;

    private final JCCellEditorSupport editor;
    private boolean invokePopup = false;
    private Fuel previousValue;

	/**
	 *
	 */
	public FuelComboBoxEditor() {
        editor = new JCCellEditorSupport();
        setIncludeDefaultFuel(true);
    }

    @Override
    public void initialize(AWTEvent ev, JCCellInfo info, Object o) {
        if(o instanceof Fuel){
            Fuel fuel = (Fuel) o;
            setSelectedFuel(fuel);
        }
        else if(o instanceof String){
            String name = (String) o;
            setSelectedFuel(name);
        }
        else{
            setSelectedFuel((Fuel) null);
        }

        previousValue = getSelectedFuel();
        invokePopup = true;
    }

    @Override
    public Component getComponent() {        
        return this;
    }

    @Override
    public String getCellEditorValue() {
        Fuel selected = getSelectedFuel();
        return selected != null ? selected.getName() : "";
        
    }

    @Override
    public boolean stopCellEditing() {
        hidePopup();
        return true;
    }

    @Override
    public boolean isModified() {
        Fuel value = getSelectedFuel();
        if(value == null && previousValue == null){
            return false;
        }
        else if (value == null || previousValue == null){
            return true;
        }
        else{
            return !value.equals(previousValue);
        }
    }

    @Override
    public void cancelCellEditing() {
        hidePopup();
    }

    @Override
    public JCKeyModifier[] getReservedKeys() {
        return null;
    }

    @Override
    public void addCellEditorListener(JCCellEditorListener l) {
        editor.addCellEditorListener(l);
    }

    @Override
    public void removeCellEditorListener(JCCellEditorListener l) {
        editor.removeCellEditorListener(l);
    }

	/**
	 *
	 * @param g
	 */
	@Override
    public void paint(Graphics g) {
        super.paint(g);
        if(invokePopup){
            EventQueue.invokeLater(new Runnable() {

                @Override
                public void run() {
                    try{
                        showPopup();
                    }
                    finally{
                        invokePopup = false;
                    }
                }
            });
        }
    }




}
