/*
 * File:     StartStopPanel.java
 * Project:  MPI Linguistic Application
 * Date:     03 April 2006
 *
 * Copyright (C) 2001-2006  Max Planck Institute for Psycholinguistics
 *
 * 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.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package mpi.search.viewer;

import mpi.search.SearchLocale;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;


/**
 * Panel with two or three buttons; a start or a stop button in card layout (and
 * optionally a close button) are shown Created on Oct 5, 2004
 *
 * @author Alexander Klassmann
 * @version Oct 5, 2004
 */
public class StartStopPanel extends JPanel {
    /** To change between start- and stop-Button */
    private final CardLayout startPanelLayout = new CardLayout(0, 0);

    /** Panel to contain a start- and a stop-button */
    private final JPanel startStopPlaceHolderPanel = new JPanel(startPanelLayout);

    /** Panel that contains all three buttons */
    private final JPanel buttonPanel;

    /**
     *
     * @param startAction
     * @param stopAction
     */
    public StartStopPanel(Action startAction, Action stopAction) {
        this(startAction, stopAction, new Action[0]);
    }

    public StartStopPanel(Action startAction, Action stopAction,
        Action closeAction) {
        this(startAction, stopAction, new Action[] { closeAction });
    }

    /**
     *
     * @param startAction
     * @param stopAction
     * @param closeAction
     */
    public StartStopPanel(Action startAction, Action stopAction,
        Action[] furtherActions) {
        JButton startButton = new JButton(startAction);
        startButton.setText(SearchLocale.getString("Button.Search"));
        startButton.setIcon(null);
        startStopPlaceHolderPanel.add("SearchButton", startButton);

        JButton stopButton = new JButton(stopAction);
        stopButton.setText(SearchLocale.getString("Button.Cancel"));
        stopButton.setIcon(null);
        startStopPlaceHolderPanel.add("StopButton", stopButton);

        buttonPanel = new JPanel(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.insets = new Insets(0, 2, 0, 2);
        c.ipady = 2;
        buttonPanel.add(startStopPlaceHolderPanel, c);

        for (int i = 0; i < furtherActions.length; i++) {
            if (furtherActions[i] instanceof Action) {
                JButton button = new JButton((Action) furtherActions[i]);
                buttonPanel.add(button, c);
            } else if (furtherActions[i] instanceof JComponent) {
                buttonPanel.add((JComponent) furtherActions[i], c);
            }
        }

        //enclosing panel needed to avoid resizing of the buttons!
        add(buttonPanel);
    }

    public void setBackgroundColor(Color color) {
        buttonPanel.setBackground(color);
        super.setBackground(color);
    }

    /**
     * Shows stop button
     */
    public void showStopButton() {
        startPanelLayout.last(startStopPlaceHolderPanel);
    }

    /**
     * Shows start button
     */
    public void showStartButton() {
        startPanelLayout.first(startStopPlaceHolderPanel);
    }
}
