/**
 * ============================================================================
 *                   Software License
 * ============================================================================
 *
 *    Copyright (C) 2001 Johannes Zemlin. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modifica-
 * tion, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * 3. The end-user documentation included with the redistribution, if any, must
 *    include the following  acknowledgment: "This product includes software
 *    developed by Johannes Zemlin (http://zemlin-online.de/)."
 *    Alternately, this acknowledgment may appear in the software itself, if
 *    and wherever such third-party acknowledgments normally appear.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE  DISCLAIMED. IN NO  EVENT SHALL
 * JOHANNES ZEMLIN OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
 * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR  PROFITS; OR BUSINESS INTERRUPTION)  HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER  IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package zemlin.fritz;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 *@author     <A href=mailto:Johannes@zemlin-online.de>Johannes Zemin</A>
 *@created    20. August 2001
 */
public class DiffractogramPanel extends Panel {

    private static boolean valid = true;


    /**
     *  Constructor for the DiffractogramPanel object
     */
    public DiffractogramPanel() {

        setLayout(new BorderLayout());

        final String def = "Default";
        final String parameter = "Parameter";
        final String tableau = "Tableau";
        final String aberration = "Aberration";

        final Panel card = new Panel();
        final CardLayout cl = new CardLayout();
        card.setLayout(cl);

        final TableauCanvas c = new TableauCanvas();
        final AberrationCanvas a = new AberrationCanvas(5);
        final GreyCanvas g = new GreyCanvas(5);

        Panel ag = new Panel();
        ag.setLayout(new BorderLayout());
        ag.add(a, BorderLayout.CENTER);
        ag.add(g, BorderLayout.EAST);

        final ParameterPanel p = new ParameterPanel();
        card.add(p, parameter);
        card.add(c, tableau);
        card.add(ag, aberration);

        final Button btnDefault = new Button(def);
        final Button btnParameter = new Button(parameter);
        final Button btnTableau = new Button(tableau);
        final Button btnAberration = new Button(aberration);

        btnDefault.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent evt) {

                    p.setError(" ");
                    p.setDelta(2.7);
                    p.setDeltaA(0.23);
                    p.setFiA(-88);
                    p.setR0(1.1);
                    p.setB(0.68);
                    p.setFiB(-75);
                    p.setA3(0.06);
                    p.setFiA3(13);
                    cl.show(card, parameter);
                    card.repaint();
                }
            });

        ActionListener rp =
            new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    try {
                        p.setError(" ");
                        c.setDelta(p.getDelta());
                        c.setDeltaA(p.getDeltaA());
                        c.setFiA(p.getFiA());
                        c.setR0(p.getR0());
                        c.setB(p.getB());
                        c.setFiB(p.getFiB());
                        c.setA3(p.getA3());
                        c.setFiA3(p.getFiA3());
                        //cl.next(card);

                        a.setDelta(p.getDelta());
                        a.setDeltaA(p.getDeltaA());
                        a.setFiA(p.getFiA());
                        a.setR0(p.getR0());
                        a.setB(p.getB());
                        a.setFiB(p.getFiB());
                        a.setA3(p.getA3());
                        a.setFiA3(p.getFiA3());

                        valid = true;
                    } catch (Exception e) {
                        e.printStackTrace();
                        valid = false;
                    }
                }
            };
        btnTableau.addActionListener(rp);
        btnAberration.addActionListener(rp);

        btnParameter.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    cl.show(card, parameter);
                    card.repaint();
                }
            });

        btnTableau.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if (valid) {
                        cl.show(card, tableau);
                        card.repaint();
                    }
                }
            });

        btnAberration.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if (valid) {
                        cl.show(card, aberration);
                        card.repaint();
                    }
                }
            });

        Panel bp = new Panel(new FlowLayout());
        bp.add(btnDefault);
        bp.add(btnParameter);
        bp.add(btnTableau);
        bp.add(btnAberration);
        add(bp, BorderLayout.NORTH);

        add(card, BorderLayout.CENTER);
    }


    /**
     *  Hier startet das Programm mit den Argumenten args.
     *
     *@param  args  The command line arguments
     */
    public static void main(String[] args) {

        Frame frm = new Frame();
        frm.setTitle("Fritz Tableau");

        frm.add(new DiffractogramPanel());

        // Position und Größe setzen
        frm.setBounds(100, 100, 500, 500);

        frm.addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent evt) {
                    System.exit(0);
                }
            });

        frm.setVisible(true);
    }

}

