/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Mozilla Public * License Version 1.1 (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 Edwin Woudt * . Portions created by Edwin Woudt are * Copyright (C) 1999 Edwin Woudt. All * Rights Reserved. * * Contributor(s): */ package grendel.prefs.ui; import java.util.Vector; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.AbstractListModel; import javax.swing.ButtonGroup; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import grendel.prefs.base.ServerArray; import grendel.prefs.base.ServerStructure; import grendel.prefs.base.IdentityArray; import grendel.prefs.base.IdentityStructure; import grendel.ui.StoreFactory; public class Servers extends JFrame { JPanel pane; JList list; JTextField tfDesc; JComboBox cbType; JTextField tfHost; JTextField tfPort; JTextField tfUser; JPasswordField tfPass; JComboBox cbIdent; JTextField tfDir; JButton btChoose; JRadioButton rbToLocal; JRadioButton rbAsImap; JCheckBox cbLeave; JComboBox cbStore; JLabel lbDesc; JLabel lbHost; JLabel lbPort; JLabel lbUser; JLabel lbPass; JLabel lbDir; JLabel lbIdent; ServerArray sva; ServerListModel slm; int currentSelection = -1; public static void main(String argv[]) { Servers servers = new Servers(); servers.show(); } public Servers() { super(); sva = ServerArray.GetMaster(); setSize(500,354); setDefaultCloseOperation(DISPOSE_ON_CLOSE); pane = new JPanel(); pane.setLayout(null); getContentPane().add(pane); slm = new ServerListModel(); list = new JList(slm); list.setSelectedIndex(0); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setBounds(12,12,142,306); list.addListSelectionListener(new SelectionChangedListener()); pane.add(list); lbDesc = new JLabel("Description"); lbDesc.setBounds(174,12,lbDesc.getPreferredSize().width,lbDesc.getPreferredSize().height); pane.add(lbDesc); lbHost = new JLabel("Hostname"); lbHost.setBounds(174,60,lbHost.getPreferredSize().width,lbHost.getPreferredSize().height); pane.add(lbHost); lbPort = new JLabel("Port"); lbPort.setBounds(414,60,lbPort.getPreferredSize().width,lbPort.getPreferredSize().height); pane.add(lbPort); lbUser = new JLabel("Username"); lbUser.setBounds(174,92,lbUser.getPreferredSize().width,lbUser.getPreferredSize().height); pane.add(lbUser); lbPass = new JLabel("Password"); lbPass.setBounds(334,92,lbPass.getPreferredSize().width,lbPass.getPreferredSize().height); pane.add(lbPass); lbDir = new JLabel("Directory"); lbDir.setBounds(174,60,lbDir.getPreferredSize().width,lbDir.getPreferredSize().height); pane.add(lbDir); lbIdent = new JLabel("Default identity"); lbIdent.setBounds(174,244,lbIdent.getPreferredSize().width,lbIdent.getPreferredSize().height); pane.add(lbIdent); tfDesc = new JTextField(); tfDesc.setBounds(254,12,156,tfDesc.getPreferredSize().height); pane.add(tfDesc); tfHost = new JTextField(); tfHost.setBounds(244,60,160,tfHost.getPreferredSize().height); pane.add(tfHost); tfPort = new JTextField(); tfPort.setBounds(442,60,40,tfPort.getPreferredSize().height); pane.add(tfPort); tfUser = new JTextField(); tfUser.setBounds(244,92,76,tfUser.getPreferredSize().height); pane.add(tfUser); tfPass = new JPasswordField(); tfPass.setBounds(404,92,76,tfPass.getPreferredSize().height); pane.add(tfPass); tfDir = new JTextField(); tfDir.setBounds(254,60,156,tfDir.getPreferredSize().height); pane.add(tfDir); btChoose = new JButton("Choose"); btChoose.setMargin(new Insets(0,0,0,0)); btChoose.setBounds(422,58,60,btChoose.getPreferredSize().height); btChoose.addActionListener(new ChooseDirectoryActionListener()); pane.add(btChoose); rbToLocal = new JRadioButton("Download everything to a local store"); rbToLocal.setBounds(174,140,rbToLocal.getPreferredSize().width,rbToLocal.getPreferredSize().height); pane.add(rbToLocal); rbAsImap = new JRadioButton("Manipulate everything on the server"); rbAsImap.setBounds(174,204,rbAsImap.getPreferredSize().width,rbAsImap.getPreferredSize().height); pane.add(rbAsImap); ButtonGroup bg = new ButtonGroup(); bg.add(rbToLocal); bg.add(rbAsImap); cbLeave = new JCheckBox("But leave all mail on the server"); cbLeave.setBounds(190,160,cbLeave.getPreferredSize().width,cbLeave.getPreferredSize().height); pane.add(cbLeave); Vector ids = new Vector(); IdentityArray idprefs = IdentityArray.GetMaster(); for (int i=0; i -1) { sva.get(currentSelection).setDescription(tfDesc.getText()); sva.get(currentSelection).setHost (tfHost.getText()); sva.get(currentSelection).setPort (Integer.parseInt(tfPort.getText())); sva.get(currentSelection).setUsername (tfUser.getText()); sva.get(currentSelection).setPassword (tfPass.getText()); int index = cbType.getSelectedIndex(); if (index == 1) { type = "berkeley"; } if (index == 2) { type = "pop3"; } if (index == 3) { type = "imap"; } if (index == 4) { type = "news"; } sva.get(currentSelection).setType (type); sva.get(currentSelection).setBerkeleyDirectory(tfDir.getText()); sva.get(currentSelection).setDefaultIdentity(cbIdent.getSelectedIndex()); } tfDesc.setText(sva.get(list.getSelectedIndex()).getDescription()); tfHost.setText(sva.get(list.getSelectedIndex()).getHost()); tfPort.setText("" + sva.get(list.getSelectedIndex()).getPort()); tfUser.setText(sva.get(list.getSelectedIndex()).getUsername()); tfPass.setText(sva.get(list.getSelectedIndex()).getPassword()); int index = 0; type = sva.get(list.getSelectedIndex()).getType(); if (type.equals("berkeley")) { index = 1; } if (type.equals("pop3" )) { index = 2; } if (type.equals("imap" )) { index = 3; } if (type.equals("news" )) { index = 4; } cbType.setSelectedIndex(index); tfDir.setText(sva.get(list.getSelectedIndex()).getBerkeleyDirectory()); cbIdent.setSelectedIndex(sva.get(list.getSelectedIndex()).getDefaultIdentity()); currentSelection = list.getSelectedIndex(); } void showNothing() { tfHost.hide(); lbHost.hide(); tfPort.hide(); lbPort.hide(); tfUser.hide(); lbUser.hide(); tfPass.hide(); lbPass.hide(); cbIdent.hide();lbIdent.hide(); tfDir.hide(); lbDir.hide(); btChoose.hide(); rbToLocal.hide(); rbAsImap.hide(); cbLeave.hide(); pane.repaint(new Rectangle(pane.getSize())); } void showBerkeley() { tfHost.hide(); lbHost.hide(); tfPort.hide(); lbPort.hide(); tfUser.hide(); lbUser.hide(); tfPass.hide(); lbPass.hide(); cbIdent.show();lbIdent.show(); tfDir.show(); lbDir.show(); btChoose.show(); rbToLocal.hide(); rbAsImap.hide(); cbLeave.hide(); pane.repaint(new Rectangle(pane.getSize())); } void showPOP3() { tfHost.show(); lbHost.show(); tfPort.show(); lbPort.show(); tfUser.show(); lbUser.show(); tfPass.show(); lbPass.show(); cbIdent.show();lbIdent.show(); tfDir.hide(); lbDir.hide(); btChoose.hide(); rbToLocal.show(); rbAsImap.show(); cbLeave.show(); pane.repaint(new Rectangle(pane.getSize())); } void showIMAP() { tfHost.show(); lbHost.show(); tfPort.show(); lbPort.show(); tfUser.show(); lbUser.show(); tfPass.show(); lbPass.show(); cbIdent.show();lbIdent.show(); tfDir.hide(); lbDir.hide(); btChoose.hide(); rbToLocal.hide(); rbAsImap.hide(); cbLeave.hide(); pane.repaint(new Rectangle(pane.getSize())); } void showNews() { tfHost.show(); lbHost.show(); tfPort.show(); lbPort.show(); tfUser.hide(); lbUser.hide(); tfPass.hide(); lbPass.hide(); cbIdent.show();lbIdent.show(); tfDir.hide(); lbDir.hide(); btChoose.hide(); rbToLocal.hide(); rbAsImap.hide(); cbLeave.hide(); pane.repaint(new Rectangle(pane.getSize())); } void chooseDir() { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { tfDir.setText(fc.getSelectedFile().getAbsolutePath()); } } class SelectionChangedListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { update(); } } } class AddNewActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { sva.add(new ServerStructure("New Server")); slm.fireAdded(sva.size()-1); list.setSelectedIndex(sva.size()-1); update(); } } class DeleteActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex(); sva.remove(index); slm.fireRemoved(index); currentSelection = -1; if (index >= sva.size()) { index = sva.size()-1; } if (sva.size() <= 0) { sva.add(new ServerStructure("New Server")); index = 0; } list.setSelectedIndex(index); update(); } } class FinishActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { update(); sva.writePrefs(); StoreFactory.Instance().refreshStores(); hide(); dispose(); } } class CancelActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { sva.readPrefs(); hide(); dispose(); } } class TypeChangedListener implements ActionListener { public void actionPerformed(ActionEvent e) { int index = cbType.getSelectedIndex(); if (index == 0) { showNothing(); } if (index == 1) { showBerkeley(); } if (index == 2) { showPOP3(); } if (index == 3) { showIMAP(); } if (index == 4) { showNews(); } } } class ChooseDirectoryActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { chooseDir(); } } class ServerListModel extends AbstractListModel { public Object getElementAt(int index) { return sva.get(index).getDescription(); } public int getSize() { return sva.size(); } public void fireAdded(int index) { fireIntervalAdded(this, index, index); } public void fireRemoved(int index) { fireIntervalRemoved(this, index, index); } } }