1/*
2 * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 *   - Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 *
11 *   - Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in the
13 *     documentation and/or other materials provided with the distribution.
14 *
15 *   - Neither the name of Oracle nor the names of its
16 *     contributors may be used to endorse or promote products derived
17 *     from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/*
33 * This source code is provided to illustrate the usage of a given feature
34 * or technique and has been deliberately simplified. Additional steps
35 * required for a production-quality application, such as security checks,
36 * input validation and proper error handling, might not be present in
37 * this sample code.
38 */
39
40
41
42import java.awt.BorderLayout;
43import java.awt.Component;
44import java.awt.Container;
45import java.awt.Dimension;
46import java.awt.FlowLayout;
47import java.awt.GridLayout;
48import java.awt.Insets;
49import java.awt.LayoutManager;
50import java.awt.event.ActionEvent;
51import java.awt.event.ActionListener;
52import javax.swing.ButtonGroup;
53import javax.swing.JButton;
54import javax.swing.JCheckBox;
55import javax.swing.JComboBox;
56import javax.swing.JDialog;
57import javax.swing.JFrame;
58import javax.swing.JLabel;
59import javax.swing.JPanel;
60import javax.swing.JRadioButton;
61import javax.swing.JTabbedPane;
62import javax.swing.UIManager;
63import javax.swing.border.TitledBorder;
64
65
66/**
67 * This is dialog which allows users to choose preferences
68 *
69 * @author Steve Wilson
70 * @author Alexander Kouznetsov
71 */
72@SuppressWarnings("serial")
73public final class MetalworksPrefs extends JDialog {
74
75    public MetalworksPrefs(JFrame f) {
76        super(f, "Preferences", true);
77        JPanel container = new JPanel();
78        container.setLayout(new BorderLayout());
79
80        JTabbedPane tabs = new JTabbedPane();
81        JPanel filters = buildFilterPanel();
82        JPanel conn = buildConnectingPanel();
83        tabs.addTab("Filters", null, filters);
84        tabs.addTab("Connecting", null, conn);
85
86
87        JPanel buttonPanel = new JPanel();
88        buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
89        JButton cancel = new JButton("Cancel");
90        cancel.addActionListener(new ActionListener() {
91
92            public void actionPerformed(ActionEvent e) {
93                CancelPressed();
94            }
95        });
96        buttonPanel.add(cancel);
97        JButton ok = new JButton("OK");
98        ok.addActionListener(new ActionListener() {
99
100            public void actionPerformed(ActionEvent e) {
101                OKPressed();
102            }
103        });
104        buttonPanel.add(ok);
105        getRootPane().setDefaultButton(ok);
106
107        container.add(tabs, BorderLayout.CENTER);
108        container.add(buttonPanel, BorderLayout.SOUTH);
109        getContentPane().add(container);
110        pack();
111        centerDialog();
112        UIManager.addPropertyChangeListener(new UISwitchListener(container));
113    }
114
115    public JPanel buildFilterPanel() {
116        JPanel filters = new JPanel();
117        filters.setLayout(new GridLayout(1, 0));
118
119        JPanel spamPanel = new JPanel();
120
121        spamPanel.setLayout(new ColumnLayout());
122        spamPanel.setBorder(new TitledBorder("Spam"));
123        ButtonGroup spamGroup = new ButtonGroup();
124        JRadioButton file = new JRadioButton("File in Spam Folder");
125        JRadioButton delete = new JRadioButton("Auto Delete");
126        JRadioButton bomb = new JRadioButton("Reverse Mail-Bomb");
127        spamGroup.add(file);
128        spamGroup.add(delete);
129        spamGroup.add(bomb);
130        spamPanel.add(file);
131        spamPanel.add(delete);
132        spamPanel.add(bomb);
133        file.setSelected(true);
134        filters.add(spamPanel);
135
136        JPanel autoRespond = new JPanel();
137        autoRespond.setLayout(new ColumnLayout());
138        autoRespond.setBorder(new TitledBorder("Auto Response"));
139
140        ButtonGroup respondGroup = new ButtonGroup();
141        JRadioButton none = new JRadioButton("None");
142        JRadioButton vaca = new JRadioButton("Send Vacation Message");
143        JRadioButton thx = new JRadioButton("Send Thank You Message");
144
145        respondGroup.add(none);
146        respondGroup.add(vaca);
147        respondGroup.add(thx);
148
149        autoRespond.add(none);
150        autoRespond.add(vaca);
151        autoRespond.add(thx);
152
153        none.setSelected(true);
154        filters.add(autoRespond);
155
156        return filters;
157    }
158
159    public JPanel buildConnectingPanel() {
160        JPanel connectPanel = new JPanel();
161        connectPanel.setLayout(new ColumnLayout());
162
163        JPanel protoPanel = new JPanel();
164        JLabel protoLabel = new JLabel("Protocol");
165        JComboBox protocol = new JComboBox();
166        protocol.addItem("SMTP");
167        protocol.addItem("IMAP");
168        protocol.addItem("Other...");
169        protoPanel.add(protoLabel);
170        protoPanel.add(protocol);
171
172        JPanel attachmentPanel = new JPanel();
173        JLabel attachmentLabel = new JLabel("Attachments");
174        JComboBox attach = new JComboBox();
175        attach.addItem("Download Always");
176        attach.addItem("Ask size > 1 Meg");
177        attach.addItem("Ask size > 5 Meg");
178        attach.addItem("Ask Always");
179        attachmentPanel.add(attachmentLabel);
180        attachmentPanel.add(attach);
181
182        JCheckBox autoConn = new JCheckBox("Auto Connect");
183        JCheckBox compress = new JCheckBox("Use Compression");
184        autoConn.setSelected(true);
185
186        connectPanel.add(protoPanel);
187        connectPanel.add(attachmentPanel);
188        connectPanel.add(autoConn);
189        connectPanel.add(compress);
190        return connectPanel;
191    }
192
193    protected void centerDialog() {
194        Dimension screenSize = this.getToolkit().getScreenSize();
195        Dimension size = this.getSize();
196        screenSize.height = screenSize.height / 2;
197        screenSize.width = screenSize.width / 2;
198        size.height = size.height / 2;
199        size.width = size.width / 2;
200        int y = screenSize.height - size.height;
201        int x = screenSize.width - size.width;
202        this.setLocation(x, y);
203    }
204
205    public void CancelPressed() {
206        this.setVisible(false);
207    }
208
209    public void OKPressed() {
210        this.setVisible(false);
211    }
212}
213
214
215class ColumnLayout implements LayoutManager {
216
217    int xInset = 5;
218    int yInset = 5;
219    int yGap = 2;
220
221    public void addLayoutComponent(String s, Component c) {
222    }
223
224    public void layoutContainer(Container c) {
225        Insets insets = c.getInsets();
226        int height = yInset + insets.top;
227
228        Component[] children = c.getComponents();
229        Dimension compSize = null;
230        for (Component child : children) {
231            compSize = child.getPreferredSize();
232            child.setSize(compSize.width, compSize.height);
233            child.setLocation(xInset + insets.left, height);
234            height += compSize.height + yGap;
235        }
236
237    }
238
239    public Dimension minimumLayoutSize(Container c) {
240        Insets insets = c.getInsets();
241        int height = yInset + insets.top;
242        int width = 0 + insets.left + insets.right;
243
244        Component[] children = c.getComponents();
245        Dimension compSize = null;
246        for (Component child : children) {
247            compSize = child.getPreferredSize();
248            height += compSize.height + yGap;
249            width = Math.max(width, compSize.width + insets.left + insets.right + xInset
250                    * 2);
251        }
252        height += insets.bottom;
253        return new Dimension(width, height);
254    }
255
256    public Dimension preferredLayoutSize(Container c) {
257        return minimumLayoutSize(c);
258    }
259
260    public void removeLayoutComponent(Component c) {
261    }
262}
263