package org.korsakow.ide.ui.dialogs;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.event.EventListenerList;
import org.korsakow.ide.util.UIUtil;
public class UnsavedChangesDialog extends JPanel
{
public static enum Result {
DONTSAVE,
CANCEL,
SAVE,
}
private JTextArea messageLabel;
private final EventListenerList listeners = new EventListenerList();
private JButton dontSaveButton;
private JButton cancelButton;
private JButton saveButton;
private Result result;
public UnsavedChangesDialog(String message)
{
// setBackground(new Color(0.83f, 0.83f, 0.83f));
setBackground(new Color(0.79f, 0.79f, 0.79f));
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JPanel messagePanel = new JPanel(new BorderLayout());
messagePanel.setOpaque(true);
messagePanel.setBackground(new Color(0.89f, 0.89f, 0.89f));
messagePanel.add(messageLabel = new JTextArea(message));
add(messagePanel);
messagePanel.setAlignmentX(RIGHT_ALIGNMENT);
messageLabel.setLineWrap(true);
messageLabel.setOpaque(false);
messageLabel.setWrapStyleWord(true);
messageLabel.setMinimumSize(messageLabel.getPreferredSize());
messageLabel.setFocusable( false );
// messageLabel.setVerticalAlignment(SwingConstants.TOP);
// messageLabel.setVerticalTextPosition(SwingConstants.TOP);
JPanel buttonPanel = new JPanel();
buttonPanel.setOpaque(false);
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
buttonPanel.add(dontSaveButton = new JButton("Don't Save"));
buttonPanel.add(Box.createHorizontalGlue());
buttonPanel.add(cancelButton = new JButton("Cancel"));
buttonPanel.add(Box.createHorizontalStrut(10));
buttonPanel.add(saveButton = new JButton("Save"));
buttonPanel.setAlignmentX(RIGHT_ALIGNMENT);
add(Box.createVerticalStrut(10));
add(buttonPanel);
// final Dimension maxSize = new Dimension(640, 480);
// setMaximumSize(maxSize);
// final Dimension prefSize = message.getPreferredSize();
// prefSize.width = Math.min(prefSize.width, maxSize.width);
// prefSize.height += dontShowAgainCheck.getPreferredSize().height;
// prefSize.height = Math.min(prefSize.height, maxSize.height);
// setPreferredSize(prefSize);
dontSaveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
notifyResult(Result.DONTSAVE);
}
});
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
notifyResult(Result.CANCEL);
}
});
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
notifyResult(result = Result.SAVE);
}
});
UIUtil.runUITaskLater(new Runnable() {
public void run() {
cancelButton.requestDefaultFocus();
cancelButton.requestFocus();
}
});
}
private void notifyResult(Result result) {
this.result = result;
ActionEvent event = new ActionEvent(this, 0, "result");
for (ActionListener listener : listeners.getListeners(ActionListener.class))
listener.actionPerformed(event);
}
public JButton getCancelButton() {
return cancelButton;
}
public void addResultActionListener(ActionListener listener) {
listeners.add(ActionListener.class, listener);
}
public Result getResult() {
return result;
}
}