package cnp.ew.misc;

import java.awt.*;

import cnp.ew.lightweight.*;
import cnp.ew.button.*;
import cnp.ew.text.*;
import cnp.ew.util.*;

public class CpPrompter extends CpLcFrame implements CpObserver
{
    static int infoId;
    static int spacing = 20;

    static {
         infoId = CpToolkit.registerImageName("info.gif");
    }

    CpReadOnlyTextAreaLc label;
    CpLabeledImageButtonLc okButton;

    public CpPrompter(String title, String prompt)
    {
	    super(title);

        setBackground(Color.lightGray);

        setLayout(null);

        Insets insets = insets();

        label = new CpReadOnlyTextAreaLc(prompt);
        label.setFont(CpFonts.dialogPlainTen());
        label.setShouldWrap(true);
        Dimension prefSize = label.preferredSize();
        add(label);

        okButton = new CpLabeledImageButtonLc("OK");
        add(okButton);
        okButton.addObserver(this);

        CpImageLc imageLc = new CpImageLc(CpToolkit.getImage(infoId));
        add(imageLc);

        resize(prefSize.width + (3*spacing) + imageLc.preferredSize().width + insets.left + insets.right, prefSize.height + (3*spacing) + okButton.preferredSize().height + insets.top + insets.bottom);

        label.reshape(insets.left + (2*spacing) + imageLc.preferredSize().width, insets.top + spacing, prefSize.width, prefSize.height);
        imageLc.reshape(insets.left + spacing, insets.top + spacing, imageLc.preferredSize().width, imageLc.preferredSize().height);
        okButton.reshape(insets.left + (size().width - okButton.preferredSize().width) / 2, insets.top + (2*spacing) + prefSize.height, okButton.preferredSize().width, okButton.preferredSize().height);
        layout();
    }

    public void layout()
    {
        super.layout();
        if (okButton != null) {
            okButton.setFont(CpFonts.dialogPlainTen());
            okButton.resize(okButton.preferredSize().width, okButton.preferredSize().height);
        }
    }


    public void update(CpObservable o, int facet, Object arg)
    {
        if (facet == CpEvent.BUTTON_CLICKED) {
            hide();
            dispose();
        }
    }

	public boolean handleEvent (Event evt) {

		switch(evt.id) {
		    case Event.WINDOW_DESTROY: {
		        hide();
		        dispose();
            }
		}
		return super.handleEvent(evt);
	}
}


