pjs/grendel/composition/Composition.java

232 строки
7.0 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.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 <talisman@anamorphic.com>
* Giao Nguyen <grail@cafebabe.org>
* Edwin Woudt <edwin@woudt.nl>
*/
package grendel.composition;
import calypso.util.Assert;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.util.Properties;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import grendel.storage.MessageExtra;
import grendel.storage.MessageExtraFactory;
import grendel.widgets.Animation;
import grendel.widgets.CollapsiblePanel;
import grendel.widgets.GrendelToolBar;
import grendel.ui.FolderPanel;
import grendel.ui.GeneralFrame;
import grendel.ui.StoreFactory;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
/**
*
* @author Lester Schueler
*/
public class Composition extends GeneralFrame {
CompositionPanel mCompositionPanel;
AddressBar mAddressBar;
public static void main(String[] args) {
//check arguments
// if (2 != args.length) {
// System.out.println ("Usage: composition mail_server_name user_name");
// System.exit(0);
// }
Composition compFrame = new Composition ();
compFrame.validate();
compFrame.pack();
compFrame.setVisible(true);
}
/**
*
*/
public Composition() {
super("Composition", "composition");
fResourceBase = "grendel.composition";
Box mBox = Box.createVerticalBox();
Session session = StoreFactory.Instance().getSession();
//session.setDebug(true);
mCompositionPanel = new CompositionPanel(session);
mCompositionPanel.addCompositionPanelListener(new PanelListener());
//create menubar (top)
// fMenu = buildMenu("mainMenubar",
// mCompositionPanel.getActions());
fMenu = buildMenu("menus.xml",
mCompositionPanel.getActions());
getRootPane().setJMenuBar(fMenu);
fToolBar = mCompositionPanel.getToolBar();
fToolBar.add(fToolBar.makeNewSpring());
// fToolBar.addItem(ToolbarFactory.MakeINSToolbarItem(ToolBarLayout.CreateSpring(),
// null));
// fToolBar.addItem(ToolbarFactory.MakeINSToolbarItem(fAnimation, null));
mAddressBar = mCompositionPanel.getAddressBar();
//top collapsible item
fToolBarPanelConstraints.anchor = GridBagConstraints.WEST;
fToolBarPanelConstraints.fill = GridBagConstraints.HORIZONTAL;
// fToolBarPanelConstraints.weightx = 1.0;
fToolBarPanel.add(fToolBar, fToolBarPanelConstraints);
fToolBarPanelConstraints.anchor = GridBagConstraints.EAST;
fToolBarPanelConstraints.fill = GridBagConstraints.NONE;
fToolBarPanelConstraints.weightx = 1.0;
fToolBarPanelConstraints.gridwidth = GridBagConstraints.REMAINDER;
fToolBarPanel.add(fAnimation, fToolBarPanelConstraints);
mBox.add(fToolBarPanel);
//bottom item
// fToolBarPanelConstraints.gridwidth = GridBagConstraints.RELATIVE;
//fToolBarPanelConstraints.fill = GridBagConstraints.HORIZONTAL;
//fToolBarPanelConstraints.weightx = 5.0;
//fToolBarPanel.add(mAddressBar, fToolBarPanelConstraints);
mBox.add(mAddressBar);
fPanel.add(BorderLayout.NORTH, mBox);
fStatusBar = buildStatusBar();
fPanel.add(BorderLayout.SOUTH, fStatusBar);
fPanel.add(mCompositionPanel);
restoreBounds();
mCompositionPanel.AddSignature();
}
public void dispose() {
saveBounds();
super.dispose(); // call last
}
protected void startAnimation() {
super.startAnimation();
}
protected void stopAnimation() {
super.stopAnimation();
}
/** Initialize the headers and body of this composition as being a reply to
the given message. */
public void initializeAsReply(Message msg, boolean replyall) {
mCompositionPanel.setReferredMessage(msg);
MessageExtra mextra = MessageExtraFactory.Get(msg);
int i;
Vector dests = new Vector();
Address from[] = null;
try {
from = msg.getReplyTo();
} catch (MessagingException e) {
}
if (from == null || from.length == 0) {
try {
from = msg.getFrom();
} catch (MessagingException e) {
}
}
if (from != null) {
for (i=0 ; i<from.length ; i++) {
dests.addElement(new Addressee(from[i], Addressee.TO));
}
}
if (replyall) {
for (int w=0 ; w<2 ; w++) {
Address list[] = null;
try {
list = msg.getRecipients(w == 0 ? Message.RecipientType.TO : Message.RecipientType.CC);
} catch (MessagingException e) {
}
if (list != null) {
for (i=0 ; i<list.length ; i++) {
dests.addElement(new Addressee(list[i], Addressee.CC));
}
}
}
}
Addressee destarray[] = new Addressee[dests.size()];
dests.copyInto(destarray);
mAddressBar.getAddressList().setAddresses(destarray);
try {
mCompositionPanel.setSubject("Re: " + mextra.simplifiedSubject());
} catch (MessagingException e) {
}
// Quote the original text
mCompositionPanel.QuoteOriginalMessage();
}
/** Initialize the headers and body of this composition
as being a message that is forwarded 'quoted'. */
public void initializeAsForward(Message msg, int aScope) {
mCompositionPanel.setReferredMessage(msg);
MessageExtra mextra = MessageExtraFactory.Get(msg);
try {
mCompositionPanel.setSubject("[Fwd: " + mextra.simplifiedSubject() + "]");
} catch (MessagingException e) {
}
// Quote the original text
if (aScope == FolderPanel.kQuoted) {
mCompositionPanel.QuoteOriginalMessage();
}
if (aScope == FolderPanel.kInline) {
mCompositionPanel.InlineOriginalMessage();
}
}
class PanelListener implements CompositionPanelListener {
public void sendingMail(ChangeEvent aEvent) {
startAnimation();
}
public void doneSendingMail(ChangeEvent aEvent) {
stopAnimation();
dispose();
}
public void sendFailed(ChangeEvent aEvent) {
stopAnimation();
}
}
}