⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messagecomposer.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 JAVA
字号:
package net.sf.pim.mail.compose;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.pim.mail.MailUtil;
import net.sf.util.StringUtil;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.forms.widgets.ScrolledForm;

public class MessageComposer extends Composite {
	private FormToolkit toolkit;

	private ScrolledForm form;

	private Text to;

	private Text cc;

	private Text body;

	private Text subject;

	private Composite attachmentComposite;

	List<String> attachements;

	private Map<String, String> mail;
	
	public MessageComposer(Composite parent, int style) {
		super(parent, style);
		attachements=new ArrayList<String>();
	}

	public void create() {
		this.setLayout(new FillLayout());

		toolkit = new FormToolkit(this.getDisplay());
		form = toolkit.createScrolledForm(this);
		Composite composite = form.getBody();
		GridLayout layout = new GridLayout();
		layout.numColumns = 2;
		composite.setLayout(layout);

		Hyperlink toLink = toolkit.createHyperlink(composite, "收件人:",SWT.NULL);
		toLink.setUnderlined(false);
		toLink.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
		toLink.addHyperlinkListener(new HyperlinkAdapter(){
			public void linkActivated(HyperlinkEvent e) {
				ContractSelectDialog dialog=new ContractSelectDialog(MessageComposer.this.getShell());
				dialog.setToList(to.getText());
				dialog.setCcList(cc.getText());
				if(dialog.open() == Window.OK ){
					to.setText(dialog.getToList());
					cc.setText(dialog.getCcList());
				}}
		});
		to = toolkit.createText(composite, "");
		to.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		to.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
		
		@SuppressWarnings("unused")
		Label label = toolkit.createLabel(composite, "抄送:");
		cc = toolkit.createText(composite, "");
		cc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		cc.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);

		label = toolkit.createLabel(composite, "主题:");
		subject = toolkit.createText(composite, "");
		subject.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		subject.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
		
		label = toolkit.createLabel(composite, "附件:");
		attachmentComposite = toolkit.createComposite(composite);
		RowLayout rowLayout = new RowLayout();
		rowLayout.spacing=10;
		attachmentComposite.setLayout(rowLayout);
		GridDataFactory.fillDefaults().grab(true, false).applyTo(attachmentComposite);
		
		if(mail != null)
			showMail();
		
		body = toolkit.createText(composite, "",SWT.WRAP | SWT.V_SCROLL);
		GridDataFactory.fillDefaults().span(2, 1).grab(true, true).applyTo(body);
		toolkit.paintBordersFor(composite);
		if(mail != null && mail.get("BODY") != null) 
			body.setText(mail.get("BODY"));
	}
	//取邮件内容
	public Map<String,String> getMail(){
		Map<String,String> mail=new HashMap<String,String>();
		mail.put("TO", to.getText());
		mail.put("CC", cc.getText());
		mail.put("SUBJECT",subject.getText());
		mail.put("BODY", body.getText());
		mail.put("ATTACHMENTS", getAttacments());
		return mail;
	}
	//设置邮件内容,用于回复和转发
	public void setMail(Map<String,String> map){
		this.mail=map;
	}

	private void showMail(){
		if(mail.get("TO") != null) to.setText(mail.get("TO"));
		if(mail.get("CC") != null) cc.setText(mail.get("CC"));
		if(mail.get("SUBJECT") != null) subject.setText(mail.get("SUBJECT"));
		if(mail.get("ATTACHMENTS") != null){
			String[] ss=StringUtil.toArray(mail.get("ATTACHMENTS"), ";");
			for(String s:ss) addAttachement(s,true);
		}
	}
	
	//以;分隔的附件列表
	private String getAttacments() {
		StringBuilder sb=new StringBuilder();
		for(String s:attachements){
			sb.append(s).append(';');
		}
		return sb.toString();
	}
	public void addAttachement(String string,boolean init) {
		attachements.add(string);
		final Hyperlink attLink = toolkit.createHyperlink(attachmentComposite, MailUtil.getTail(string,'/'),SWT.NULL);
		attLink.setData("FILE_FULL_NAME", string);
		attLink.addHyperlinkListener(new HyperlinkAdapter(){
			public void linkActivated(HyperlinkEvent e) {
				attachements.remove(attLink.getData("FILE_FULL_NAME"));
				attLink.dispose();
				MailUtil.resetSize(attachmentComposite);
				attachmentComposite.getParent().layout();
				attachmentComposite.getParent().redraw();
			}
		});
		if(!init){
			MailUtil.resetSize(attachmentComposite);
			attachmentComposite.getParent().layout();
			attachmentComposite.getParent().redraw();
		}
	}

	public boolean setFocus() {
		return to.setFocus();
	}

	@Override
	public void dispose() {
		toolkit.dispose();
		super.dispose();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -