1 package org.columba.mail.gui.composer.contact; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Dimension ; 22 import java.awt.GridLayout ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import java.awt.event.KeyEvent ; 26 import java.awt.event.MouseEvent ; 27 import java.util.List ; 28 29 import javax.swing.BorderFactory ; 30 import javax.swing.JButton ; 31 import javax.swing.JComboBox ; 32 import javax.swing.JComponent ; 33 import javax.swing.JDialog ; 34 import javax.swing.JFrame ; 35 import javax.swing.JLabel ; 36 import javax.swing.JPanel ; 37 import javax.swing.JScrollPane ; 38 import javax.swing.KeyStroke ; 39 import javax.swing.ListModel ; 40 import javax.swing.SwingConstants ; 41 42 import org.columba.addressbook.facade.IContactFacade; 43 import org.columba.addressbook.facade.IFolder; 44 import org.columba.addressbook.facade.IFolderFacade; 45 import org.columba.addressbook.facade.IHeaderItem; 46 import org.columba.api.exception.ServiceNotFoundException; 47 import org.columba.core.gui.base.ButtonWithMnemonic; 48 import org.columba.core.gui.base.DoubleClickListener; 49 import org.columba.core.gui.base.SingleSideEtchedBorder; 50 import org.columba.mail.connector.ServiceConnector; 51 import org.columba.mail.gui.contact.list.ContactDNDListView; 52 import org.columba.mail.gui.contact.list.ContactListModel; 53 import org.columba.mail.util.MailResourceLoader; 54 55 import com.jgoodies.forms.builder.PanelBuilder; 56 import com.jgoodies.forms.layout.CellConstraints; 57 import com.jgoodies.forms.layout.FormLayout; 58 59 public class SelectAddressDialog extends JDialog implements ActionListener { 60 61 private static final java.util.logging.Logger LOG = java.util.logging.Logger 62 .getLogger("org.columba.addressbook.gui"); 64 private ContactDNDListView toList; 66 67 private ContactDNDListView ccList; 68 69 private ContactDNDListView bccList; 70 71 private ContactDNDListView addressbookList; 73 74 private JButton toButton; 76 77 private JButton ccButton; 78 79 private JButton bccButton; 80 81 private JButton toRemoveButton; 82 83 private JButton ccRemoveButton; 84 85 private JButton bccRemoveButton; 86 87 private JLabel toLabel; 89 90 private JLabel ccLabel; 91 92 private JLabel bccLabel; 93 94 private FolderComboBox chooseComboBox; 96 97 private JLabel chooseLabel; 98 99 private ContactListModel[] dialogAddressbookListModel; 101 102 private List <IHeaderItem> toListModel; 103 104 private List <IHeaderItem> ccListModel; 105 106 private List <IHeaderItem> bccListModel; 107 108 private ButtonWithMnemonic cancelButton; 109 110 private ButtonWithMnemonic okButton; 111 112 private boolean success; 113 114 public SelectAddressDialog(JFrame frame, List <IHeaderItem> toListModel, 115 List <IHeaderItem> ccListModel, List <IHeaderItem> bccListModel) { 116 super(frame, true); 117 118 setTitle(MailResourceLoader.getString("dialog", "selectaddressdialog", 119 "title")); 120 121 this.toListModel = toListModel; 122 this.ccListModel = ccListModel; 123 this.bccListModel = bccListModel; 124 125 dialogAddressbookListModel = new ContactListModel[3]; 126 127 initComponents(); 128 129 layoutComponents(); 130 131 try { 133 IContactFacade contactFacade = ServiceConnector.getContactFacade(); 134 IFolderFacade folderFacade = ServiceConnector.getFolderFacade(); 135 IFolder folder = folderFacade.getLocalAddressbook(); 136 List <IHeaderItem> list = contactFacade.getAllHeaderItems(folder 137 .getId(), false); 138 139 addressbookList.setHeaderItemList(list); 140 } catch (ServiceNotFoundException e) { 141 e.printStackTrace(); 142 } 143 144 pack(); 145 setLocationRelativeTo(null); 146 147 setVisible(true); 148 } 149 150 public List <IHeaderItem> getToList() { 151 return toListModel; 152 } 153 154 public List <IHeaderItem> getCcList() { 155 return ccListModel; 156 } 157 158 public List <IHeaderItem> getBccList() { 159 return bccListModel; 160 } 161 162 165 private JPanel createButtonPanel() { 166 JPanel panel = new JPanel (); 167 FormLayout layout = new FormLayout( 168 "fill:default:grow, 6px, fill:default:grow, 6px, fill:default:grow", "default"); 171 PanelBuilder builder = new PanelBuilder(layout, panel); 172 CellConstraints cc = new CellConstraints(); 173 174 builder.add(toButton, cc.xy(1, 1)); 175 builder.add(ccButton, cc.xy(3, 1)); 176 builder.add(bccButton, cc.xy(5, 1)); 177 178 return panel; 179 } 180 181 private JPanel createRemoveButtonPanel() { 182 JPanel panel = new JPanel (); 183 FormLayout layout = new FormLayout( 184 "fill:default:grow, 6px, fill:default:grow, 6px, fill:default:grow", "default"); 187 PanelBuilder builder = new PanelBuilder(layout, panel); 188 CellConstraints cc = new CellConstraints(); 189 190 builder.add(toRemoveButton, cc.xy(1, 1)); 191 builder.add(ccRemoveButton, cc.xy(3, 1)); 192 builder.add(bccRemoveButton, cc.xy(5, 1)); 193 194 return panel; 195 } 196 197 private JPanel createAddressbookPanel() { 198 JPanel panel = new JPanel (); 199 FormLayout layout = new FormLayout("default, 6px, fill:default:grow", "default, 12px, fill:default:grow, 6px, default, 6px, default"); 202 PanelBuilder builder = new PanelBuilder(layout, panel); 203 CellConstraints cc = new CellConstraints(); 204 205 builder.add(chooseLabel, cc.xy(1, 1)); 206 builder.add(chooseComboBox, cc.xy(3, 1)); 207 builder.add(new JScrollPane (addressbookList), cc.xywh(1, 3, 3, 1)); 208 builder.add(createButtonPanel(), cc.xywh(1, 5, 3, 1)); 209 builder.add(createRemoveButtonPanel(), cc.xywh(1, 7, 3, 1)); 210 211 return panel; 212 } 213 214 private JPanel createRecipientsPanel() { 215 JPanel panel = new JPanel (); 216 FormLayout layout = new FormLayout( 217 "fill:default:grow", "default, 6px, fill:default:grow, 12px, default, 6px, fill:default:grow, 12px, default, 6px, fill:default:grow"); 220 PanelBuilder builder = new PanelBuilder(layout, panel); 221 CellConstraints cc = new CellConstraints(); 222 223 int y = 1; 224 builder.add(toLabel, cc.xy(1, y)); 225 y += 2; 226 builder.add(new JScrollPane (toList), cc.xy(1, y)); 227 y += 2; 228 builder.add(ccLabel, cc.xy(1, y)); 229 y += 2; 230 builder.add(new JScrollPane (ccList), cc.xy(1, y)); 231 y += 2; 232 builder.add(bccLabel, cc.xy(1, y)); 233 y += 2; 234 builder.add(new JScrollPane (bccList), cc.xy(1, y)); 235 236 return panel; 237 } 238 239 private void layoutComponents() { 240 getContentPane().setLayout(new BorderLayout ()); 241 242 JPanel mainPanel = new JPanel (new BorderLayout ()); 243 mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 244 245 FormLayout layout = new FormLayout( 246 "fill:default:grow, 12px, fill:default:grow", "fill:default:grow"); 249 CellConstraints cc = new CellConstraints(); 250 mainPanel.setLayout(layout); 251 252 mainPanel.add(createAddressbookPanel(), cc.xy(1, 1)); 253 mainPanel.add(createRecipientsPanel(), cc.xy(3, 1)); 254 255 getContentPane().add(mainPanel, BorderLayout.CENTER); 256 257 JPanel bottomPanel = new JPanel (new BorderLayout ()); 258 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 259 260 JPanel buttonPanel = new JPanel (new GridLayout (1, 2, 6, 0)); 261 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 262 buttonPanel.add(okButton); 263 264 buttonPanel.add(cancelButton); 265 bottomPanel.add(buttonPanel, BorderLayout.EAST); 266 getContentPane().add(bottomPanel, BorderLayout.SOUTH); 267 } 268 269 private void initComponents() { 270 toLabel = new JLabel (MailResourceLoader.getString("dialog", 271 "selectaddressdialog", "to")); 273 dialogAddressbookListModel[0] = new ContactListModel(); 274 dialogAddressbookListModel[0].setHeaderItemList(toListModel); 275 toList = new ContactDNDListView(dialogAddressbookListModel[0]); 276 toList.setMinimumSize(new Dimension (150, 150)); 277 toList.addMouseListener(new DoubleClickListener() { 278 279 public void doubleClick(MouseEvent ev) { 280 actionPerformed(new ActionEvent (toList, 0, "TO_REMOVE")); 281 } 282 283 }); 284 285 ccLabel = new JLabel (MailResourceLoader.getString("dialog", 286 "selectaddressdialog", "cc")); 288 dialogAddressbookListModel[1] = new ContactListModel(); 289 dialogAddressbookListModel[1].setHeaderItemList(ccListModel); 290 ccList = new ContactDNDListView(dialogAddressbookListModel[1]); 291 ccList.setMinimumSize(new Dimension (150, 150)); 292 ccList.addMouseListener(new DoubleClickListener() { 293 294 public void doubleClick(MouseEvent ev) { 295 actionPerformed(new ActionEvent (ccList, 0, "CC_REMOVE")); 296 } 297 298 }); 299 300 bccLabel = new JLabel (MailResourceLoader.getString("dialog", 301 "selectaddressdialog", "bcc")); 303 dialogAddressbookListModel[2] = new ContactListModel(); 304 dialogAddressbookListModel[2].setHeaderItemList(bccListModel); 305 bccList = new ContactDNDListView(dialogAddressbookListModel[2]); 306 bccList.setMinimumSize(new Dimension (150, 150)); 307 bccList.addMouseListener(new DoubleClickListener() { 308 309 public void doubleClick(MouseEvent ev) { 310 actionPerformed(new ActionEvent (bccList, 0, "BCC_REMOVE")); 311 } 312 313 }); 314 315 toButton = new JButton (MailResourceLoader.getString("dialog", 316 "selectaddressdialog", "right_arrow_to")); toButton.addActionListener(this); 318 toButton.setActionCommand("TO"); 320 toRemoveButton = new JButton (MailResourceLoader.getString( 321 "dialog", "selectaddressdialog", "left_arrow_to")); toRemoveButton.addActionListener(this); 323 toRemoveButton.setActionCommand("TO_REMOVE"); 325 ccButton = new JButton (MailResourceLoader.getString("dialog", 326 "selectaddressdialog", "right_arrow_cc")); ccButton.addActionListener(this); 328 ccButton.setActionCommand("CC"); 330 ccRemoveButton = new JButton (MailResourceLoader.getString( 331 "dialog", "selectaddressdialog", "left_arrow_cc")); ccRemoveButton.addActionListener(this); 333 ccRemoveButton.setActionCommand("CC_REMOVE"); 335 bccButton = new JButton (MailResourceLoader.getString("dialog", 336 "selectaddressdialog", "right_arrow_bcc")); bccButton.addActionListener(this); 338 bccButton.setActionCommand("BCC"); 340 bccRemoveButton = new JButton (MailResourceLoader.getString( 341 "dialog", "selectaddressdialog", "left_arrow_bcc")); bccRemoveButton.addActionListener(this); 343 bccRemoveButton.setActionCommand("BCC_REMOVE"); 345 chooseLabel = new JLabel (MailResourceLoader.getString("dialog", 346 "selectaddressdialog", "addressbook")); 348 chooseComboBox = new FolderComboBox(false); 349 350 chooseComboBox.setActionCommand("CHOOSE"); chooseComboBox.addActionListener(this); 352 353 addressbookList = new ContactDNDListView(); 354 addressbookList.setMinimumSize(new Dimension (450, 200)); 355 addressbookList.setAcceptDrop(false); 356 addressbookList.addMouseListener(new DoubleClickListener() { 357 358 public void doubleClick(MouseEvent ev) { 359 actionPerformed(new ActionEvent (addressbookList, 0, "TO")); 360 } 361 362 }); 363 364 okButton = new ButtonWithMnemonic(MailResourceLoader.getString( 365 "global", "ok")); okButton.setActionCommand("OK"); okButton.addActionListener(this); 368 369 cancelButton = new ButtonWithMnemonic(MailResourceLoader.getString( 370 "global", "cancel")); cancelButton.setActionCommand("CANCEL"); cancelButton.addActionListener(this); 373 374 getRootPane().setDefaultButton(okButton); 375 getRootPane().registerKeyboardAction(this, "CANCEL", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 377 JComponent.WHEN_IN_FOCUSED_WINDOW); 378 } 379 380 383 public boolean isSuccess() { 384 return success; 385 } 386 387 public void actionPerformed(ActionEvent e) { 388 String command = e.getActionCommand(); 389 390 if (command.equals("CANCEL")) { setVisible(false); 392 } else if (command.equals("OK")) { success = true; 394 395 setVisible(false); 396 397 401 } else if (command.equals("TO")) { 419 int[] array = addressbookList.getSelectedIndices(); 420 ListModel model = addressbookList.getModel(); 421 IHeaderItem item; 422 423 for (int j = 0; j < array.length; j++) { 424 item = (IHeaderItem) model.getElementAt(array[j]); 425 dialogAddressbookListModel[0].addElement(item 426 ); 427 } 428 } else if (command.equals("CC")) { 430 int[] array = addressbookList.getSelectedIndices(); 431 ListModel model = addressbookList.getModel(); 432 IHeaderItem item; 433 434 for (int j = 0; j < array.length; j++) { 435 item = (IHeaderItem) model.getElementAt(array[j]); 436 dialogAddressbookListModel[1].addElement(item 437 ); 438 } 439 } else if (command.equals("BCC")) { 441 int[] array = addressbookList.getSelectedIndices(); 442 ListModel model = addressbookList.getModel(); 443 IHeaderItem item; 444 445 for (int j = 0; j < array.length; j++) { 446 item = (IHeaderItem) model.getElementAt(array[j]); 447 dialogAddressbookListModel[2].addElement(item); 448 } 449 } else if (command.equals("TO_REMOVE")) { 451 Object [] array = toList.getSelectedValues(); 452 453 for (int j = 0; j < array.length; j++) { 454 dialogAddressbookListModel[0] 455 .removeElement((IHeaderItem) array[j]); 456 } 457 } else if (command.equals("CC_REMOVE")) { 459 Object [] array = ccList.getSelectedValues(); 460 461 for (int j = 0; j < array.length; j++) { 462 dialogAddressbookListModel[1] 463 .removeElement((IHeaderItem) array[j]); 464 } 465 } else if (command.equals("BCC_REMOVE")) { 467 Object [] array = bccList.getSelectedValues(); 468 469 for (int j = 0; j < array.length; j++) { 470 dialogAddressbookListModel[2] 471 .removeElement((IHeaderItem) array[j]); 472 } 473 } else if (command.equals("CHOOSE")) { 475 JComboBox cb = (JComboBox ) e.getSource(); 477 478 IFolder contactFolder = (IFolder) cb.getSelectedItem(); 479 480 if (contactFolder != null) { 481 482 try { 483 IContactFacade contactFacade = ServiceConnector 484 .getContactFacade(); 485 List <IHeaderItem> list = contactFacade 486 .getAllHeaderItems(contactFolder.getId(), false); 487 488 addressbookList.setHeaderItemList(list); 489 } catch (ServiceNotFoundException e1) { 490 e1.printStackTrace(); 491 } 492 493 } 494 } 495 } 496 } | Popular Tags |