jdk/src/share/demo/jfc/Metalworks/MetalworksPrefs.java
author ohair
Tue, 25 May 2010 15:58:33 -0700
changeset 5506 202f599c92aa
parent 2 90ce3da70b43
child 8961 6e8562ef340d
permissions -rw-r--r--
6943119: Rebrand source copyright notices Reviewed-by: darcy, weijun

/*
 * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - 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.
 *
 *   - Neither the name of Oracle nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS 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 THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 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.
 */

/*
 */

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.metal.*;


/**
  * This is dialog which allows users to choose preferences
  *
  * @author Steve Wilson
  */
public class MetalworksPrefs extends JDialog {

    public MetalworksPrefs(JFrame f) {
        super(f, "Preferences", true);
        JPanel container = new JPanel();
        container.setLayout( new BorderLayout() );

        JTabbedPane tabs = new JTabbedPane();
        JPanel filters = buildFilterPanel();
        JPanel conn = buildConnectingPanel();
        tabs.addTab( "Filters", null, filters );
        tabs.addTab( "Connecting", null, conn );


        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout ( new FlowLayout(FlowLayout.RIGHT) );
        JButton cancel = new JButton("Cancel");
        cancel.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) {
                                   CancelPressed();
                               }});
        buttonPanel.add( cancel );
        JButton ok = new JButton("OK");
        ok.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) {
                                   OKPressed();
                               }});
        buttonPanel.add( ok );
        getRootPane().setDefaultButton(ok);

        container.add(tabs, BorderLayout.CENTER);
        container.add(buttonPanel, BorderLayout.SOUTH);
        getContentPane().add(container);
        pack();
        centerDialog();
        UIManager.addPropertyChangeListener(new UISwitchListener(container));
    }

    public JPanel buildFilterPanel() {
        JPanel filters = new JPanel();
        filters.setLayout( new GridLayout(1, 0) );

        JPanel spamPanel = new JPanel();

        spamPanel.setLayout(new ColumnLayout());
        spamPanel.setBorder( new TitledBorder("Spam") );
        ButtonGroup spamGroup = new ButtonGroup();
        JRadioButton file = new JRadioButton("File in Spam Folder");
        JRadioButton delete = new JRadioButton("Auto Delete");
        JRadioButton bomb = new JRadioButton("Reverse Mail-Bomb");
        spamGroup.add(file);
        spamGroup.add(delete);
        spamGroup.add(bomb);
        spamPanel.add(file);
        spamPanel.add(delete);
        spamPanel.add(bomb);
        file.setSelected(true);
        filters.add(spamPanel);

        JPanel autoRespond = new JPanel();
        autoRespond.setLayout(new ColumnLayout());
        autoRespond.setBorder( new TitledBorder("Auto Response") );

        ButtonGroup respondGroup = new ButtonGroup();
        JRadioButton none = new JRadioButton("None");
        JRadioButton vaca = new JRadioButton("Send Vacation Message");
        JRadioButton thx = new JRadioButton("Send Thank You Message");

        respondGroup.add(none);
        respondGroup.add(vaca);
        respondGroup.add(thx);

        autoRespond.add(none);
        autoRespond.add(vaca);
        autoRespond.add(thx);

        none.setSelected(true);
        filters.add(autoRespond);

        return filters;
    }

    public JPanel buildConnectingPanel() {
        JPanel connectPanel = new JPanel();
        connectPanel.setLayout( new ColumnLayout() );

        JPanel protoPanel = new JPanel();
        JLabel protoLabel = new JLabel ("Protocol");
        JComboBox protocol = new JComboBox();
        protocol.addItem("SMTP");
        protocol.addItem("IMAP");
        protocol.addItem("Other...");
        protoPanel.add(protoLabel);
        protoPanel.add(protocol);

        JPanel attachmentPanel = new JPanel();
        JLabel attachmentLabel = new JLabel ("Attachments");
        JComboBox attach = new JComboBox();
        attach.addItem("Download Always");
        attach.addItem("Ask size > 1 Meg");
        attach.addItem("Ask size > 5 Meg");
        attach.addItem("Ask Always");
        attachmentPanel.add(attachmentLabel);
        attachmentPanel.add(attach);

        JCheckBox autoConn = new JCheckBox("Auto Connect");
        JCheckBox compress = new JCheckBox("Use Compression");
        autoConn.setSelected( true );

        connectPanel.add(protoPanel);
        connectPanel.add(attachmentPanel);
        connectPanel.add(autoConn);
        connectPanel.add(compress);
        return connectPanel;
    }



    protected void centerDialog() {
        Dimension screenSize = this.getToolkit().getScreenSize();
        Dimension size = this.getSize();
        screenSize.height = screenSize.height/2;
        screenSize.width = screenSize.width/2;
        size.height = size.height/2;
        size.width = size.width/2;
        int y = screenSize.height - size.height;
        int x = screenSize.width - size.width;
        this.setLocation(x,y);
    }

    public void CancelPressed() {
        this.setVisible(false);
    }

    public void OKPressed() {
        this.setVisible(false);
    }

}

class ColumnLayout implements LayoutManager {

  int xInset = 5;
  int yInset = 5;
  int yGap = 2;

  public void addLayoutComponent(String s, Component c) {}

  public void layoutContainer(Container c) {
      Insets insets = c.getInsets();
      int height = yInset + insets.top;

      Component[] children = c.getComponents();
      Dimension compSize = null;
      for (int i = 0; i < children.length; i++) {
          compSize = children[i].getPreferredSize();
          children[i].setSize(compSize.width, compSize.height);
          children[i].setLocation( xInset + insets.left, height);
          height += compSize.height + yGap;
      }

  }

  public Dimension minimumLayoutSize(Container c) {
      Insets insets = c.getInsets();
      int height = yInset + insets.top;
      int width = 0 + insets.left + insets.right;

      Component[] children = c.getComponents();
      Dimension compSize = null;
      for (int i = 0; i < children.length; i++) {
          compSize = children[i].getPreferredSize();
          height += compSize.height + yGap;
          width = Math.max(width, compSize.width + insets.left + insets.right + xInset*2);
      }
      height += insets.bottom;
      return new Dimension( width, height);
  }

  public Dimension preferredLayoutSize(Container c) {
      return minimumLayoutSize(c);
  }

  public void removeLayoutComponent(Component c) {}

}