зеркало из https://github.com/mozilla/pjs.git
232 строки
7.0 KiB
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();
|
|
}
|
|
}
|
|
}
|
|
|