зеркало из https://github.com/mozilla/gecko-dev.git
480 строки
13 KiB
Java
480 строки
13 KiB
Java
/* -*- 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
|
|
* <edwin@woudt.nl>. 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<idprefs.size(); i++) {
|
|
ids.addElement(idprefs.get(i).getDescription());
|
|
}
|
|
cbIdent = new JComboBox(ids);
|
|
cbIdent.setBounds(270,240,212,cbIdent.getPreferredSize().height);
|
|
pane.add(cbIdent);
|
|
|
|
JButton button = new JButton("Add New");
|
|
button.setBounds(174,290,68,button.getPreferredSize().height);
|
|
button.addActionListener(new AddNewActionListener());
|
|
button.setMargin(new Insets(0,0,0,0));
|
|
pane.add(button);
|
|
button = new JButton("Delete");
|
|
button.setBounds(254,290,68,button.getPreferredSize().height);
|
|
button.addActionListener(new DeleteActionListener());
|
|
button.setMargin(new Insets(0,0,0,0));
|
|
pane.add(button);
|
|
button = new JButton("Cancel");
|
|
button.setBounds(334,290,68,button.getPreferredSize().height);
|
|
button.addActionListener(new FinishActionListener());
|
|
button.setMargin(new Insets(0,0,0,0));
|
|
pane.add(button);
|
|
button = new JButton("Finish");
|
|
button.setBounds(414,290,68,button.getPreferredSize().height);
|
|
button.addActionListener(new FinishActionListener());
|
|
button.setMargin(new Insets(0,0,0,0));
|
|
pane.add(button);
|
|
|
|
String[] data = {"type","local","pop3","imap","news"};
|
|
cbType = new JComboBox(data);
|
|
cbType.addActionListener(new TypeChangedListener());
|
|
cbType.setBounds(422,10,60,cbType.getPreferredSize().height);
|
|
pane.add(cbType);
|
|
|
|
update();
|
|
|
|
}
|
|
|
|
private void update() {
|
|
|
|
String type = "";
|
|
|
|
if (currentSelection > -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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|