davmail/src/java/davmail/ui/NotificationDialog.java

218 lines
7.3 KiB
Java

/*
* DavMail POP/IMAP/SMTP/CalDav/LDAP Exchange Gateway
* Copyright (C) 2010 Mickael Guessant
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package davmail.ui;
import davmail.BundleMessage;
import davmail.ui.browser.DesktopBrowser;
import davmail.ui.tray.DavGatewayTray;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Edit Caldav scheduling notifications.
*/
public class NotificationDialog extends JDialog {
protected boolean sendNotification;
protected JTextField toField;
protected JTextField ccField;
protected JTextField subjectField;
protected JEditorPane bodyField;
protected void addRecipientComponent(JPanel panel, String label, JTextField textField, String toolTipText) {
JLabel fieldLabel = new JLabel(label);
fieldLabel.setHorizontalAlignment(SwingConstants.RIGHT);
fieldLabel.setVerticalAlignment(SwingConstants.CENTER);
textField.setMaximumSize(textField.getPreferredSize());
JPanel innerPanel = new JPanel();
innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
innerPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
innerPanel.add(fieldLabel);
innerPanel.add(textField);
panel.add(innerPanel);
if (toolTipText != null) {
fieldLabel.setToolTipText(toolTipText);
textField.setToolTipText(toolTipText);
}
}
/**
* Notification dialog to let user edit message body or cancel notification.
*
* @param to main recipients
* @param cc copy recipients
* @param subject notification subject
*/
public NotificationDialog(String to, String cc, String subject, String description) {
setModal(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setTitle(BundleMessage.format("UI_CALDAV_NOTIFICATION"));
try {
setIconImage(DavGatewayTray.getFrameIcon());
} catch (NoSuchMethodError error) {
DavGatewayTray.debug(new BundleMessage("LOG_UNABLE_TO_SET_ICON_IMAGE"));
}
JPanel mainPanel = new JPanel();
// add help (F1 handler)
mainPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F1"),
"help");
mainPanel.getActionMap().put("help", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
DesktopBrowser.browse("http://davmail.sourceforge.net");
}
});
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(getRecipientsPanel());
mainPanel.add(getBodyPanel(description));
JPanel recipientsPanel = getRecipientsPanel();
if (to != null) {
toField.setText(to);
}
if (cc != null) {
ccField.setText(cc);
}
if (subject != null) {
subjectField.setText(subject);
}
add(BorderLayout.NORTH, recipientsPanel);
JPanel bodyPanel = getBodyPanel(description);
add(BorderLayout.CENTER, bodyPanel);
bodyField.setPreferredSize(recipientsPanel.getPreferredSize());
JPanel buttonPanel = new JPanel();
JButton cancel = new JButton(BundleMessage.format("UI_BUTTON_CANCEL"));
JButton send = new JButton(BundleMessage.format("UI_BUTTON_SEND"));
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
sendNotification = true;
setVisible(false);
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// nothing to do, just hide
setVisible(false);
}
});
buttonPanel.add(send);
buttonPanel.add(cancel);
add(BorderLayout.SOUTH, buttonPanel);
pack();
setResizable(true);
// center frame
setLocation(getToolkit().getScreenSize().width / 2 -
getSize().width / 2,
getToolkit().getScreenSize().height / 2 -
getSize().height / 2);
bodyField.requestFocus();
setVisible(true);
toFront();
requestFocus();
}
protected JPanel getRecipientsPanel() {
JPanel recipientsPanel = new JPanel();
recipientsPanel.setLayout(new BoxLayout(recipientsPanel, BoxLayout.Y_AXIS));
recipientsPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
toField = new JTextField("", 40);
ccField = new JTextField("", 40);
subjectField = new JTextField("", 40);
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_TO"), toField,
BundleMessage.format("UI_TO_HELP"));
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_CC"), ccField,
BundleMessage.format("UI_CC"));
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_SUBJECT"), subjectField,
BundleMessage.format("UI_SUBJECT_HELP"));
return recipientsPanel;
}
protected JPanel getBodyPanel(String description) {
JPanel bodyPanel = new JPanel();
bodyPanel.setBorder(BorderFactory.createTitledBorder(BundleMessage.format("UI_NOTIFICATION_BODY")));
bodyField = new JEditorPane();
bodyField.setText(description);
//HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
//bodyField.setEditorKit(htmlEditorKit);
//bodyField.setContentType("text/html");
bodyPanel.add(new JScrollPane(bodyField));
return bodyPanel;
}
/**
* Cancel notification flag.
*
* @return false if user chose to cancel notification
*/
public boolean getSendNotification() {
return sendNotification;
}
/**
* Get edited recipients.
*
* @return recipients string
*/
public String getTo() {
return toField.getText();
}
/**
* Get edited copy recipients.
*
* @return copy recipients string
*/
public String getCc() {
return ccField.getText();
}
/**
* Get edited subject.
*
* @return subject
*/
public String getSubject() {
return subjectField.getText();
}
/**
* Get edited body.
*
* @return edited notification body
*/
public String getBody() {
return bodyField.getText();
}
}