/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License.  You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See
 * the License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is the Grendel mail/news client.
 *
 * The Initial Developer of the Original Code is Netscape Communications
 * Corporation.  Portions created by Netscape are Copyright (C) 1997
 * Netscape Communications Corporation.  All Rights Reserved.
 */

package grendel.composition;

import java.io.Serializable;
import java.awt.*;
import com.sun.java.swing.*;
import com.sun.java.swing.border.*;

public class OptionsPanel extends JPanel implements Serializable  {
    private final int BOX_WIDTH = 300;
    private final int BOX_HEIGHT = 30;

    public OptionsPanel () {
        super ();

        setLayout(new GridLayout(3, 2, 5, 5));

        addCheck ("Encrypted", "Encrypted", 'e', false);

        addCheck ("Return Receipt", "Return Receipt", 'r', false);

        addCheck ("Signed", "Signed", 'd', false);

        LabeledCombo priority = new LabeledCombo("Priority");
        priority.addPossibleValue("Lowest");
        priority.addPossibleValue("Low");
        priority.addPossibleValue("Normal");
        priority.addPossibleValue("High");
        priority.addPossibleValue("Highest");
        add(new FixedSizedPanel (BOX_WIDTH, BOX_HEIGHT, priority));

        addCheck ("Uuencoded instead of MIME for attachments", "", 'u', false);

        LabeledCombo format = new LabeledCombo("Format");
        format.addPossibleValue("Ask me");
        format.addPossibleValue("Plain Text only");
        format.addPossibleValue("HTML Text only");
        format.addPossibleValue("Plain Text and HTML");
        add(new FixedSizedPanel (BOX_WIDTH, BOX_HEIGHT, format));
    }

    private void addCheck (String aLabel, String aToolTip) {
        addCheck (aLabel, aToolTip, ' ', false);
    }

    private void addCheck (String aLabel, String aToolTip, boolean isChecked) {
        addCheck (aLabel, aToolTip, ' ', isChecked);
    }

    private void addCheck (String aLabel, String aToolTip, char aAccelerator, boolean isChecked) {
                JCheckBox checkButton = new JCheckBox(aLabel, isChecked);

            if (!aToolTip.equals ("")) checkButton.setToolTipText(aToolTip);
        if (' ' != aAccelerator) checkButton.setKeyAccelerator(aAccelerator);

        //create a fixed sized panel.
        add(new FixedSizedPanel (BOX_WIDTH, BOX_HEIGHT, checkButton));
    }

    class FixedSizedPanel extends JPanel {
        FixedSizedPanel (int aWidth, int aHeight, Component aComp) {
            setPreferredSize (new Dimension (aWidth, aHeight));
            setLayout (new BorderLayout ());
            setBorder (BorderFactory.createEmptyBorder (0, 5, 0, 0));
            add ("West", aComp);
        }
    }

    class LabeledCombo extends JPanel {
        JComboBox   mComboBox;
        JLabel      mLabel;

        public LabeledCombo (String aLabel) {

            mComboBox   = new JComboBox ();
            mLabel      = new JLabel (aLabel);

            mComboBox.setPreferredSize (new Dimension (150, 20));

            setLayout (new BorderLayout(5, 5));
//            setInsets (new Insets (5, 5, 5, 5));

            add ("West", mLabel);
            add ("Center", mComboBox);
        }

        public void addPossibleValue(String aValue) {
            mComboBox.insertItemAt (aValue, mComboBox.getItemCount());
        }
    }
}
