1 17 package org.columba.mail.gui.config.accountwizard; 18 19 import java.lang.reflect.Method ; 20 21 import javax.swing.Box ; 22 import javax.swing.BoxLayout ; 23 import javax.swing.JComponent ; 24 import javax.swing.JLabel ; 25 import javax.swing.JPanel ; 26 import javax.swing.JTextField ; 27 import javax.swing.SwingUtilities ; 28 import javax.swing.event.DocumentEvent ; 29 import javax.swing.event.DocumentListener ; 30 31 import net.javaprog.ui.wizard.AbstractStep; 32 import net.javaprog.ui.wizard.DataLookup; 33 import net.javaprog.ui.wizard.DataModel; 34 import net.javaprog.ui.wizard.DefaultDataLookup; 35 36 import org.columba.core.gui.base.LabelWithMnemonic; 37 import org.columba.core.gui.base.MultiLineLabel; 38 import org.columba.core.gui.base.WizardTextField; 39 import org.columba.mail.util.MailResourceLoader; 40 import org.columba.ristretto.message.Address; 41 import org.columba.ristretto.parser.ParserException; 42 43 class IdentityStep extends AbstractStep { 44 protected DataModel data; 45 protected JTextField nameTextField; 46 protected JTextField addressTextField; 47 protected JTextField accountNameTextField; 48 49 public IdentityStep(DataModel data) { 50 super(MailResourceLoader.getString("dialog", "accountwizard", "identity"), 51 MailResourceLoader.getString("dialog", "accountwizard", 52 "identity_description")); 53 this.data = data; 54 setCanGoNext(false); 55 } 56 57 protected JComponent createComponent() { 58 JComponent component = new JPanel (); 59 component.setLayout(new BoxLayout (component, BoxLayout.Y_AXIS)); 60 component.add(new MultiLineLabel(MailResourceLoader.getString( 61 "dialog", "accountwizard", "identity_text"))); 62 component.add(Box.createVerticalStrut(40)); 63 64 WizardTextField middlePanel = new WizardTextField(); 65 66 LabelWithMnemonic nameLabel = new LabelWithMnemonic(MailResourceLoader.getString( 67 "dialog", "accountwizard", "name")); 68 middlePanel.addLabel(nameLabel); 69 nameTextField = new JTextField (); 70 71 DocumentListener fieldListener = new DocumentListener () { 72 public void removeUpdate(DocumentEvent e) { 73 checkFields(); 74 } 75 76 public void insertUpdate(DocumentEvent e) { 77 checkFields(); 78 } 79 80 protected void checkFields() { 81 String s = addressTextField.getText(); 82 setCanGoNext((nameTextField.getDocument().getLength() > 0) && 83 (s.length() > 0) && isEmailAddress(s) && 84 (accountNameTextField.getDocument().getLength() > 0)); 85 } 86 87 protected boolean isEmailAddress(String s) { 88 int at = s.indexOf('@'); 89 int lastDot = s.lastIndexOf('.'); 90 91 return (at > 0) && (lastDot > (at + 1)) && 92 (lastDot < (s.length() - 1)); 93 } 94 95 public void changedUpdate(DocumentEvent e) { 96 } 97 }; 98 99 nameTextField.getDocument().addDocumentListener(fieldListener); 100 nameLabel.setLabelFor(nameTextField); 101 middlePanel.addTextField(nameTextField); 102 103 JLabel exampleLabel = new JLabel (MailResourceLoader.getString( 104 "dialog", "accountwizard", "example") + "Bill Gates"); 105 middlePanel.addExample(exampleLabel); 106 107 LabelWithMnemonic addressLabel = new LabelWithMnemonic(MailResourceLoader.getString( 108 "dialog", "accountwizard", "address")); 109 middlePanel.addLabel(addressLabel); 110 addressTextField = new JTextField (); 111 addressTextField.getDocument().addDocumentListener(fieldListener); 112 addressLabel.setLabelFor(addressTextField); 113 middlePanel.addTextField(addressTextField); 114 middlePanel.addExample(new JLabel (MailResourceLoader.getString( 115 "dialog", "accountwizard", "example") + 116 "BillGates@microsoft.com")); 117 118 LabelWithMnemonic accountNameLabel = new LabelWithMnemonic(MailResourceLoader.getString( 119 "dialog", "accountwizard", "accountname")); 120 middlePanel.addLabel(accountNameLabel); 121 accountNameTextField = new JTextField (); 122 Method method = null; 123 try { 124 method = accountNameTextField.getClass().getMethod("getText", null); 125 } catch (NoSuchMethodException nsme) {} 126 data.registerDataLookup("Identity.accountName", 127 new DefaultDataLookup(accountNameTextField, method, null)); 128 accountNameTextField.getDocument().addDocumentListener(fieldListener); 129 accountNameLabel.setLabelFor(accountNameTextField); 130 middlePanel.addTextField(accountNameTextField); 131 middlePanel.addExample(new JLabel (MailResourceLoader.getString( 132 "dialog", "accountwizard", "example") + 133 "Bill's private mail")); 134 component.add(middlePanel); 135 136 data.registerDataLookup("Identity.address", new DataLookup() { 137 public Object lookupData() { 138 try { 139 Address address = Address.parse(addressTextField.getText()); 140 address.setDisplayName(nameTextField.getText()); 141 return address; 142 } catch (ParserException pe) { 143 return null; 144 } 145 } 146 }); 147 return component; 148 } 149 150 public void prepareRendering() { 151 SwingUtilities.invokeLater(new Runnable () { 152 public void run() { 153 nameTextField.requestFocus(); 154 } 155 }); 156 } 157 } 158 | Popular Tags |