/***************************************************************************
 GanttDialogInfo.java  -  description
 -------------------
 begin                : mar 2003
 copyright            : (C) 2003 by Thomas Alexandre
 email                : alexthomas(at)ganttproject.org
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

package net.sourceforge.ganttproject.gui;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

import net.sourceforge.ganttproject.language.GanttLanguage;

/**
 * Class to show a message for the user
 */
public class GanttDialogInfo extends JDialog {

    /** An error message */
    public static final int ERROR = 0;

    /** A warning message */
    public static final int WARNING = 1;

    /** An info message */
    public static final int INFO = 2;

    /** A question message */
    public static final int QUESTION = 3;

    /** Ok result */
    public static final int YES = 0;

    /** Cancel result */
    public static final int NO = 1;

    /** Undo result */
    public static final int CANCEL = 2;

    /** The result of the dialog box */
    public int res = 0;

    /** only ok button */
    public static int YES_OPTION = 0;

    /** ok and cancel button */
    public static int YES_NO_OPTION = 1;

    /** ok and cancel button */
    public static int YES_NO_CANCEL_OPTION = 2;

    /** Constructor */
    public GanttDialogInfo(Frame parent, int msgtype, int button,
            String message, String title) {

        super(parent, title, true);

        GanttLanguage language = GanttLanguage.getInstance();

        res = button;

        Box b1 = Box.createVerticalBox();

        if (msgtype == ERROR)
            b1.add(new JLabel(new ImageIcon(getClass().getResource(
                    "/icons/error.png"))));
        else if (msgtype == WARNING)
            b1.add(new JLabel(new ImageIcon(getClass().getResource(
                    "/icons/warning.png"))));
        else if (msgtype == INFO)
            b1.add(new JLabel(new ImageIcon(getClass().getResource(
                    "/icons/info.png"))));
        else if (msgtype == QUESTION)
            b1.add(new JLabel(new ImageIcon(getClass().getResource(
                    "/icons/question.png"))));

        getContentPane().add(b1, "West");

        Box b2 = Box.createVerticalBox();
        JTextArea textArea = new JTextArea(message);
        textArea.setEditable(false);
        textArea.setBackground(new JLabel().getBackground());
        b2.add(textArea);
        getContentPane().add(b2, "Center");

        JPanel p = new JPanel();
        // YES BUTTON
        JButton yes = new JButton((button == 0) ? language.getText("ok")
                : language.getText("yes"));
        getRootPane().setDefaultButton(yes);
        p.add(yes);
        yes.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                setVisible(false);
                dispose();
                res = YES;
            }
        });

        if (button > 0) {
            // NO BUTTON
            JButton no = new JButton(language.getText("no"));
            p.add(no);
            no.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    setVisible(false);
                    dispose();
                    res = NO;
                }
            });

            if (button > 1) {
                // CANCEL BUTTON
                JButton cancel = new JButton(language.getText("cancel"));
                p.add(cancel);
                cancel.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {
                        setVisible(false);
                        dispose();
                        res = CANCEL;
                    }
                });
            }
        }

        getContentPane().add(p, BorderLayout.SOUTH);

        pack();
        setResizable(false);
        DialogAligner.center(this, getParent());
        applyComponentOrientation(language.getComponentOrientation());
    }
}
