/* -*- 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. * * Created: Will Scullin , 20 Nov 1997. */ package grendel.ui; import java.awt.Dimension; import java.awt.Font; import java.awt.Insets; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import com.sun.java.swing.JLabel; import com.sun.java.swing.border.BevelBorder; public class SimpleMessageHeader extends MessageHeader { static final int kMargin = 3; JLabel fToLabel; JLabel fTo; JLabel fFromLabel; JLabel fFrom; JLabel fSubjectLabel; JLabel fSubject; public SimpleMessageHeader() { setLayout(null); setBorder(new BevelBorder(BevelBorder.RAISED)); Font bold = Font.decode("Dialog-bold-12"); Font plain = Font.decode("Dialog-12"); fToLabel = new JLabel("To: "); fToLabel.setFont(bold); add(fToLabel); fTo = new JLabel(); fTo.setFont(plain); add(fTo); fFromLabel = new JLabel("From: "); fFromLabel.setFont(bold); add(fFromLabel); fFrom = new JLabel(); fFrom.setFont(plain); add(fFrom); fSubjectLabel = new JLabel("Subject: "); fSubjectLabel.setFont(bold); add(fSubjectLabel); fSubject = new JLabel(); fSubject.setFont(plain); add(fSubject); } public void setMessage(Message aMessage) { fMessage = aMessage; if (fMessage != null) { try { StringBuffer toString = new StringBuffer(); StringBuffer fromString = new StringBuffer(); String personal = null; Address recipients[] = fMessage.getRecipients(Message.TO); Address sender[] = fMessage.getFrom(); int i; if (recipients != null) { for (i = 0; i < recipients.length; i++) { personal = null; if (recipients[i] instanceof InternetAddress) { personal = ((InternetAddress) recipients[i]).getPersonal(); } if (personal != null) { toString.append(personal); } else { toString.append(recipients[i].toString()); } if (i < (recipients.length - 1)) { toString.append(", "); } } } personal = null; if (sender != null && sender[0] instanceof InternetAddress) { personal = ((InternetAddress) sender[0]).getPersonal(); } if (personal != null) { fromString.append(personal); } else if (sender != null && sender.length > 0) { fromString.append(sender[0].toString()); } fTo.setText(toString.toString()); fFrom.setText(fromString.toString()); fSubject.setText(fMessage.getSubject()); } catch (MessagingException e) { System.err.println("SimpleMessageHeader.setMessage(): " + e); } } else { fTo.setText(""); fFrom.setText(""); fSubject.setText(""); } invalidate(); validate(); } public Dimension getPreferredSize() { Insets insets = getInsets(); insets.top += kMargin; insets.left += kMargin; insets.bottom += kMargin; insets.right += kMargin; int width1 = 0; int height1 = 0; int width2 = 0; int height2 = 0; Dimension dim; dim = fToLabel.getPreferredSize(); width1 = dim.width; height1 = dim.height; dim = fTo.getPreferredSize(); width1 += dim.width; height1 = Math.max(height1, dim.height); width1 += kMargin * 2; dim = fFromLabel.getPreferredSize(); width1 += dim.width; height1 = Math.max(height1, dim.height); dim = fFrom.getPreferredSize(); width1 += dim.width; height1 = Math.max(height1, dim.height); dim = fSubjectLabel.getPreferredSize(); width2 = dim.width; height2 = dim.height; dim = fSubject.getPreferredSize(); width2 += dim.width; height2 = Math.max(height2, dim.height); return new Dimension(insets.left + insets.right + Math.max(width1, width2), insets.top + insets.bottom + height1 + height2); } public void doLayout() { Insets insets = getInsets(); insets.top += kMargin; insets.left += kMargin; insets.bottom += kMargin; insets.right += kMargin; int width = insets.left; int height = insets.top; Dimension dim; dim = fToLabel.getPreferredSize(); fToLabel.setBounds(width, insets.top, dim.width, dim.height); width += dim.width; height += dim.height; dim = fTo.getPreferredSize(); fTo.setBounds(width, insets.top, dim.width, dim.height); width += dim.width; height = Math.max(height, insets.top + dim.height); width += kMargin * 2; dim = fFromLabel.getPreferredSize(); fFromLabel.setBounds(width, insets.top, dim.width, dim.height); width += dim.width; height = Math.max(height, insets.top + dim.height); dim = fFrom.getPreferredSize(); fFrom.setBounds(width, insets.top, dim.width, dim.height); height = Math.max(height, insets.top + dim.height); width = insets.left; dim = fSubjectLabel.getPreferredSize(); fSubjectLabel.setBounds(width, height, dim.width, dim.height); width += dim.width; dim = fSubject.getPreferredSize(); fSubject.setBounds(width, height, dim.width, dim.height); } }