📄 messagecomposer.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 + -