/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (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 Netscape Communications * Corporation. Portions created by Netscape are Copyright (C) 1997 * Netscape Communications Corporation. All Rights Reserved. * * Contributors: Jeff Galyan * Edwin Woudt */ package grendel.composition; import java.awt.*; import java.awt.event.*; import java.util.Vector; import javax.swing.*; import javax.swing.table.*; import javax.swing.border.*; class AddressDialog extends Dialog implements ActionListener { private final int BUTTON_WIDTH = 100; private final int BUTTON_HEIGHT = 28; private List mSendToList; //ListBox gadget that holds recipients names. private JTable mTable; //Tbale displays the address book entries. private Vector mAddresses; //a parallel list of recipients with mSendToList. private boolean wasCanceled = true; //true if Cancel button was used to dismiss dialog. //FIX remove final Object[][] data = { {"Name", "Lester Schueler", "Don Vale", "Chris Dreckman", "Fred Cutler", "Rod Spears" }, {"Email Address", "lesters@netscape.com", "dvale@netscape.com", "chrisd@netscape.com", "fredc@netscape.com", "rods@netscape.com" }, {"Organization", "Netscape Comm.", "Netscape Comm.", "Netscape Comm.", "Netscape Comm.", "Netscape Comm." }, {"Phone", "(619)618-2227", "(619)618-2224", "(619)618-2211", "(619)618-2206", "(619)618-2228" } }; //FIX remove public static void main(String[] args) { Frame frame = new JFrame(); frame.setBackground(Color.lightGray); AddressDialog aDialog = new AddressDialog(frame); aDialog.show (); aDialog.dispose(); frame.show(); } /** * */ AddressDialog(Frame aParent) { //FIX: Resource super(aParent, "Select Addresses", true); mAddresses = new Vector(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); JComponent lookupPanel = createLookupPanel (); add (lookupPanel); JComponent SendToPanel = createSendToPanel (); add (SendToPanel); JComponent bottomPanel = createBottomPanel (); add (bottomPanel); setResizable(false); setSize (716, 480); } /** * */ private JPanel createLookupPanel () { //the outer most panel has groove etched into it. JPanel outerPanel = new JPanel(true); //FIX: Resource outerPanel.setBorder(new TitledBorder(new EtchedBorder(), "Type in the name you are looking for:")); outerPanel.setLayout (new BorderLayout ()); outerPanel.setPreferredSize(new Dimension (500, 225)); // "North" panel JPanel northPanel = new JPanel (true); northPanel.setLayout (new FlowLayout (FlowLayout.LEFT, 5, 5)); northPanel.setPreferredSize(new Dimension (500, 35)); //Search text field JTextField searchTxt = new JTextField (20); northPanel.add (searchTxt); //FIX: Resource northPanel.add (new JLabel ("In:")); JComboBox combo = new JComboBox(); combo.setPreferredSize(new Dimension (275, 25)); northPanel.add (combo); //FIX: Resource JButton b = makeButton ("Search", BUTTON_WIDTH, BUTTON_HEIGHT); ButtonModel bm = b.getModel(); bm.setEnabled(false); northPanel.add (b); // Center table TableModel dataModel; // Create the table data model dataModel = new AbstractTableModel() { public int getRowCount() { return data[0].length - 1; } public int getColumnCount() { return data.length; } public Object getValueAt(int rowIndex, int columnIndex) { return data[columnIndex][rowIndex+1]; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { data[columnIndex][rowIndex+1] = aValue; } public int getColumnIndex(Object aID) { for (int i = 0; i < data.length; i++) { if (data[i][0].equals(aID)) { return i; } } return -1; } }; // Create the table mTable = new JTable(dataModel); // Added our columns into the column model for (int columnIndex = 0; columnIndex < data.length; columnIndex++){ // Create a column object for each column of data TableColumn newColumn = new TableColumn(columnIndex); newColumn.setWidth(200); mTable.addColumn(newColumn); } mTable.setColumnSelectionAllowed(false); mTable.setShowGrid(false); // Put the table and header into a scrollPane JScrollPane scrollpane = new JScrollPane(); JTableHeader tableHeader = mTable.getTableHeader(); // create and add the column heading to the scrollpane's // column header viewport JViewport headerViewport = new JViewport(); headerViewport.setLayout(new BoxLayout(headerViewport, BoxLayout.X_AXIS)); headerViewport.add(tableHeader); scrollpane.setColumnHeader(headerViewport); // add the table to the viewport JViewport mainViewPort = scrollpane.getViewport(); mainViewPort.add(mTable); // speed up resizing repaints by turning off live cell updates tableHeader.setUpdateTableInRealTime(false); // South panel JPanel southPanel = new JPanel (true); //FIX: Resource southPanel.setLayout (new FlowLayout (FlowLayout.LEFT, 10, 0)); southPanel.add (makeButton ("To:", BUTTON_WIDTH, BUTTON_HEIGHT)); southPanel.add (makeButton ("Cc:", BUTTON_WIDTH, BUTTON_HEIGHT)); southPanel.add (makeButton ("Bcc:", BUTTON_WIDTH, BUTTON_HEIGHT)); //FIX JButton jb = makeButton ("Add to Address Book", 184, BUTTON_HEIGHT); ButtonModel jbm = jb.getModel(); jbm.setEnabled(false); southPanel.add (jb); JPanel panel2 = new JPanel (new BorderLayout (5, 5), true); panel2.setBorder (new EmptyBorder (5, 5, 5, 5)); panel2.add (northPanel, BorderLayout.NORTH); panel2.add (scrollpane, BorderLayout.CENTER); panel2.add (southPanel, BorderLayout.SOUTH); outerPanel.add (panel2, BorderLayout.CENTER); return outerPanel; } /** * The Send To Panel holds the list people. */ private JPanel createSendToPanel () { //the outer most panel has groove etched into it. JPanel etchedPanel = new JPanel(); //FIX: Resource etchedPanel.setBorder(new TitledBorder(new EtchedBorder(), "This message will be sent to:")); etchedPanel.setLayout (new BorderLayout (5, 5)); etchedPanel.setPreferredSize(new Dimension (500, 175)); JPanel panel2 = new JPanel (new BorderLayout (5, 5), true); panel2.setBorder (new EmptyBorder(5, 5, 5, 5)); // Center Listbox panel mSendToList = new List(); mSendToList.setBackground (Color.white); panel2.add (mSendToList, BorderLayout.CENTER); JPanel panel3 = new JPanel (new BorderLayout(), true); //FIX: Resource panel3.add (makeButton ("Remove", BUTTON_WIDTH, BUTTON_HEIGHT), BorderLayout.WEST); panel2.add (panel3, BorderLayout.SOUTH); etchedPanel.add (panel2, BorderLayout.CENTER); return etchedPanel; } /** * The bottom panel has the ok, cancel and help buttons. */ private JPanel createBottomPanel () { JPanel panel = new JPanel (true); panel.setLayout (new FlowLayout (FlowLayout.CENTER, 25, 8)); //FIX: Resource panel.add (makeButton ("OK", BUTTON_WIDTH, BUTTON_HEIGHT)); panel.add (makeButton ("Cancel", BUTTON_WIDTH, BUTTON_HEIGHT)); //FIX JButton b = makeButton ("Help", BUTTON_WIDTH, BUTTON_HEIGHT); panel.add (b); ButtonModel bm = b.getModel(); bm.setEnabled(false); return panel; } private JButton makeButton (String aLabel, int aWidth, int aHeight) { JButton button = new JButton (aLabel); button.setPreferredSize(new Dimension (aWidth, aHeight)); button.addActionListener (this); return button; } public Insets getInsets () { return (new Insets (25, 10, 10, 10)); } /** * Adds an entry to the send list. * @param The Addressee to be added to the list. */ private void addToSendList (Addressee aAddressee) { if (null != aAddressee) { mSendToList.add (aAddressee.deliveryString () + " " + aAddressee.getText()); mAddresses.addElement (aAddressee); } } /** * Removes the specified entry from the list. * @param The index of the entry to remove. */ private void removeFromSendList (int aIndex) { if (-1 < aIndex) { mSendToList.remove (aIndex); mAddresses.removeElementAt (aIndex); } } /** * Sets the address from aa Array. * @param aAddresses An array of addresses. * @see getAddresses */ public void setAddresses (Addressee[] aAddresses) { mAddresses.removeAllElements(); mSendToList.removeAll(); if (null != aAddresses) { for (int i = 0; i < aAddresses.length; i++) { addToSendList (aAddresses[i]); } } } /** * Returns the addresses in the form of an array. * @returns An array of addresses. * @see setAddresses */ public Addressee[] getAddresses () { int arrSize = mAddresses.size(); if (0 < arrSize) { Addressee[] anArray = new Addressee[arrSize]; mAddresses.copyInto(anArray); return anArray; } return null; } /** * Return true if cancel was pressed. */ public boolean getCanceled () { return wasCanceled; } /** * Actions to respond to are button pressed for "To", "Cc", "Bcc", "Ok", and "Canel" */ public void actionPerformed (ActionEvent e) { String s = e.getActionCommand (); //FIX: Resource if (s.equals ("To:")) { int selectedRow = mTable.getSelectedRow(); if (-1 != selectedRow) addToSendList (new Addressee ((String) data[1][selectedRow + 1], Addressee.TO)); } //FIX: Resource else if (s.equals ("Cc:")) { int selectedRow = mTable.getSelectedRow(); if (-1 != selectedRow) addToSendList (new Addressee ((String) data[1][selectedRow + 1], Addressee.CC)); } //FIX: Resource else if (s.equals ("Bcc:")) { int selectedRow = mTable.getSelectedRow(); if (-1 != selectedRow) addToSendList (new Addressee ((String) data[1][selectedRow + 1], Addressee.BCC)); } //FIX: Resource else if (s.equals ("Remove")) { int index = mSendToList.getSelectedIndex(); if (-1 < index) removeFromSendList (index); } //FIX: Resource else if (s.equals ("Cancel")) { wasCanceled = true; setVisible(false); } //FIX: Resource else if (s.equals ("OK")) { wasCanceled = false; setVisible(false); } } }