package nodebox.ui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
/**
* SaveDialog
*/
public class SaveDialog extends JComponent {
public static final Font messageFont = Theme.MESSAGE_FONT;
public static final Font infoFont = Theme.INFO_FONT;
private JDialog dialog;
private int selectedValue;
private DontSaveAction dontSaveAction = new DontSaveAction();
private SaveAction saveAction = new SaveAction();
private CancelAction cancelAction = new CancelAction();
JButton dontSaveButton, cancelButton, saveButton;
public SaveDialog() {
initInterface();
}
private void initInterface() {
setLayout(new BorderLayout());
//Icon dialogIcon = Application.getInstance().getImageIcon();
//JLabel iconLabel = new JLabel(dialogIcon);
//iconLabel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new GridLayout(3, 1, 10, 0));
contentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel messageLabel = new JLabel("Do you want to save changes to this document before closing?");
messageLabel.setFont(messageFont);
contentPanel.add(messageLabel);
JLabel infoLabel = new JLabel("If you don't save, your changes will be lost.");
infoLabel.setFont(infoFont);
contentPanel.add(infoLabel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
dontSaveButton = new JButton(dontSaveAction);
cancelButton = new JButton(cancelAction);
saveButton = new JButton(saveAction);
buttonPanel.add(dontSaveButton);
buttonPanel.add(cancelButton);
buttonPanel.add(saveButton);
contentPanel.add(buttonPanel);
//add(iconLabel, BorderLayout.WEST);
add(contentPanel, BorderLayout.CENTER);
setSize(400, 250);
}
public int show(JFrame frame) {
dialog = new JDialog(frame, "Save Changes", true);
Container contentPane = dialog.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(this, BorderLayout.CENTER);
dialog.setResizable(false);
dialog.pack();
dialog.setLocationRelativeTo(frame);
dialog.getRootPane().setDefaultButton(saveButton);
dialog.setVisible(true);
dialog.dispose();
return selectedValue;
}
public class DontSaveAction extends AbstractAction {
public DontSaveAction() {
putValue(NAME, "Don't Save");
putValue(ACCELERATOR_KEY, Platform.getKeyStroke(KeyEvent.VK_D));
}
public void actionPerformed(ActionEvent e) {
selectedValue = JOptionPane.NO_OPTION;
dialog.setVisible(false);
}
}
public class SaveAction extends AbstractAction {
public SaveAction() {
putValue(NAME, "Save");
putValue(ACCELERATOR_KEY, Platform.getKeyStroke(KeyEvent.VK_S));
}
public void actionPerformed(ActionEvent e) {
selectedValue = JOptionPane.YES_OPTION;
dialog.setVisible(false);
}
}
public class CancelAction extends AbstractAction {
public CancelAction() {
putValue(NAME, "Cancel");
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0));
}
public void actionPerformed(ActionEvent e) {
selectedValue = JOptionPane.CANCEL_OPTION;
dialog.setVisible(false);
}
}
}