package ij.gui; import ij.IJ; import java.awt.*; import java.awt.event.*; /** A modal dialog box with a one line message and "Yes", "No" and "Cancel" buttons. */ public class YesNoCancelDialog extends Dialog implements ActionListener, KeyListener { private Button yesB, noB, cancelB; private boolean cancelPressed, yesPressed; private boolean firstPaint = true; public YesNoCancelDialog(Frame parent, String title, String msg) { super(parent, title, true); setLayout(new BorderLayout()); Panel panel = new Panel(); panel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); MultiLineLabel message = new MultiLineLabel(msg); message.setFont(new Font("Dialog", Font.PLAIN, 12)); panel.add(message); add("North", panel); panel = new Panel(); panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 8)); if (IJ.isMacintosh() && msg.startsWith("Save")) { yesB = new Button(" Save "); noB = new Button("Don't Save"); cancelB = new Button(" Cancel "); } else { yesB = new Button(" Yes "); noB = new Button(" No "); cancelB = new Button(" Cancel "); } yesB.addActionListener(this); noB.addActionListener(this); cancelB.addActionListener(this); yesB.addKeyListener(this); noB.addKeyListener(this); cancelB.addKeyListener(this); if (IJ.isMacintosh()) { panel.add(noB); panel.add(cancelB); panel.add(yesB); setResizable(false); } else { panel.add(yesB); panel.add(noB); panel.add(cancelB); } add("South", panel); pack(); GUI.center(this); show(); } public void actionPerformed(ActionEvent e) { if (e.getSource()==cancelB) cancelPressed = true; else if (e.getSource()==yesB) yesPressed = true; closeDialog(); } /** Returns true if the user dismissed dialog by pressing "Cancel". */ public boolean cancelPressed() { return cancelPressed; } /** Returns true if the user dismissed dialog by pressing "Yes". */ public boolean yesPressed() { return yesPressed; } void closeDialog() { dispose(); } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); IJ.setKeyDown(keyCode); if (keyCode==KeyEvent.VK_ENTER||keyCode==KeyEvent.VK_Y||keyCode==KeyEvent.VK_S) { yesPressed = true; closeDialog(); } else if (keyCode==KeyEvent.VK_N || keyCode==KeyEvent.VK_D) { closeDialog(); } else if (keyCode==KeyEvent.VK_ESCAPE||keyCode==KeyEvent.VK_C) { cancelPressed = true; closeDialog(); IJ.resetEscape(); } } public void keyReleased(KeyEvent e) { int keyCode = e.getKeyCode(); IJ.setKeyUp(keyCode); } public void keyTyped(KeyEvent e) {} public void paint(Graphics g) { super.paint(g); if (firstPaint) { yesB.requestFocus(); firstPaint = false; } } }