/*
 * Copyright 2010-2015 Institut Pasteur.
 * 
 * This file is part of Icy.
 * 
 * Icy 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 3 of the License, or
 * (at your option) any later version.
 * 
 * Icy is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Icy. If not, see <http://www.gnu.org/licenses/>.
 */
package icy.gui.frame;

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

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;

/**
 * @author Stephane
 */
public class ActionFrame extends TitledFrame
{
    protected static final String OK_CMD = "ok";
    protected static final String CANCEL_CMD = "cancel";

    protected final JPanel buttonPanel;
    protected final JButton okBtn;
    protected final JButton cancelBtn;

    protected ActionListener okAction;
    protected boolean closeAfterAction;

    public ActionFrame(String title)
    {
        this(title, false, false);
    }

    public ActionFrame(String title, boolean resizable)
    {
        this(title, resizable, false);
    }

    public ActionFrame(String title, boolean resizable, boolean iconifiable)
    {
        super(title, resizable, true, false, iconifiable);

        buttonPanel = new JPanel();
        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
        buttonPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));

        okBtn = new JButton("Ok");
        cancelBtn = new JButton("Cancel");

        buttonPanel.add(Box.createHorizontalGlue());
        buttonPanel.add(okBtn);
        buttonPanel.add(Box.createHorizontalStrut(10));
        buttonPanel.add(cancelBtn);
        buttonPanel.add(Box.createHorizontalGlue());

        add(buttonPanel, BorderLayout.SOUTH);

        // OTHERS
        okBtn.setActionCommand(OK_CMD);
        cancelBtn.setActionCommand(CANCEL_CMD);

        final ActionListener buttonActions = new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                final String cmd = e.getActionCommand();

                if (CANCEL_CMD.equals(cmd))
                    close();
                else if (OK_CMD.equals(cmd))
                {
                    // do action here
                    if (okAction != null)
                        okAction.actionPerformed(e);
                    // close if wanted
                    if (closeAfterAction)
                        close();
                }
            }
        };

        okBtn.addActionListener(buttonActions);
        cancelBtn.addActionListener(buttonActions);

        okAction = null;
        closeAfterAction = true;
    }

    /**
     * @return the closeAfterAction
     */
    public boolean isCloseAfterAction()
    {
        return closeAfterAction;
    }

    /**
     * @param closeAfterAction
     *        the closeAfterAction to set
     */
    public void setCloseAfterAction(boolean closeAfterAction)
    {
        this.closeAfterAction = closeAfterAction;
    }

    /**
     * @return the okAction
     */
    public ActionListener getOkAction()
    {
        return okAction;
    }

    /**
     * @param okAction
     *        the okAction to set
     */
    public void setOkAction(ActionListener okAction)
    {
        this.okAction = okAction;
    }

    /**
     * @return the okBtn
     */
    public JButton getOkBtn()
    {
        return okBtn;
    }

    /**
     * @return the cancelBtn
     */
    public JButton getCancelBtn()
    {
        return cancelBtn;
    }

}